以下是我的打包过程,大家可以借鉴。我也是第一次慢慢摸索,打包一个公共项目,自己上传。
如果嫌麻烦,可以直接使用我的镜像,直接跳到拉取镜像! <可以在任何地方的服务器进行拉取>
docker打包当前dinky项目
先在当前目录下,增加Dockerfile的文件。
因为官方的docker的dinky总有问题,特别麻烦。
编辑内容
FROM openjdk:8-jdk-alpineWORKDIR /appRUN apk update && \apk add --no-cache bash && \mkdir -p /app/dinkyCOPY dinky /app/dinkyENV MYSQL_ADDR=111.231.74.191:3306# CMD /app/dinky/auto.sh stop && /app/dinky/auto.sh start 1.18
执行打包命令
docker build -t junlin4040/dinky .
推送镜像
docker push junlin4040/dinky
可以在任何地方的服务器进行拉取
docker pull junlin4040/dinky
启动容器
docker run -itd --name dinky --publish 8888:8888 --env MYSQL_ADDR=111.231.74.191:3306 junlin4040/dinky
注意MYSQL_ADDR 修改到你们的ip,尽量别连我的。
然后注意你们的数据库需要自己初始化dinky和dinky的sql数据。
进入容器
docker exec -it dinky /bin/bash
执行命令
cd dinky
找到相关命令。
执行
./auto.sh start 1.18如果提示 permission denied 执行修改权限命令我很直接,直接
chmod -R 777 /app/dinky再次执行
./auto.sh start 1.18然后用你的ip:8888就可以,如果是公网,需要打开防火墙,把8888加入进去。
以下是打包dockerfile 碰到的一些问题 不断的修正。
tips: 修改
FROM alpine:latestWORKDIR /appRUN apk update && \apk add --no-cache bash && \mkdir -p /app/dinkyCOPY dinky /app/dinkyENV MYSQL_ADDR=111.231.74.191:3306# CMD /app/dinky/auto.sh stop && /app/dinky/auto.sh start 1.18
查看日志
tail -n 500 nohup.outnohup: can't execute 'java': No such file or directory
打包环境还是得加java
FROM alpine:latest 修改为 FROM openjdk:8-jdk-alpine
仿照例子
# jdk
FROM openjdk:8-jdk-alpine
# label
LABEL by="https://github.com/xxd763795151/kafka-console-ui"
# root
RUN mkdir -p /app && cd /app
WORKDIR /app
# config log data
RUN mkdir -p /app/config && mkdir -p /app/log && mkdir -p /app/data && mkdir -p /app/lib
# add file
ADD ./lib/kafka-console-ui.jar /app/lib
ADD ./config /app/config
# port
EXPOSE 7766
# start server
CMD java -jar -Xmx512m -Xms512m -Xmn256m -Xss256k /app/lib/kafka-console-ui.jar --spring.config.location="/app/config/" --logging.home="/app/log" --data.dir="/app/data"
本想使用scratch 不使用任何环境
FROM scratch
WORKDIR /dinky
COPY dinky /dinky
ENV MYSQL_ADDR=111.231.74.191:3306
特别的
RUN mkdir -p /app && cd /app这个指令执行了两个操作:
mkdir -p /app:创建一个名为 /app 的目录。-p 选项表示如果目录已经存在,则不会引发错误,并且会递归创建所需的父目录。
cd /app:将当前工作目录更改为 /app。这意味着接下来的指令将在 /app 目录中执行。
因为要执行
mkdir
scratch改为Alpine
请注意,使用
-d 模式运行容器时,如果容器没有一个长时间运行的进程,容器可能会自动退出。这也可能是您在使用
docker run -d 后没有看到容器的原因之一。您可以通过检查容器的日志来查找容器为什么退出以及是否有错误发生。是的,当您使用 docker run -it 在一个交互式终端中启动容器时,即使容器内部没有长时间运行的程序,容器也会保持运行状态。这是因为交互式终端会话会持续保持连接,使容器保持活动状态。
在这种情况下,当您退出交互式终端会话时,容器可能会自动停止并退出。如果您希望容器在后台持续运行,而无需保持与容器的交互,可以使用 docker run -d 在后台模式下启动容器。