系列:
spring-boot使用maven构建docker镜像(单服务)
spring-boot使用maven构建docker镜像(单服务+MySQL)
spring-boot使用maven构建docker镜像(多服务)
文章目录
单服务 构建docker镜像 + 运行
使用Dockerfile构建镜像
前提:
- 开启docker远程管理端口(此案例演示暂不考虑安全问题,直接开启2375端口)
1. 编写服务的 Dockerfile
Dockerfile官方文档:https://docs.docker.com/engine/reference/builder/
src/main/docker/Dockerfile
FROM openjdk:8-jdk-alpine
ADD *.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Duser.timezone=GMT+08", "-jar", "/app.jar"]
2. pom.xml 引入 io.fabric8/docker-maven-plugin 插件
io.fabric8/docker-maven-plugin官方文档:http://dmp.fabric8.io/
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<configuration>
<verbose>true</verbose>
<!-- docker远程管理url -->
<dockerHost>tcp://192.168.121.129:2375</dockerHost>
<images>
<image>
<!-- 镜像名称 -->
<name>${project.artifactId}:${project.version}</name>
<build>
<dockerFile>${project.basedir}/src/main/docker/Dockerfile</dockerFile>
<assembly>
<name>/</name>
<!-- artifact是预定义的值,表示将项目打包后的jar拷贝到编译上下文中,便于Dockerfile ADD指令 -->
<descriptorRef>artifact</descriptorRef>
</assembly>
</build>
<run>
<!-- 运行时容器名称 -->
<containerNamePattern>${project.artifactId}</containerNamePattern>
<!-- 映射端口(服务端口:容器内端口) -->
<ports>
<port>8080:8080</port>
</ports>
</run>
</image>
</images>
</configuration>
</plugin>
3. maven 命令
- 构建镜像
mvn clean package docker:build
- 删除镜像
mvn docker:remove
- 启动容器
mvn docker:run
- 停止容器(自动删除容器)
mvn docker:stop
- 完整流程
mvn clean package docker:stop docker:build dokcer:run
推送镜像到私有镜像仓库
假设私库地址为:192.168.121.129:5000
在镜像名称前缀加上私库地址即可
<!-- 镜像名称 -->
<name>192.168.121.129:5000/${project.artifactId}:${project.version}</name>
推送镜像到私库 mvn docker:push
常见问题
2375 端口不通问题排查
- 是否开启docker远程访问(lsof -i 2375)
- 是否关闭防火墙(systemctl status firewalld)
- systemct stop firewalld && systemct disable firewalld //关闭&禁用防火墙