目录
1 缘起与目的
在我刚实习的时候,老程序猿们通过docker容器优雅的启停jar包、查看日志等骚操作深深的的震撼了我,现在我们来探究一番他们是怎么部署docker容器jar包应用的。
本次教程想要实现的目标效果如下:
- 使用docker容器启停jar包
- 能通过docker logs查看日志
- 替换jar包不用容器拷贝,直接放到宿主机指定目录,重启容器即可
- log日志可以从宿主机直接访问
- 最好能在启动时指定jar包使用哪个yml文件
2 理清思路
基于我们的目的,我们思路也逐渐理顺了,基本思路如下。
- Dockerfile文件。我们在Dockerfile中需要加载jdk环境。设置每次重启docker执行重启jar包命令。在run时可以通过传参的形式指定使用的yml。
- docker run。启动容器时需要配置端口。挂载jar包位置。可以指定配置yml。
- docker restart。重启jar包时需要重启docker容器。
3 Dockerfile
3.1 上传Dockerfile文件
1 | FROM eclipse-temurin:11-jre-alpine |
注意:在dockerfile中只能有1个CMD指令,如有多个,最后一个生效
3.2 创建镜像
1 | cd /home/docker/app |
--tag, -t
: 镜像的名字及标签,通常 name:tag 或者 name 格式
4 启动容器
4.1 指定配置文件yml
1 | docker run -d -p 8815:8080 -v /home/docker/app/:/usr/local/app/ -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime:ro -e properties="--spring.profiles.active=test" --name pm-app jar-app |
-d
表示在后台启动-p
宿主机端口:docker端口 表示将容器的端口映射成宿主主机的端口-v /xxx:/yyy
表示将宿主主机的jar文件,映射到容器中(分号前为宿主主机的路径就是服务器的路径,分号后为容器中的路径)--name pm-app
表示为该容器取一个全局唯一的名称,这里我取的名称为pm-app
jar-app 使用哪个镜像创建容器-v
参数中ro代表只读模式(read only),要和宿主机时区同步,否则log文件里时间和实际差八个小时
注意:由于使用tee命令的原因,启动时的输出不能退出容器。只能重新连接一个ssh。笔者这里也没有什么好办法。大家有什么办法可以评论或者私信我。
4.2 不指定配置文件yml
1 | docker run -d -p 8815:8080 -v /home/docker/app/:/usr/local/app/ --name pm-app jar-app |
5 查看日志
1 | docker logs -ft --tail 50 pm-app |
1 | cat /home/docker/app/log.file |
6 更新jar包
上传jar包之后重启docker容器
1 | docker restart pm-app |
7 配置nginx请求转发
1 | server { |
8 常用Docker命令
1 | # 查看所有镜像 |
扩展阅读:
Java SpringBoot 项目构建 Docker 镜像调优实践
SpringBoot 2.3.x 分层构建 Docker 镜像实践