SpringBoot 项目构建 Docker 镜像
SpringBoot 项目构建 Docker 镜像
Spring Boot 项目部署有多种方式,这里记录其中一种。借助 maven 插件将 SpringBoot应用打包为 Docker 镜像,并上传到私有镜像仓库 Docker Registry。
安装 Docker Registry
- 首先为了保证网速建议 Docker 使用阿里云或者国内镜像仓库。修改
/etc/docker/daemon.json添加镜像。
{
"registry-mirrors": ["https://hhuovh45.mirror.aliyuncs.com"]
}
- 下载 Redistry 的 Docker 镜像
docker pull registry:2
- 使用Docker容器运行Registry服务,需要添加环境变量
REGISTRY_STORAGE_DELETE_ENABLED=true开启删除镜像的功能;
docker run -p 5000:5000 --name registry2 \
--restart=always \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
-d registry:2
- 由于Docker默认使用HTTPS推送镜像,而我们的镜像仓库没有支持,所以需要添加如下配置,改为使用HTTP推送;
{
"registry-mirrors": ["https://hhuovh45.mirror.aliyuncs.com"],
"insecure-registries": ["42.192.99.111:5000"]
}
这里
42.192.99.111是自己服务器的 IP 地址。
- Docker 开启远程 API,保证稍后我们的
jar包能上传到该服务器。修改/usr/lib/systemd/system/docker.service
修改前:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改后:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
0.0.0.0 指的是任何 IP 地址的客户端都能上传镜像到该服务器
- 重启Docker服务
systemctl daemon-reload && systemctl restart docker
- 开启防火墙的Docker构建端口(如果开启了防火墙)
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
构建镜像
- 下载示例项目
使用一个项目测试功能。项目地址:demo-code-itzhouq
- docker-maven-plugin 插件构建 Docker 镜像
org.springframework.boot
spring-boot-maven-plugin
com.spotify
docker-maven-plugin
1.1.0
build-image
package
build
itzhouq/${project.artifactId}:${project.version}
http://42.192.99.111:2375
java:8
["java", "-jar","/${project.build.finalName}.jar"]
/
${project.build.directory}
${project.build.finalName}.jar
-
相关配置说明:
- executions.execution.phase:配置执行 maven package 时构建 docker 镜像。
- imageName:用于指定镜像名称,itzhouq 是仓库名称,${project.artifactId} 是镜像名称,${project.version} 是镜像版本号。
- dockerHost:打包后上传到的 docker 服务器地址;
- baseImage:该应用所依赖的基础镜像,此处为 java;
- entryPoint:docker容器启动时执行的命令;
- resources.resource.targetPath:将打包后的资源文件复制到该目录;
- resources.resource.directory:需要复制的文件所在目录,maven 打包的应用 jar 包保存在 target 目录下面;
- resources.resource.include:需要复制的文件,打包好的应用jar包。
-
打包后自动上传构建好的镜像到私有仓库
-
私有仓库
启动 SpringBoot项目
- 使用 Docker 命令启动项目
docker run -p 8081:8081 --name spring-boot-docker \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/spring-boot-docker/logs:/var/logs \
-d itzhouq/spring-boot-docker:0.0.1-SNAPSHOT
- 如果报错注意报错信息或者使用
docker logs 容器名查看日志 - 测试访问 http://42.192.99.111:8081/docker