基于Docker容器的Java服务部署手册
基于Docker容器的Java服务部署手册
目前公司后端项目部署文档;不建议使用java -jar命令的方式来直接运行Java服务,这种方式不便于管理
这里不采用打包Docker镜像的方式,用openjdk
镜像+挂载目录的方式来在容器下运行jar文件;这样不需要维护镜像仓库,只需了解基础的Docker命令就能部署
1 服务器环境准备
1.1 安装Docker
1 |
|
1.2 拉取openjdk
镜像
1 |
|
2 具体部署步骤
2.1 打包jar文件
打包方式
- 可以Maven的
package
命令或者Gradle的bootJar
之类的命令来打包生成jar - 也可以在Jenkins之类的构建工具下打包jar文件到约定存储目录
不建议将环境相关的配置文件放在src/main/resources目录下直接打包
2.3 上传.jar文件至目标服务器
.jar文件一般放在/srv/java
目录下,这个目录根据具体情况还可以再细分,比如细分/srv/java/dev
和/srv/java/test
分别用于开发环境和测试环境
2.3 编辑服务器上的配置文件
在服务器上确保创建了/var/work
这样的目录 再以项目名创建子目录,比如abc
项目对应的完整路径是/var/work/abc
再创建config目录,里面新建application.properties配置文件(完整路径是/var/work/abc/config/application.properties)
2.4 新建并运行容器
示例命令参考:
1 |
|
命令行参数详解:
-d
让容器在后台运行--net host
指定使用宿主机的网络,这样服务配置指定的端口等于直接绑在宿主机上,外部直接用宿主机ip+程序端口就能访问--name abc
指定容器名为abc
-v
将宿主机的目录挂载映射到容器内,使得容器内程序可以读/写到- 格式是:
-v ${宿主机的路径}:${容器内的路径}
- 格式是:
-w
指定容器内程序的当前目录-e TZ="Asia/Shanghai"
指定中国时区(重要,如果不指定,程序内时间显示的会减8小时)--log-driver journald
将容器日志写systemd-journald
里,默认是写到.json文件的,不便于管理--restart always
设置容器自动重启:程序崩溃或者服务器重启后,容器都会尝试自动启起来openjdk:11 java -jar /srv/java/abc-service-1.0.jar
镜像名:版本,后面java -jar /srv/java/abc-service-1.0.jar
是CLI命令
其它说明
-p
和-P
参数也不需要配置,因为端口号是程序配置文件自己指定,并且直接绑到宿主机上的(--net host
)-e SERVICE_NAME
,--expose
和-l traefik.*
这样的参数不再需要配置,因为项目上一般不会使用注册中心,也不大会有多个实例需要负载均衡的情况
2.5 其它维护命令
1 |
|
基于Docker容器的Java服务部署手册
http://blog.jingxiang.ltd/2023/05/30/基于Docker容器的Java服务部署手册/