spring-boot使用maven構建docker鏡像(單服務)

系列:
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 //關閉&禁用防火牆
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章