文章目錄
- Dockerfile自定義鏡像
- 鏡像結構
- Dockerfile語法
- 構建java項目
- 小結
Dockerfile自定義鏡像
常見的鏡像在DockerHub就能找到,但是我們自己寫的項目就必須自己構建鏡像了。
而要自定義鏡像,就必須先了解鏡像的結構才行。
鏡像結構
鏡像是將應用程序及其需要的系統函數庫、環境、配置、依賴打包而成。
我們以MySQL為例,來看看鏡像的組成結構:
- 簡單來說,鏡像就是在系統函數庫、運行環境基礎上,添加應用程序文件、配置文件、依賴文件等組合,然后編寫好啟動腳本打包在一起形成的文件。
- 我們要構建鏡像,其實就是實現上述打包的過程。
Dockerfile語法
- 構建自定義的鏡像時,并不需要一個個文件去拷貝,打包。
- 我們只需要告訴Docker,我們的鏡像的組成,需要哪些BaseImage、需要拷貝什么文件、需要安裝什么依賴、啟動腳本是什么,將來Docker會幫助我們構建鏡像。
- 而描述上述信息的文件就是Dockerfile文件。
- Dockerfile就是一個文本文件,其中包含一個個的指令(Instruction),用指令來說明要執行什么操作來構建鏡像。每一個指令都會形成一層Layer。
更新詳細語法說明,請參考官網文檔: https://docs.docker.com/engine/reference/builder
構建java項目
# 使用基礎鏡像(Java 11)
FROM adoptopenjdk:11-jdk-hotspot# 設置工作目錄
WORKDIR /app# 復制構建好的 JAR 文件到鏡像中
COPY target/my-spring-cloud-app.jar /app/app.jar# 暴露端口
EXPOSE 8080# 容器啟動命令
CMD ["java", "-jar", "app.jar"]
在這個示例中,假設你已經通過 Maven 或 Gradle 構建了一個名為 my-spring-cloud-app.jar
的可執行 Spring Boot JAR 文件。
要使用這個 Dockerfile 構建 Docker 鏡像并運行容器,請按照以下步驟操作:
-
在 Spring Cloud 項目的根目錄下創建一個名為
Dockerfile
的文本文件。 -
將上述示例 Dockerfile 內容復制到
Dockerfile
中。 -
打開終端,進入到包含
Dockerfile
的目錄。 -
運行以下命令以構建鏡像:
docker build -t my-spring-cloud-app .
-t my-spring-cloud-app
參數設置了鏡像的名稱。你可以根據項目需求自定義名稱。 -
構建完成后,使用以下命令來運行容器:
docker run -p 8080:8080 my-spring-cloud-app
-p 8080:8080
參數將主機上的端口 8080 映射到容器內部的端口 8080。
這樣就可以在本地主機上通過 http://localhost:8080
訪問你的 Spring Cloud 應用了。
請注意,以上示例假設你的 Spring Cloud 項目已經構建為可執行 JAR 文件,并且位于 target/my-spring-cloud-app.jar
。根據實際情況,你可能需要調整 Dockerfile 中的路徑和文件名。
此外,如果你的項目需要其他依賴項或配置文件,請相應地進行修改,并使用 COPY
指令將它們復制到鏡像中的正確位置。
小結
- Dockerfile的本質是一個文件,通過指令描述鏡像的構建過程
- Dockerfile的第一行必須是FROM,從一個基礎鏡像來構建
- 基礎鏡像可以是基本操作系統,如Ubuntu。也可以是其他人制作好的鏡像,例如:java:8-alpine