多多益善|基於Artifactory和Buildx構建多架構Docker映象
一、背景
在業界當前的雲原生實踐中,“構建一次,隨處部署”的機制已經得到了普遍應用。藉助容器化和Docker,我們可以為任何環境構建應用和服務,並在執行時再設定配置。
不過,這種適應性還是有一些限制。作業系統和應用程式仍然需要編譯才能在特定的架構型別上執行。例如,為AMD64處理器編譯的軟體不能在基於ARM的機器上執行,為 Linux構建的軟體也不能在Windows上執行。
Docker透過支援多架構(multi-arch)映象滿足了容器應用的多CPU架構的需求。您可以為需要支援的每個架構構建單獨的映象,然後作為一個集合將所有映象繫結在Docker清單的列表中。然後,您可以透過其名稱和標籤部署生成的多架構映象——Docker客戶端將自動選擇與目標架構匹配的映象。
基於Artifactory的Docker倉庫可以很方便地構建多架構映象,而且可以像管理其他任何Docker映象一樣來管理這些多架構映象。本文我們將向您展示如何在開發/交付流程流程中來建立和管理多架構Docker映象。
二、構建多架構映象
多架構映象
在本文的例子中,我們需要建立一個應用程式,必須能夠在Linux 作業系統下如下的兩種處理器架構上執行:
- x86-64環境,例如 Linux 桌面;
- AWS EC2上基於ARM的A1 例項。
為了能夠在任何一個上執行,我們需要一個支援amd64和arm64架構的多架構映象。
-
基於Buildx建立多架構映象
首先,我們的DockerFile必須配置為根據所需的架構來建立示例映象,如下所示:
ARG ARCH=
FROM ${ARCH}debian:buster-slim
RUN apt-get update \
&& apt-get install - y curl \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ “curl” ]
如果我們使用這個DockerFile執行docker build命令,並使用--build-arg選項來設定ARCH引數,我們可以為每個所需的架構構建一個獨立的映象。然後我們需要構建一個單獨的清單列表(使用docker manifest命令)將它們繫結到一個多架構映象中。
除此之外,還有一種更簡單、更推薦的方法。使用Docker CLI的Buildx外掛(參見 https:// docs.docker.com/buildx/ working-with-buildx/ ),您可以直接建立一個多架構映象,並利用同一條Docker CLI命令列將構建好的多架構映象推送到Artifactory中的Docker倉庫裡。如下所示:
$ docker buildx build \
--push \
--platform linux/amd64,linux/arm64 \
--output=type=image,push=true,registry.insecure=true \
--tag myartifactory/docker-local /multiarch-image:tag .
如果您使用的是Mac或Windows上的Docker Desktop,那麼Buildx已經隨著裝好了。如果您使用的是Linux,則可以從GitHub安裝Buildx。
(參見 https:// github.com/docker/build x )
-
Artifactory裡的多架構映象
以下是上一節建立的multiarch-image多架構映象在Artifactory中的儲存方式,該映象儲存在名為docker-local的Docker倉庫中。
► Docker清單列表
Docker生成的清單列表(list.manifest.json)是多架構映象“映象清單的清單”,也稱為“富清單”,它標識了集合中的 Docker 映象以及每個映象要執行的架構(作業系統和處理器組合)。
當multiarch-image應用執行時,Docker CLI將首先拉取清單列表,然後使用它來選擇拉取和部署哪個映象,以匹配目標地的作業系統和架構。
► 架構映象
每個被支援架構的映象都有自己的標籤,可以透過它來定址,這個標籤是Artifactory透過組合釋出標籤和架構名稱來建立的。由於我們的示例使用釋出標籤“tag”,因此架構映象的標籤是tag-linux-amd64和tag-linux-arm64。
每個映象也有自己的清單,用於標識組成它的層。
三、晉級多架構映象
一旦您的多架構映象位於Artifactory的Docker倉庫並透過了測試,您就可以將該映象晉級到下一個成熟度的Docker倉庫,就像其他任何型別的製品倉庫一樣。
如下的JFrog CLI命令將我們在docker-local倉庫中建立的多架構映像晉級到docker-target倉庫中:
$ jfrog rt docker-promote --copy \
multiarch-image docker-local docker-target
與任何通常的Docker映象一樣,您也可以將晉級限制為映象中的某個標籤。如果您選擇在晉級中重新命名標籤,它將為多架構映象中的每個架構重新命名。命令如下:
$ jfrog rt docker-promote --copy \
--source-tag “latest” --target-tag “latest-new” \
multiarch-image docker-local docker-target
四、總結
在整個軟體開發生命週期(SDLC)中交付多架構映象可能意味著更復雜的測試和驗證,因為每個受支援的架構都可能需要在其目標平臺上單獨驗證。
但是透過 Artifactory 對多架構映象的支援,您工作流程的最佳實踐將得以保留。您仍然可以只構建一次,然後在開發、測試和生產階段晉級您的不可變、多架構映象。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2793052/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker Buildx使用教程:使用Buildx構建多平臺映象DockerUI
- 使用Docker buildx 為 .NET 構建多平臺映象DockerUI
- Docker 構建多平臺映象Docker
- Docker構建多平臺映象Docker
- 基於ubuntu映象構建redis映象UbuntuRedis
- docker構建映象Docker
- Docker映象構建(五)Docker
- docker構建supervisor映象Docker
- Docker 構建 kubectl 映象Docker
- websocketd | 基於 docker 構建WebDocker
- Docker映象構建原理解析(不裝docker也能構建映象)Docker
- 基於jib-maven-plugin快速構建微服務docker映象MavenPlugin微服務Docker
- 使用Spring Cloud Kubernetes基於Kubernetes、Spring Boot和Docker構建微服務架構 - MoriohCloudSpring BootDocker微服務架構
- 使用docker buildx打包釋出多平臺映象DockerUI
- docker 構建自己的映象Docker
- Docker 映象構建之 DockerfileDocker
- 使用 Docker 開發 - 使用多階段構建映象Docker
- 加速和簡化構建Docker(基於Google jib)DockerGo
- Docker容器 關於映象構建的安全問題Docker
- Docker 分階段構建映象Docker
- Docker 構建PHP 映象環境DockerPHP
- Docker 映象分階段構建Docker
- 不用安裝docker也能構建docker映象Docker
- 基於Docker和Kubernetes構建的部署管理和叢集管理Docker
- 輕鬆構建基於 Serverless 架構的小程式Server架構
- Kunbernetes-基於Nexus構建私有映象倉庫
- 基於WPSOffice+Pywpsrpc構建Docker映象,實現文件轉換和線上預覽服務RPCDocker
- docker映象構建libreoffice轉換檔案Docker
- 構建 Docker 映象的 N 個小技巧Docker
- Artifactory使用命令列構建整合命令列
- Docker映象的構建以及資料卷和埠對映Docker
- 微服務部署-基於DockerMaven外掛構建映象部署微服務DockerMaven
- 基於Redis構建微服務的反應式架構 - bitsrcRedis微服務架構
- apisix閘道器-構建docker映象構建及外掛化開發APIDocker
- 基於url-to-pdf-api構建docker映象,製作一個網頁另存服務APIDocker網頁
- 基於Docker環境構建redis單機容器DockerRedis
- 如何構建基於 docker 的開發環境Docker開發環境
- Docker從零構建php-nginx-alpine映象DockerPHPNginx