1. 程式人生 > >Docker Maven外掛本地構建映象釋出至遠端伺服器

Docker Maven外掛本地構建映象釋出至遠端伺服器

環境使用阿里雲ECS伺服器及Ubuntu 16.04進行測試

Ubuntu 16.04安裝Docker

1.安裝步驟

# step 1: 安裝必要的一些系統工具,新增apt支援https的URLs(如不存在/usr/lib/apt/methods/https這個檔案,先安裝apt-transport-https包)
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安裝GPG證書
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 寫入軟體源資訊 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # Step 4: 更新並安裝Docker-CE sudo apt-get -y update sudo apt-get -y install docker-ce

2.安裝後檢視版本資訊

docker -v

檢視docker版本

3.可以從映象倉庫拉取一個測試映象

docker pull hello-world

docker測試映象

4.查詢可用映象

docker images

查詢可用映象

5.啟動docker服務

service docker start

6.啟動測試映象

docker run hello-world

啟動測試映象

建立測試工程

1.使用IDEA生成一個基礎的Spring Boot工程

2.在pom檔案中新增docker-maven-plugin外掛

<?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.laravelshao.springboot</groupId> <artifactId>deploy-docker</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>deploy-docker</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</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> </properties> <dependencies> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--docker maven 外掛--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>micro-deploy-docker</imageName> <!--注意 修改成遠端伺服器地址--> <dockerHost> http://X.X.X.X:2375</dockerHost> <dockerDirectory>docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>

3.在工程根目錄下新增docker資料夾並新增Dockerfile檔案

FROM frolvlad/alpine-oraclejdk8:slim

VOLUME /opt/common

ADD deploy-docker-0.0.1-SNAPSHOT.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

EXPOSE 8080

4.提供一個測試介面

@RestController
public class DemoController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello world docker";
    }
}

5.構建映象併發布到遠端伺服器

mvn clean package docker:build

構建docker映象

6.檢視相關部落格後發現遠端伺服器必須開啟docker遠端api

解決方法:

① 在/etc/systemd/system目錄下新建目錄docker.service.d,並新建檔案http-proxy.conf,新增以下內容儲存

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

② 重新載入配置

systemctl daemon-reload

③ 重啟docker服務

service docker restart

④ 檢視docker程序,發現配置已經更新

ps -ef | grep docker

檢視docker程序

7.再次嘗試構建映象釋出到遠端伺服器,還是報連線失敗

mvn clean package docker:build

構建映象失敗

解決方法:

實在不知道那還有問題,就嘗試在阿里雲ECS管理控制檯有沒有相關設定,突然看到有一個安全組配置,新增一個安全組規則

阿里雲安全組管理

開放埠2375

8.第三次嘗試構建映象釋出到遠端伺服器,總算推送成功
映象構建成功

9.查詢可用映象,存在剛才構建的映象

docker images

檢視剛才構建映象

10.啟動當前映象

docker run -p 8080:8080 micro-deploy-docker:latest

11.請求測試介面http://X.X.X.X:8080/hello,發現無法訪問,這時需要在阿里雲的安全組中開放8080埠供服務請求使用
請求測試介面

新增規則之後再次請求,總算成功了,不容易。