【2022.10.25】尝试自写一个Dockerfile

前言

用了别人这么多的docker,因为mirai的旧版本登不上了这次要自写一个docker了

因为mirai运行在openjdk环境下运行,所以首先最开始的内容便是

FROM openjdk:17-slim-buster

这里的slim-buster指的是在debian镜像基础下的openjdk环境

如果不使用这个tag的话,那么就无法使用apt安装东西

FROM openjdk:17-slim-buster
WORKDIR /home/mirai

因为前台没有程序持续运行的话,docker会直接关掉,所以加上一句

FROM openjdk:17-slim-buster
WORKDIR /home/mirai
ENTRYPOINT tail -f /dev/null

tail可以帮我们持续运行,等在容器内调试好了后再讲这句话删掉

安装脚本文件时回答问题

因为openjdk:17-slim-buster里面没有wget,那么就需要我们在这个时候安装

比如我想使用apt install wget命令时候输入y确认安装,那么有两种方法

第一种

apt install -y wget

第二种

RUN sh -c '/bin/echo -e "y" | apt install -y wget'

那么我们就可以在Dockerfile里面这么写

FROM openjdk:17-slim-buster
WORKDIR /home/mirai
RUN apt update
RUN sh -c '/bin/echo -e "y" | apt install -y wget'#这里的-e指的是开启转义,那么\n就是回车
ENTRYPOINT tail -f /dev/null

apt update这一步挺花时间的,所以先和其他命令分开

将Dockerfile先build后run再exec

进入容器后用wget命令即可检查到wget存在

调试

在容器内我输入了以下命令

apt update
apt install wget nano
wget https://github.com/iTXTech/mcl-installer/releases/download/a02f711/mcl-installer-a02f711-linux-amd64
chmod +x mcl-installer-a02f711-linux-amd64
./mcl-installer-a02f711-linux-amd64#(这里输入了六个回车\n\n\n\n\n\n)
java -jar mcl.jar#(这里输入了exit\n)
./mcl --update-package net.mamoe:mirai-console-terminal --channel maven-prerelease
./mcl --update-package net.mamoe:mirai-core-all --channel maven-prerelease
./mcl --update-package net.mamoe:mirai-console --channel maven-prerelease
./mcl -u

sed 's/123456/'${QQ_ID}'/' config/Console/AutoLogin.yml > config/Console/A.yml 
sed 's/pwd/'${QQ_PASS}'/' config/Console/A.yml > config/Console/B.yml 
sed 's/protocol: ANDROID_PHONE/protocol: ANDROID_PAD' config/Console/B.yml > config/Console/AutoLogin.yml 
rm -f config/Console/A.yml 
rm -f config/Console/B.yml

最终Dockerfile文档

FROM openjdk:17-slim-buster
WORKDIR /home/mirai

ENV QQ_ID 账号
ENV QQ_PASS 密码
ENV WS_PORT 6700
ENV WS_TOKEN 1234567890
# 复制网页内下载链接:https://github.com/iTXTech/mcl-installer/releases/
ENV DOWNLOAD https://github.com/iTXTech/mcl-installer/releases/download/a02f711/mcl-installer-a02f711-linux-amd64
#安装wget和nano
RUN apt update
RUN sh -c '/bin/echo -e "y" | apt install wget nano'
# 下载mcl-installer
RUN wget -O mcl-install ${DOWNLOAD} && \
    chmod +x mcl-install && \
    sh -c '/bin/echo -e "\n\n\n\n\n\n" | ./mcl-install' && \
    rm -f mcl-install
# 下载
RUN sh -c '/bin/echo -e "exit\n" | java -jar mcl.jar'
#更新源,来自https://github.com/mamoe/mirai/issues/2298
RUN ./mcl --update-package net.mamoe:mirai-console-terminal --channel maven-prerelease && \
./mcl --update-package net.mamoe:mirai-core-all --channel maven-prerelease && \
./mcl --update-package net.mamoe:mirai-console --channel maven-prerelease
RUN sh -c '/bin/echo -e "exit\n" | ./mcl -u'
# 这里是把全局变量修改为你自己的
RUN sed 's/123456/'${QQ_ID}'/' config/Console/AutoLogin.yml > config/Console/A.yml && \
    sed 's/pwd/'${QQ_PASS}'/' config/Console/A.yml > config/Console/B.yml && \
    sed 's/protocol: ANDROID_PHONE/protocol: ANDROID_PAD' config/Console/B.yml > config/Console/AutoLogin.yml && \
    rm -f config/Console/A.yml && \
    rm -f config/Console/B.yml


ENTRYPOINT tail -f /dev/null

参考链接

docker 仓库里面python好多tag都代表什么意思?我们该如何选择_51CTO博客_docker tag 详解

Dockerfile中如何自动回答标准输入的问题 - 走看看 (zoukankan.com)

docker run 如何让容器启动后不会自动停止 (jerrymei.cn)

posted @ 2022-10-26 08:34  Mokou  阅读(171)  评论(0编辑  收藏  举报