天天看點

SpringBoot 整合 Docker

最近備忘錄新加的東西倒是挺多的,但到了新環境水土不服沒動力去整理筆記

1. Demo Project

首先準備一個簡單的項目,用來部署到 Docker 主機上,并且能驗證該項目是否成功運作

1.1 接口準備

準備一個測試接口,用于校驗 Docker 部署是否成功

@RestController
@RequestMapping("/")
public class HelloController {

    @GetMapping("/hello")
    public String helle() {
        return "Hello World";
    }
}
           

1.2 配置準備

在 application.yml 檔案中添加 Docker 主控端位址,友善統一管理(該功能需要安裝依賴插件)

server:
  port: 8080

spring:
  application:
    name: docker-deploy-test

docker:
  host: http://xxx.xxx.xxx.xxx:2375
           

2. Docker 開啟遠端連接配接

Docker 也是 Client/Serve 架構(dameon守護程序),其預設隻能本地通路, 是以得設定成可外網通路我們才能部署項目到 Docker 上

1.1 修改配置檔案

在 Docker 主控端上編輯配置,添加下面一行配置(意思是任何位址都能通路 2375 端口)

$vim /usr/lib/systemd/system/docker.service
 
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
           

1.2 重新整理配置、重新開機

$systemctl daemon-reload
$systemctl restart docker
           

1.3 認證登入

直接開放 2357 端口,那麼任何人都可以往 Docker 主控端推送東西,筆者當初就被推送了挖礦的鏡像,主機卡死登不上去,後來隻能無奈重裝系統鏡像。Docker支援使用 SSL 證書登入,如果在外網環境請務必使用 SSL 登入(筆者記錄了 OpenSSL 的筆記 ---- 用于認證,還沒來得及整理)

3. IDEA 安裝 Docker 插件

筆者 2019 版的 IDEA 已經預設內建了 Docker 插件,不需要再次安裝。隻需把遠端主機位址和端口配上讓 IDEA 連接配接 ,最後驗證是否連接配接上遠端 Docker 主機即可

SpringBoot 整合 Docker
這裡建立一個 Docker,填上主機位址會自動連接配接,顯示 Connection successful 則表示 IDEA 連上主控端了

4. Maven 添加 Docker 插件

上一步的 IDEA 插件可以建構鏡像并部署了,還能管理 Docker。但筆者是 maven 插件 和 IDEA 插件并用,能夠友善建構程式和部署

<!--  docker 插件  -->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>

    <!--  綁定 docker:build 到 maven 的 package 生命周期  -->
    <executions>
        <execution>
            <id>docker-build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>

    <!--  插件的配置  -->
    <configuration>
        <!--  建構的鏡像的名字 :标簽  -->
        <imageName>${project.artifactId}:${project.version}</imageName>
        <!--  存放dockerfile的路徑  -->
        <dockerDirectory>${project.basedir}</dockerDirectory>
        <!--  docker Host 位址,用插件在 initialize 階段從 application.yml 解析  -->
        <dockerHost>${docker.host}</dockerHost>
        <!--  SSL 認證證書位址,若開啟 SSL 登入  -->
        <!--  <dockerCertPath></dockerCertPath>  -->
        <resources>
            <resource>
                <!--  使用什麼資源來建構鏡像(就是jar包),以及将鏡像推送到容器的那個目錄下  -->
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>
           

5. 編寫Dockerfile

建立 Dockerfile 檔案,填入下面的内容,然後将其放入到項目的根目錄

FROM openjdk:8-jdk-alpine

MAINTAINER [author] [[email protected]]

ARG JAR_FILE=/target/*.jar

COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]
           
SpringBoot 整合 Docker

6. 打包項目

在 Maven 插件中綁定了 Package 與 Docker:build 的執行過程,即把項目打包成 jar 之後會自動執行 Dockr:build 來建構鏡像并釋出到遠端 Docker 主控端上(若項目較大,那麼等待鏡像推送到 Docker 主控端上的時間會較長)

SpringBoot 整合 Docker

7. 建立容器

在 IDEA 的插件中可以管理 Docker,點開右下角 services 裡面可以看到連接配接上的 Docker 裡有剛才建構的鏡像,然後我們可以選擇這個鏡像右鍵來建立容器

在彈出框裡面填入要建立的容器的名字,以及容器映射的端口,最後點選 Run,等待容器啟動即可。啟動完成後可以在 IDEA 的插件裡看到建立的容器,點選可以檢視容器的詳情

SpringBoot 整合 Docker

8. 校驗部署

使用主控端的 IP 位址或域名來通路剛才釋出的測試接口

SpringBoot 整合 Docker