1. 程式人生 > >Windows Docker 部署 Spring Boot 專案

Windows Docker 部署 Spring Boot 專案

目錄

  • Docker Configuration
    • Config IDEA Plugin
  • Create Spring Boot Project
  • Containerize It
    • Use Dockerfile
    • Use Maven Plugin
  • Troubleshooting
  • Summary
  • Reference
  • Source Code

本文首發於我的個人部落格,Windows Docker 部署 Spring Boot 專案 ,歡迎訪問!

使用 Docker 部署一個簡單的 Spring Boot 資料庫專案。

最近容器化技術 hin 流行啊,所以開始折騰一下唄。試用了下,有的時候的確比虛擬機器要方便。其實起初是要用 Redis,但是 Windows 安裝不方便,於是就看了下 Docker,基本開箱即用,Docker Hub 上 pull 一個 Redis 官方映象就可以了。剛好最近在學 Spring Cloud 微服務,也就嘗試下 Docker 部署 Spring Boot 專案。

內容上,本文主要是對 Spring Boot 官方文件的一個補充,英語不錯的可以直接瀏覽參考文獻 6-7。

Docker 的基本概念和用法,這裡就詳細展開了,可以看參考文獻 1-3。

Docker Configuration

Docker 一般是安裝在 Linux 系統中的,但是目前 Windows 也能使用,下載安裝後開箱即用。額外需要配置的是:

1.暴露 TCP 埠,可以在 IDEA 的 Docker 外掛中連線使用。

2.替換官方的 Docker 倉庫,使用阿里雲映象加速。在 Daemon 中可進行配置。

Config IDEA Plugin

Docker 本身是沒有 GUI 介面的,所以所有的維護管理都必須使用命令列,比較麻煩,而 IDEA 給我們提供了一個簡單的 Docker 外掛,用於管理 Image 和 Container。

在設定中直接搜尋 docker,新增一個 Docker Engine,配置 URL,稍等下面提示連線成功後,就可以了。如果連線失敗了,可以檢查下 TCP 的 2375 埠是否暴露了。

然後在底部,就能看到 Docker 的 tab了。裡面的資訊和命令列中看到的一致。基本的建立、刪除、埠對映等操作都能在上面進行。

那麼 Docker 相關的配置就完成了。

Create Spring Boot Project

這裡用來演示的是一個 Spring Boot 的資料庫專案。跟之前一樣,配置一些基本內容就可以了。

<!--pom.xml-->
<groupId>com.example</groupId>
<artifactId>spring-docker</artifactId>
<version>1.0.0</version>
<name>spring-docker</name>

<properties>
  <java.version>1.8</java.version>
  <skipTests>true</skipTests>       
  <druid-spring-boot-starter.version>1.1.10</druid-spring-boot-starter.version>
  <dockerfile-maven-plugin.version>1.4.10</dockerfile-maven-plugin.version>
  <docker.image.prefix>springboot</docker.image.prefix>
</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>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>${druid-spring-boot-starter.version}</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>
# application.yml
# 配置資料庫資訊
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://ip:port/test?serverTimezone=Hongkong&characterEncoding=utf-8&useSSL=false
    username: 
    password: 
// Spring Boot 啟動類
@SpringBootApplication
@RestController
public class SpringDockerApplication {

    private final JdbcTemplate jdbcTemplate;
    public SpringDockerApplication(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @GetMapping("/")
    public Message index() {
        RowMapper<Message> rowMapper= new BeanPropertyRowMapper<>(Message.class);
        Message msg = jdbcTemplate.queryForObject("select * from message where k = ?", rowMapper,"msg");
        return msg;
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringDockerApplication.class, args);
    }
}

本地訪問,能成功執行就說明,Spring Boot 已經配置完成了。下面就是容器化的操作了。

Containerize It

容器化其實就是建立 Docker 映象的過程,需要把 jar 包封裝進去。具體有兩種方式:

  1. 建立 Dockerfile,手動執行 build 和 run。
  2. 使用 dockerfile-maven-plugin 外掛。

Use Dockerfile

首先,在 src/main 下建立 docker 資料夾,並建立一個 Dockerfile,內容如下:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY spring-docker-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

假設大家對 Dockerfile 有一定的瞭解,解釋一下上面的內容,

  • FROM...,表示使用 openjdk 作為基本映象,標籤為:8-jdk-alpine,意思 jdk 版本為 1.8,精簡版。
  • VOLUME...,建立一個 VOLUME 指向 /tmp 的內容。因為這是 Spring Boot 應用程式預設為 Tomcat 建立工作目錄的地方。效果是在 / var / lib / docker 下的主機上建立一個臨時檔案,並將其連結到 /tmp 下的容器。
  • COPY...,把專案中的 jar 檔案複製過去,並重命名為 app.jar
  • ENTRYPOINT...,執行 java -jar 啟動專案。java.security.egd=file:/dev/./urandom 的目的是為了縮短 Tomcat 啟動的時間。

接下來,使用 maven 打包一個 jar,手動複製到 src/main/docker目錄下。

配置 IDEA 來 build 和 run docker。

需要配置的引數如下:

  1. Name,建立的配置檔名稱。
  2. Image tag,建立映象的 repository:tags。
  3. Container name,建立容器名。
  4. Bind posts,埠對映,這裡將預設的 8080 埠對映到外網的 8888 埠。
  5. 最後 IDEA 會將引數拼接成 docker build & run 的命令。

點選 Run。映象就會被自動 build,並且在容器中運行了。

選擇我們剛剛部署的那個容器的 Log tab,就能看到 Spring Boot 啟動的日誌了,是不是有一種似曾相識的感覺