1. 程式人生 > >Docker 二:IDEA + Docker 外掛建立映象並執行 spring boot 專案

Docker 二:IDEA + Docker 外掛建立映象並執行 spring boot 專案

IDEA 上提供了 Docker integration 外掛,可以很方便的管理映象和容器,當然這些操作通過命令列也能完成,使用 IDEA 外掛方式的另一個便利在於 IDEA 提供了 Docker 配套的 Configuration,可以一次性定義好操作序列,修改程式碼或資源後只需 Run/Debug Configuration 即可。

接下來直接通過示例專案介紹這些操作。

專案結構

  1. 閘道器專案:gateway
  2. pigeon RPC 服務專案:service-1
  3. pigeon RPC 服務專案:service-2

三個專案都為 spring boot 專案,pigeon 使用 zookeeper 做為註冊中心,因此需要部署 zookeeper,此外還有 redis。

建立並執行 zookeeper 和 redis 的映象

不確定 Docker Hub 倉庫中是否存在映象時可使用 docker search redis 進行檢索。

docker pull zookeeper 
docker run -p 127.0.0.1:2181:2181 --name zookeeper -d zookeeper:latest

docker pull redis
docker run -p 127.0.0.1:6379:6379 --name redis -d redis:latest

Dockfile 檔案編寫

gateway 專案藉助 maven 打成 war 包,兩個 RPC 服務最終打成 jar 包。

pigeon 服務的 Dockerfile 檔案

FROM frolvlad/alpine-oraclejdk8:slim
COPY target/service-1-1.0.0.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  • FROM 指定當前映象基於哪一個映象源
  • COPY 指定在 build 時將 Dockerfile 所在目錄下的 target/service-1-1.0.0.jar 拷貝到映象跟目錄(型別 linux 檔案目錄)下,並重命名為 app.jar
  • ENTRYPOINT 指定映象容器啟動後執行命令 java -jar /app.jar

gateway 專案的 Dockfile 檔案

FROM frolvlad/alpine-oraclejdk8:slim
COPY target/gateway-1-1.0.0.war appwjar
ENTRYPOINT ["java","-jar","/app.war"]

之後建立映象時需要根據這三份檔案進行建立。這裡需要注意 gateway 專案的 pom 檔案需要新增 `` 外掛,否則 docker 中 java -jar /app.war 執行 war 包時會出錯(提示沒有“主清單屬性”)。

docker build 建立映象

執行 docker build 命令需要進入 Dockfile 所在目錄,直接執行 docker build -t service-1:0.0.1 .,也可以指定 Dockerfile 絕對路徑(資料夾層級即可)的方式進行構建:
docker build -t rh-service:0.0.1 G:/workspaces/work/service-1
image.png
命令執行成功後 IDEA 的 Docker 面板就會看到建立成功的映象了。

docker run 建立並執行容器

docker run -p 127.0.0.1:8081:8081 --name service-1 -d service-1:0.0.1 java -jar /app.jar
docker run -p 127.0.0.1:9091:9091 --name service -2-d service-2:0.0.1 java -jar /app.jar

這兩個為 pigeon 服務,閘道器專案藉助 zookeeper 與其進行 RPC 通訊,所以這裡埠也可以隨機對映到主機的高位埠:

docker run -P --name service-1 -d service-1:0.0.1 java -jar /app.jar
docker run -P --name service-2 -d service-2:0.0.1 java -jar /app.jar

閘道器專案需要外部進行訪問,所以需要對映到主機的指定埠上:

docker run -p 127.0.0.1:8082:8082 --name gateway -d gateway:0.0.1 java -jar /app.war

藉助 IDEA Configuration 一鍵執行專案

在 IDEA 中使用 Edit Configurations 建立 Docker 配置 。
image.png

選擇 Dockerfile
image.png

進行如下配置
image.png
Dockerfile: 處選擇自己的 Dockerfile 所在位置,Context folder 將會自動填充;image tag 一般由兩部分構成:REPOSITORY:TAG(參考 docker ps命令顯示的列表標題);勾選 Run build image,這樣 Run/Debug 時在執行了 docker build 命令後,會繼續執行 docker run 命令; Executable->Command 指定容器啟動後執行命令;Bind ports 配置埠對映,Run options 可新增 -d 使容器在後臺執行。

  • 注意在 Before lanuch 中配置 mvn install ,使用 maven 構建 jar(war) 包,這樣 docker build 執行時使用的才會是最新的 target/service-1-1.0.0.jar 檔案
  • Command previce 中可以看到當前配置將依次執行命令 docker builddocker run
  • 當點選 IDEA 的 Run/Debug