docker部署springboot項目分為以下2步
- springboot項目的JAR包生成鏡像檔案。
- 将鏡像檔案生成容器,并完成部署。
一、springboot項目的JAR包生成鏡像檔案
-
編寫Dockerfile檔案。
執行以下指令:
Dockerfile 中 輸入以下代碼,然後點選Esc鍵退出編輯後 輸入wq儲存檔案:mkdir docker #建立docker檔案夾 cd docker vim Dockerfile #采用Dockerfile來建立images
# Docker image for springboot file run # VERSION 0.0.1 # Author: goodboby # 基礎鏡像使用java FROM java:8 # 作者 MAINTAINER goodboby <[email protected]> # VOLUME 指定了臨時檔案目錄為/tmp。 # 其效果是在主機 /var/lib/docker 目錄下建立了一個臨時檔案,并連結到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名為app.jar ADD demo-0.0.1-SNAPSHOT.jar app.jar # 運作jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
VOLUME 指定了臨時檔案目錄為/tmp。其效果是在主機 /var/lib/docker 目錄下建立了一個臨時檔案,并連結到容器的/tmp。改步驟是可選的,如果涉及到檔案系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 資料檔案夾,因為 Spring Boot 使用的内嵌 Tomcat 容器預設使用/tmp作為工作目錄 項目的 jar 檔案作為 “app.jar” 添加到容器的
Dockerfile檔案結構解釋如下:一般的,Dockerfile 分為四部分:基礎鏡像資訊、維護者資訊、鏡像操作指令和容器啟動時執行。(詳見Dockerfile檔案體系結構,以下隻例舉了部分說明)
FROM:指定基礎鏡像,要在哪個鏡像建立。
MAINTAINER:指定維護者資訊。
WORKDIR:指定目前工作目錄。
EXPOSE:指定容器要打開的端口。
ENV:定義環境變量。
COPY :複制本地主機的 (為 Dockerfile 所在目錄的相對路徑)到容器中的。
ADD:相當于 COPY,但是比 COPY 功能更強大,格式為
ADD <src> <dest>,
該指令将複制指定的 到容器中的 。 其中 可以是Dockerfile所在目錄的一個相對路徑;也可以是一個 URL;還可以是一個 tar 檔案,複制進容器會自動解壓。
VOLUME:挂載目錄,建立一個可以從本地主機或其他容器挂載的挂載點,一般用來存放資料庫和需要保持的資料等。
ENTRYPOINT:配置容器啟動後執行的指令,并且不可被 docker run 提供的參數覆寫。每個 Dockerfile 中隻能有一個 ENTRYPOINT ,當指定多個時,隻有最後一個起效。
CMD:指定啟動容器時執行的指令,每個 Dockerfile 隻能有一條 CMD 指令。如果指定了多條指令,隻有最後一條會被執行。如果使用者啟動容器時候指定了運作的指令,則會覆寫掉 CMD 指定的指令。
ENTRYPOINT 和 CMD 的差別:ENTRYPOINT 指定了該鏡像啟動時的入口,CMD 則指定了容器啟動時的指令,當兩者共用時,完整的啟動指令像是 ENTRYPOINT + CMD 這樣。使用 ENTRYPOINT 的好處是在我們啟動鏡像就像是啟動了一個可執行程式,在 CMD 上僅需要指定參數;另外在我們需要自定義 CMD 時不容易出錯。
- 将springboot的jar包上傳到docker目錄(Dockerfile檔案和jar包必需放在同一個目錄),如下圖所示:
docker應用安裝之部署Springboot項目 - 生成鏡像。
# docker-demo 為鏡像名稱,注意最後一個“.” docker build -t docker-demo .
- 如下圖所示,鏡像生成成功。
docker應用安裝之部署Springboot項目