使用Maven 外掛構建docker 映象和推送倉庫
阿新 • • 發佈:2018-12-26
案例 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:build
或
mvn 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
中的 plugin
的com.spotify
在configuration
元素內增加
<!--就是settings.xml 中 server.id -->
<serverId>docker-hub</serverId>
執行命令
mvn clean package -DpushImage
注意:pushImage
標識,標識推送映象標識,沒有此標識,則不推送
推送到本地倉庫
本地倉庫很簡單
修改 pom.xml
中的 plugin
的com.spotify
的configuration.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
即可看到效果