系列:
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 //關閉&禁用防火牆