Docker03-知識點整理
文章目錄
- Docker03-知識點整理
- 1-參考網址
- 2-知識整理
- 2-思考題
- 1-Docker image和Docker Native image有什么區別
- 1. Docker Image(Docker 鏡像)
- 定義
- 特點
- 構建和使用示例
- 2. Docker Native Image(通常指 GraalVM Native Image 結合 Docker)
- 定義
- 特點
- 構建和使用示例
- 3. 兩者的主要區別

1-參考網址
2-知識整理
- 1)-Docker image和Docker Native image區別->Native不依賴JVM等運行環境,是單獨的可執行文件,啟動更快!
- 2)
2-思考題
1-Docker image和Docker Native image有什么區別
問題背景:我在kafka官網進行軟件下載的時候,Docker版本有2個可以下載的鏡像,地址:https://kafka.apache.org/downloads
1. Docker Image(Docker 鏡像)
定義
Docker 鏡像是一個只讀的模板,它包含了運行容器所需的一切,如代碼、運行時環境、系統工具、系統庫等。可以將其看作是一個軟件包,這個軟件包可以被部署到 Docker 環境中運行。
特點
- 分層結構:Docker 鏡像采用分層存儲的方式構建,每一層都是一個文件系統的變更。這些層可以被多個鏡像共享,從而節省磁盤空間。例如,多個不同的鏡像可能都基于同一個基礎操作系統層。
- 通用性:Docker 鏡像可以在任何支持 Docker 的環境中運行,具有良好的可移植性。只要目標環境安裝了 Docker 引擎,就可以拉取并運行鏡像。
- 構建靈活性:可以通過編寫 Dockerfile 來定義鏡像的構建過程。Dockerfile 中包含了一系列的指令,如從基礎鏡像開始、安裝軟件包、復制文件等,通過執行這些指令可以構建出所需的鏡像。
構建和使用示例
# 使用官方的 Python 3.9 鏡像作為基礎
FROM python:3.9# 設置工作目錄
WORKDIR /app# 復制當前目錄下的所有文件到工作目錄
COPY . .# 安裝依賴
RUN pip install -r requirements.txt# 暴露端口
EXPOSE 8000# 定義容器啟動時執行的命令
CMD ["python", "app.py"]
使用 docker build
命令構建鏡像:
docker build -t my-python-app .
使用 docker run
命令運行容器:
docker run -p 8000:8000 my-python-app
2. Docker Native Image(通常指 GraalVM Native Image 結合 Docker)
定義
GraalVM Native Image 是 GraalVM 提供的一項技術,它可以將 Java 代碼編譯成獨立的可執行文件,這個可執行文件不依賴于 Java 虛擬機(JVM)。當將這種 Native Image 打包成 Docker 鏡像時,就形成了 Docker Native Image。
特點
- 啟動速度快:由于 Native Image 不依賴于 JVM 的啟動過程,因此啟動速度比傳統的基于 JVM 的應用程序要快得多。對于需要快速啟動和響應的應用場景,如函數計算、微服務等,這是一個非常重要的優勢。
- 內存占用小:Native Image 不需要加載 JVM 所需的大量資源,因此內存占用相對較小。這可以提高資源利用率,降低運營成本。
- 構建復雜性:構建 Native Image 需要額外的工具和配置,相對傳統的 Docker 鏡像構建要復雜一些。需要使用 GraalVM 的工具鏈進行編譯,并且可能需要處理一些特定的依賴和配置問題。
構建和使用示例
首先,確保你已經安裝了 GraalVM 并配置好了環境變量。然后,在項目中添加 GraalVM Native Image 插件(以 Maven 項目為例):
<plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId><version>0.9.22</version><executions><execution><id>build-native</id><goals><goal>compile-no-fork</goal></goals></execution></executions>
</plugin>
使用以下命令編譯 Native Image:
mvn package -Pnative
編寫 Dockerfile 來構建 Docker Native Image:
# 使用一個輕量級的基礎鏡像
FROM debian:buster-slim# 復制編譯好的 Native Image 到容器中
COPY target/my-native-app /app/my-native-app# 設置工作目錄
WORKDIR /app# 定義容器啟動時執行的命令
CMD ["./my-native-app"]
使用 docker build
命令構建鏡像:
docker build -t my-native-app .
使用 docker run
命令運行容器:
docker run my-native-app
3. 兩者的主要區別
- 運行時依賴:Docker 鏡像可以基于各種運行時環境,如 JVM、Python 解釋器等;而 Docker Native Image 通常是不依賴于虛擬機或解釋器的獨立可執行文件。
- 啟動性能:Docker Native Image 的啟動速度通常比傳統的 Docker 鏡像要快,因為它不需要啟動虛擬機或解釋器。
- 內存占用:Docker Native Image 的內存占用相對較小,因為它不需要加載虛擬機或解釋器所需的大量資源。
- 構建復雜度:Docker 鏡像的構建相對簡單,只需要編寫 Dockerfile 并執行
docker build
命令;而 Docker Native Image 的構建需要額外的工具和配置,相對復雜一些。