Dockerfile实现容器构建、jar包更新、项目重启(公网和内网)

Dockerfile实现容器构建、jar包更新、项目重启(公网和内网)

码农世界 2024-05-22 后端 97 次浏览 0个评论

Dockerfile的关键字就不一一列举了

直接上干货

公网情况下

Dockerfile

#依赖的父镜像
FROM openjdk:8
#作者
MAINTAINER mjz
#容器暴露的端口 即jar程序中运行的端口
EXPOSE 8080
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#设置编码
ENV LANG C.UTF-8
#执行shell脚本
CMD ["sh","-c","/home/data/start.sh"]

CMD中执行的是java启动脚本,其中路径:/home/data是docker容器内部路径,启动时容器与宿主机进行映射

start.sh

java -Dfileencoding=utf-8 -jar /home/data/jar包名称.jar>>/home/data/logs.log

其中jar包所在地址和日志打印地址也是容器内部地址,启动时容器与宿主机进行映射

build.sh

#编译Dockerfile文件
docker build -t java .
#启动容器
docker run -d --restart always --name java -p 8080:8080 -v /home/java_backend:/home/data java

delete.sh

期间如果构建出错,需要停止容器、删除容器、删除镜像,为了偷懒,写了删除的脚本

#停止容器
docker stop java
#删除容器
docker rm java
#删除镜像
docker rmi java

正常情况下这时docker容器已经起来了,可以输入命令查看docker日志,也可以查看jar运行时的日志

docker运行日志命令

#查看容器日志
docker logs 容器名
#查看容器实时日志
docker logs -f 容器名

jar包运行日志(在start.sh脚本中将jar包日志输出到了logs.log,所以命令如下)

tail -100f logs.log

更新jar包

只需要把宿主机jar包删除,或者最新的jar包改成在start.sh中的jar包名称,再重启docker容器即可

重启容器命令

docker restart java

也可以把重启容器的命令写到restart.sh脚本中

重要提醒,以上文件和jar包必须再同一目录下!!!

重要提醒,以上文件和jar包必须再同一目录下!!!

重要提醒,以上文件和jar包必须再同一目录下!!!

内网情况下

准备条件:需要将提前准备好的tar镜像放在宿主机下

将进行打包成tar文件命令

docker save -o java.tar java

其中java是镜像名,java.tar是要打包成的镜像包

然后将java.tar进行载入,命令如下

docker load -i java.tar

最后输入如下命令,查看是否载入成功

docker images

具体操作可以查看:docker进阶(docker容器创建和迁移)

Dockerfile

#依赖的父镜像
FROM java
#作者
MAINTAINER mjz
#容器暴露的端口 即jar程序中运行的端口
EXPOSE 8080
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#设置编码
ENV LANG C.UTF-8
#执行shell脚本
CMD ["sh","-c","/home/data/start.sh"]

与公网不同,内网FROM依赖的是刚刚载入的镜像

 start.sh 同上

java -Dfileencoding=utf-8 -jar /home/data/jar包名称.jar>>/home/data/logs.log

build.sh

#编译Dockerfile文件
docker build -t java_backend .
#启动容器
docker run -d --restart always --name java_backend -p 8080:8080 -v /home/java_backend:/home/data java_backend

注意:容器启动时一定要用最新build出来的镜像,即java_backend,之前载入的镜像不一定适用于当前的情况(因为之前的镜像有可能也是Dockerfile构建出来的,这里Dockerfile文件重新写了),不然查询容器日志会报如下错误

Dockerfile实现容器构建、jar包更新、项目重启(公网和内网)

然后查看镜像,发现多了一个,

Dockerfile实现容器构建、jar包更新、项目重启(公网和内网)

这时已经可以把之前载入的删掉了,或者留着也行,以防止后面执行delete.sh时的误操作

 delete.sh

期间如果构建出错,需要停止容器、删除容器、删除镜像,为了偷懒,写了删除的脚本

#停止容器
docker stop java_backend
#删除容器
docker rm java_backend
#删除镜像
docker rmi java_backend

正常情况下这时docker容器已经起来了,可以输入命令查看docker日志,也可以查看jar运行时的日志

docker运行日志命令

#查看容器日志
docker logs 容器名
#查看容器实时日志
docker logs -f 容器名

jar包运行日志(在start.sh脚本中将jar包日志输出到了logs.log,所以命令如下)

tail -100f logs.log

更新jar包

只需要把宿主机jar包删除,或者最新的jar包改成在start.sh中的jar包名称,再重启docker容器即可

重启容器命令

docker restart java_backend

也可以把重启容器的命令写到restart.sh脚本中

如此,内网情况下构建容器就完成了

补充

docker inspect 容器名

这个命令可以查看容器的配置信息,如下图

Dockerfile实现容器构建、jar包更新、项目重启(公网和内网)

修改配置就是在宿主机上找到如下地址进行修改

Dockerfile实现容器构建、jar包更新、项目重启(公网和内网)

转载请注明来自码农世界,本文标题:《Dockerfile实现容器构建、jar包更新、项目重启(公网和内网)》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,97人围观)参与讨论

还没有评论,来说两句吧...

Top