Docker Buildx 簡介
一、簡介
Docker 是一種流行的部署工具,使我們能夠打包和運行應用程序。由於採用率很高,因此需要根據不同的要求擴展功能。因此,為了實現這一點,第三方使用docker 插件。
例如,如果我們希望數據跨不同主機持久化數據,我們使用卷插件。另一個常用的插件是Docker buildx
.
它通過使用 BuildKit builder 擴展了圖像的構建能力。因此,使用該插件,我們可以為不同的平台和架構構建圖像。此外,它支持使用自定義上下文進行並行多階段製作。
在本教程中,我們將介紹 Docker buildx.
2.安裝buildx
首先,要運行buildx
,我們需要安裝 Docker。 Docker buildx
支持從Docker 引擎19.00 開始可用。
讓我們首先檢查我們的 Docker 版本:
$ docker --version
Docker version 19.03.8, build afacb8b
接下來,我們通過設置環境變量啟用 Docker 實驗性功能:
$ export DOCKER_CLI_EXPERIMENTAL=enabled
為了確保我們的設置在會話結束後仍然存在,我們將變量添加到$HOME/.bashrc
中用於Bash 。有了它,我們現在應該可以訪問buildx:
$ docker buildx
Usage: docker buildx COMMAND
Build with BuildKit
Management Commands:
imagetools Commands to work on images in registry
Commands:
bake Build from a file
build Start a build
create Create a new builder instance
inspect Inspect current builder instance
ls List builder instances
rm Remove a builder instance
stop Stop builder instance
use Set the current builder instance
version Show buildx version information
Run 'docker buildx COMMAND --help' for more information on a command.
這顯示了常用命令和每個命令的語法。
3.使用buildx
構建
buildx
執行所有Docker build
功能。因此,我們可以輕鬆地運行並執行它們。例如,指定目標平台、構建緩存和輸出配置。除此之外, buildx
還提供了額外的功能。
首先是同時為多個平台構建圖像的能力。其次,在單個dockerfile
中為較小的圖像進行多階段構建。最後,在構建過程中自定義輸入、參數或變量的能力。
讓我們通過創建一個實例來深入研究一個例子:
$ docker buildx create --name ourbuilder
ourbuilder
這將創建一個名為ourbuilder
的構建實例。
接下來,我們將其設置為活動目錄:
$ docker buildx use ourbuilder
接下來,讓我們創建一個dockerfile
來運行一個簡單的節點應用程序:
# Base image
FROM node:14-alpine
# Set working directory
WORKDIR /app
# Copy application files
COPY . .
# Install dependencies
RUN npm install --production
# Expose the port
EXPOSE 3000
# Start the application
CMD ["node", "app.js"]
這裡我們使用node.js
基礎鏡像並將工作目錄設置為/app
。然後我們將應用程序文件複製到容器中。然後我們安裝所有依賴項,暴露端口 3000 並啟動應用程序:
$ docker buildx build --platform linux/amd64,linux/arm64 -t ourapp:latest .
time="2023-06-01T07:13:20+03:00" level=warning msg="No output specified for docker-container driver.
Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load"
#1 [internal] booting buildkit
#1 pulling image moby/buildkit:buildx-stable-1
#1 pulling image moby/buildkit:buildx-stable-1 73.2s done
#1 creating container buildx_buildkit_ourbuilder0
#1 creating container buildx_buildkit_ourbuilder0 2.1s done
#1 DONE 75.4s
#3 [internal] load .dockerignore
#3 transferring context: 0.0s
#3 transferring context: 2B 0.1s done
#3 DONE 0.3s
#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 294B 0.0s done
#2 DONE 0.4s
#4 [linux/amd64 internal] load metadata for docker.io/library/node:14-alpin...
#4 DONE 4.7s
.... truncated .....
我們使用–platform
標誌指定目標平台。在這種情況下,我們的目標是 x86 (Linux/amd64) 和 ARM (Linux/arm64) 架構。我們還提供了標籤-t ourapp:latest
以使用名稱ourapp
和 latest 標籤來標記構建的圖像。這 。指定構建上下文,即當前目錄。
Docker buildx
auto 處理多平台構建並為每個目標架構生成單獨的圖像。
4。結論
在本教程中,我們探索了 Docker buildx,
這是一種擴展 Docker 鏡像構建和管理能力的工具。它通過支持並行構建、自定義構建上下文和多階段構建來簡化流程。