將java的項目jar包打成鏡像

一、鏡像、容器相關知識的概述

  • Docker 鏡像

docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程式、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變數、用戶等);鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

  分層存儲:因為鏡像包含作業系統完整的 root 文件系統,其體積往往是龐大的,因此在 Docker 設計時,就充分利用 的技術,將其設計為分層存儲的架構。

  所以嚴格來說,鏡像並非是像一個 ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現並非由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。

  鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。比如,刪除前一層文件的操作,實際不是真的刪除前一層的文件,而是僅在當前層標記為該文件已刪除。

  在最終容器運行的時候,雖然不會看到這個文件,但是    實際上該文件會一直跟隨鏡像。因此,在構建鏡像的時候,需要額外小心,每一層盡量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。

  分層存儲的特徵還使得鏡像的復用、訂製變的更為容易。甚至可以用之前構建好的鏡像作為基礎層,然後進一步添加新的層,以訂製自己所需的內容,構建新的鏡像。

  • Docker 容器

Docker 容器是一個開源的應用容器引擎,讓開發者可以以統一的方式打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何安裝了docker引擎的伺服器上(包括流行的Linux機器、windows機器),
也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架包括系統。
  • DockerFile

  1.什麼是dockerfile

Dockerfile是一個包含用於組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。

docker build命令用於從Dockerfile構建映像。可以在docker build命令中使用-f標誌指向文件系統中任何位置的Dockerfile。

例:docker build -f /path/to/a/Dockerfile

  2.dockerfile基本結構

Dockerfile 一般分為四部分:基礎鏡像資訊、維護者資訊、鏡像操作指令和容器啟動時執行指令,』#』 為 Dockerfile 中的注釋。

  3.docker文件說明

Docker以從上到下的順序運行Dockerfile的指令。為了指定基本映像,第一條指令必須是FROM。一個聲明以#字元開頭則被視為注釋。
可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

dockerfile 指令圖解:

二、上傳jar包並創建DockerFile

1.利用xftp連接自己的伺服器將打包好的項目上傳到指定伺服器目錄上

[root@songweipeng java]# ll
total 141716
-rw-r--r-- 1 root root       206 Sep 22 11:40 Dockerfile
-rw-r--r-- 1 root root 145106991 Sep 22 11:14 gcdp-market-bid-process-service-1.0.0-SNAPSHOT.jar

2.編寫dockerFile:  vim DockerFile

# 基於哪個鏡像,需要用一個已有的鏡像做載體來創建,這裡我使用的java8鏡像,如果大家的docker鏡像中沒有java8,它就會自動去下載
FROM java:8
# 將本地文件夾掛載到當前容器,指定/songwp/project/java目錄並持久化到Docker數據文件夾,因為Spring Boot使用的內嵌Tomcat容器默認使用/tmp作為工作目錄
VOLUME /songwp/project/java
# 添加自己的項目到 gcdp-market-bid-process-service-1.0.0-SNAPSHOT.jar中這裡我是取了gcdp-market-bid-process-service.jar的名字,這個名字可以隨便取的,只要後面幾行名字和這個統一就好了
ADD gcdp-market-bid-process-service-1.0.0-SNAPSHOT.jar  gcdp-market-bid-process-service.jar
# 開放9601埠
EXPOSE 9601
# ENTRYPOINT指定容器運行後默認執行的命令
CMD java -jar gcdp-market-bid-process-service.jar

3.構建鏡像

docker build -f ./Dockerfile  -t gcdp-market-bid-process-service:latest .

4.運行並查看日誌

# 運行鏡像
docker run -d -p 9601:9601 gcdp-market-bid-process-service:latest
# 查看運行容器的id和狀態 docker ps -a # 查看容器日誌 docker logs 2044230149c1