以下是我的打包过程,大家可以借鉴。我也是第一次慢慢摸索,打包一个公共项目,自己上传。
如果嫌麻烦,可以直接使用我的镜像,直接跳到拉取镜像!
docker打包当前dinky项目
先在当前目录下,增加Dockerfile的文件。
因为官方的docker的dinky总有问题,特别麻烦。
编辑内容
FROM OpenJDK:8-jdk-alpine WORKDIR /app RUN apk update && \ apk add --no-cache bash && \ mkdir -p /app/dinky COPY dinky /app/dinky ENV 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加入进去。
注册flink实例
注意这个有时候注册不上去,如何地址没问题。是可以的。
如果还有疑问,就是看 dinky的nohup.out的日志。
刚才我竟然用了中文符号的:看也看不出来。
看日志才知道。现在就正常。
以下是打包dockerfile 碰到的一些问题 不断的修正。
tips: 修改
FROM alpine:latest WORKDIR /app RUN apk update && \ apk add --no-cache bash && \ mkdir -p /app/dinky COPY dinky /app/dinky ENV MYSQL_ADDR=111.231.74.191:3306 # CMD /app/dinky/auto.sh stop && /app/dinky/auto.sh start 1.18
查看日志
tail -n 500 nohup.out nohup: 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 在后台模式下启动容器。