1. 程式人生 > >使用Maven 外掛構建docker 映象和推送倉庫

使用Maven 外掛構建docker 映象和推送倉庫

案例 spring cloud eureka server 構建 docker 映象 和推送倉庫
fox.風

專案 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion> <groupId>com.foxwho</groupId> <artifactId>fox-eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>fox-eureka-server</name> <description
>
Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.BUILD-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository -->
</parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <executions> <!--執行 mvn package 時 自動 執行 mvn docker:build--> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--推送到私有倉庫--> <!-- <imageName>localhost:5000/fox/fox-eureka-server</imageName> --> <!--本地--> <imageName>fox/fox-eureka-server</imageName> <imageTags> <imageTag>0.0.1</imageTag> <!--可以指定多個標籤--> <imageTag>latest</imageTag> </imageTags> <!--覆蓋已存在的標籤 映象--> <forceTags>true</forceTags> <!--使用pom 配置--> <baseImage>java</baseImage> <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> <!--使用pom 配置 END--> <!--使用 Dockerfile--> <!--<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>--> <!--使用 Dockerfile END--> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>

構建命令 及啟動docker 映象

mvn package
或
mvn clean package

啟動docker 映象

docker run -d -p 1111:1111  fox/fox-eureka-server:0.0.1 --name fox-eureka-server:0.0.1

1111 是 fox-eureka-server 內的埠

其他說明

自動構建docker 映象配置主要在 plugin中的com.spotify
說明:

合併構建命令

                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>

此配置 主要是 執行 mvn package 時 自動 執行 mvn docker:build,如果沒有此配置那麼要執行

mvn pakage docker:buildmvn clean pakage docker:build

同時推送映象到倉庫

推送遠端倉庫

在MAVEN 的全域性配置檔案settings.xml加入或修改

<servers>
<server>
    <id>docker-hub</id>
    <username>docker Hub 的使用者名稱</username>
    <password>docker Hub 的密碼</password>
    <configuration>
        <email>docker Hub 的郵箱</email>
    </configuration>
</server>
</servers>

接著修改 pom.xml 中的 plugincom.spotifyconfiguration元素內增加

<!--就是settings.xml 中 server.id -->
<serverId>docker-hub</serverId>

執行命令

mvn  clean package -DpushImage

注意:pushImage標識,標識推送映象標識,沒有此標識,則不推送

推送到本地倉庫

本地倉庫很簡單
修改 pom.xml 中的 plugincom.spotifyconfiguration.imageName元素增加 本地地址和埠即可
例如:本地 倉庫地址及埠為 http://localhsot:5000
imageName

<imageName>fox/fox-eureka-server</imageName>

修改為

<imageName>localhost:5000/fox/fox-eureka-server</imageName>

執行命令

mvn clean package docker:build -DpushImage

注意:pushImage標識,標識推送映象標識,沒有此標識,則不推送

docker compose 編排

修改所有微服務配置eureka.client.serviceUrl.defaultZone (fox-eureka-server除外):

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/

注意,以上修改完成後,要重新構建及推送到倉庫

docker-compose.yml 檔案如下

version : "2"
services :
    peer1:
        image:fox/fox-eureka-server:0.0.1
        ports:
            - "1111:1111"
        environment:
            - spring.profiles.active=peer1
    peer2:
        image:fox/fox-eureka-server:0.0.1
        ports:
            - "1112:1112"
        environment:
            - spring.profiles.active=peer2

    service-provider:
        image:fox/fox-eureka-service-provider:0.0.1
    feign-service--consumer:
        image:fox/fox-eureka-feign-service-consumer:0.0.1
    api-gateway:
        image:fox/api-gateway:0.0.1
    config-eureka-server:
        image:fox/config-eureka-server:0.0.1
    config-eureka-client:
        image:fox/config-eureka-client:0.0.1
    fox-dashboard:
        image:fox/fox-dashboard:0.0.1

注意,這裡只是一個 docker compose 案例,具體需要開啟哪些埠需要 自己去配置

最後執行命令

docker-compose up

開啟瀏覽器 網址 http://localhost:1111 即可看到效果