国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Docker編譯多平臺文件、構建多平臺鏡像并運行

這篇具有很好參考價值的文章主要介紹了Docker編譯多平臺文件、構建多平臺鏡像并運行。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

參考官方文檔:

  • Multi-stage
  • Multi-platform
  • Multi-platform images

方法

??如果在 x86_64/amd64 的平臺上,想構建適用于多個平臺的鏡像,例如 linux/amd64linux/arm64,根據官方文檔,有三種方法可以使用:

  1. QEMU
    ??使用 QEMU 模擬構建多平臺映像是最簡單的入門方法,但可能比本機構建慢得多,特別是對于編譯、壓縮或解壓縮等計算量大的任務。因此如果條件允許的話,更推薦使用 Cross-compilation交叉編譯)。但因為使用起來最簡單,所以我在x86_64平臺上構建arm64鏡像并運行容器時用的是這個方法。
  2. Multiple native nodes
    ??使用多個本機節(jié)點可以為 QEMU 無法處理的更復雜的情況提供更好的支持,并且通常具有更好的性能。
  3. Cross-compilation
    ??交叉編譯使多平臺構建速度更快、用途更廣泛,但必須要有相對應的編譯器。

Buildx 設置

??在構建鏡像時,是通過設置 --platform 參數來指定目標平臺的。例如, linux/amd64 、 linux/arm64darwin/amd64 。

??默認的構建驅動程序不支持并發(fā)多平臺構建,一次只能針對一個平臺進行構建(例如 docker build --platform=linux/amd64 )。
??如果想同時針對多個平臺進行構建(例如 --platform=linux/amd64,linux/arm64 ),則需要創(chuàng)建構建器builder)。
??要使用不同的驅動程序,需要使用 Docker Buildx。 Buildx 是下一代構建客戶端,它提供與 docker build 命令類似的用戶體驗,同時支持其他功能。

??例如創(chuàng)建一個使用docker-container作為驅動程序,名為container的新構建器:

docker buildx create --driver=docker-container --name=container

可以使用 docker buildx ls 命令列出可用的構建器。*標明了當前正在使用的構建器(在下面的示例中為default):

? docker buildx ls                                                                                                                                                                                                                                                                                                
NAME/NODE    DRIVER/ENDPOINT             STATUS   BUILDKIT             PLATFORMS
container    docker-container                                          
  container0 unix:///var/run/docker.sock inactive                      
default *    docker                                                    
  default    default                     running  v0.11.7+d3e6c1360f6e linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386

從上面的輸出中可以看到,container后的BUILDKITPLATFORMS為空,那么在第一次使用container構建鏡像時,就會先下載相關文件,然后才會開始構建。

??也可以提前安裝并在創(chuàng)建完成后馬上啟用構建器。需要用到tonistiigi/binfmt,之后還會自動下載moby/buildkit鏡像。

如果電腦重啟后在/proc/sys/fs/binfmt_misc中找不到qemu相關內容,那么還需要重新執(zhí)行這條命令:

docker run --privileged --rm tonistiigi/binfmt --install all
docker buildx create --name mybuilder --bootstrap --use

結果如下:

? docker buildx ls                                                                                                                                                                                                                                                                                                
NAME/NODE    DRIVER/ENDPOINT             STATUS   BUILDKIT             PLATFORMS
container    docker-container                                          
  container0 unix:///var/run/docker.sock inactive                      
mybuilder *  docker-container                                          
  mybuilder0 unix:///var/run/docker.sock running  v0.12.3              linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
default      docker                                                    
  default    default                     running  v0.11.7+d3e6c1360f6e linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

使用QEMU仿真

Docker編譯多平臺文件、構建多平臺鏡像并運行,Docker,docker,容器

上圖為仿真構建過程。
?

??仿真構建時,需要指定構建器參數 --builder,以及平臺參數 --platform。

編譯文件

??例如下面這條命令用于編譯多平臺二進制文件:

docker buildx build \
    --target=binaries \
    --output=bin \
    --builder=container \
    --platform=linux/amd64,linux/arm64,linux/arm/v7 .

示例Dockerfile詳細內容見Github,需要下載整個倉庫然后在倉庫根目錄執(zhí)行該命令。

構建鏡像

以下示例使用單個 Dockerfile 為多個平臺構建了安裝有 curl 的 Alpine 映像。

Dockerfile:

# syntax=docker/dockerfile:1
FROM alpine:3.16
RUN apk add curl

構建命令:

docker buildx build \
    --builder=mybuilder \
    --platform=linux/amd64,linux/arm64,linux/arm/v7 \
    --tag=<username>/<image>:latest \
    --push .

??其中 --push 表示構建完畢后推送到倉庫。
??必須添加 --push--load 參數,否則會得到警告WARNING: No output specified with 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。意思是構建結果只保存在緩存中,使用 --push 可以將鏡像推送到遠程倉庫,使用 --load 可以將鏡像保存在本地。
??需要注意的是,如果參數添加的是 --load 而不是 --push,并且--platform后面跟了多個平臺,例如--platform=linux/amd64,linux/arm64,linux/arm/v7,那么還是會得到報錯ERROR: docker exporter does not currently support exporting manifest lists,這是因為本地無法保存多個同名的鏡像。所以如果要保存構建出的多個平臺的鏡像到本地,就得分多次執(zhí)行命令,每次只在 --platform 后添加一個平臺,并且每次的 --tag 后面的鏡像名稱都不同。
??例如為三個平臺構建了鏡像,就得分三次執(zhí)行命令:

docker buildx build \
    --builder=mybuilder \
    --platform=linux/amd64 \
    --tag=<username>/<image>_amd64:latest \
    --load .
docker buildx build \
    --builder=mybuilder \
    --platform=linux/arm64 \
    --tag=<username>/<image>_arm64:latest \
    --load .
docker buildx build \
    --builder=mybuilder \
    --platform=linux/arm/v7 \
    --tag=<username>/<image>_arm_v7:latest \
    --load .

??可以使用 docker buildx imagetools 命令檢查鏡像,前提是鏡像已推送到遠程倉庫。例如:

? docker buildx imagetools inspect <username>/<image>:latest
Name:      docker.io/<username>/<image>:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:f3b552e65508d9203b46db507bb121f1b644e53a22f851185d8e53d873417c48

Manifests:
  Name:      docker.io/<username>/<image>:latest@sha256:71d7ecf3cd12d9a99e73ef448bf63ae12751fe3a436a007cb0969f0dc4184c8c
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/amd64

  Name:      docker.io/<username>/<image>:latest@sha256:5ba4ceea65579fdd1181dfa103cc437d8e19d87239683cf5040e633211387ccf
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm64

  Name:      docker.io/<username>/<image>:latest@sha256:29666fb23261b1f77ca284b69f9212d69fe5b517392dbdd4870391b7defcc116
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm/v7

??如果是使用 --load 保存到了本地,使用 docker image inspect 命令查看鏡像。例如:

docker image inspect <username>/<image>_arm_v7

使用交叉編譯(cross-compilation)

Docker編譯多平臺文件、構建多平臺鏡像并運行,Docker,docker,容器
https://docs.docker.com/build/guide/images/cross-compilation.png

上圖為交叉編譯構建過程。
?

編譯文件

由于Go語言的編譯器支持在編譯時通過使用 GOOSGOARCH 環(huán)境變量來進行交叉編譯,因此可以通過Docker自動將 --platform 的參數解析為構建參數TARGETPLATFORM、TARGETOS、TARGETARCH,并在Dockerfile中賦值給環(huán)境變量,來實現交叉編譯。

示例Dockerfile詳細內容見Github或官網文檔,需要下載整個倉庫然后在倉庫根目錄執(zhí)行該命令。

構建鏡像

Dockerfile示例:

# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM golang:alpine AS build
ARG TARGETPLATFORM
ARG BUILDPLATFORM
RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM" > /log
FROM alpine
COPY --from=build /log /log

在x86_64上運行arm64容器

??先執(zhí)行這條命令,確保/proc/sys/fs/binfmt_misc有qemu相關內容:

docker run --privileged --rm tonistiigi/binfmt --install all

??接下來以運行arm64版本的ubuntu 18.04為例:

  1. 下載鏡像
docker pull --platform=linux/arm64 ubuntu:18.04 
  1. 運行
docker run --rm -it ubuntu:18.04

忽略警告WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested

  1. 查看版本等相關信息
uname -a

??hello-world鏡像同理:文章來源地址http://www.zghlxwxcb.cn/news/detail-806713.html

docker run --rm --platform=linux/arm64 hello-world
? docker run --rm --platform=linux/arm64 hello-world                         

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

到了這里,關于Docker編譯多平臺文件、構建多平臺鏡像并運行的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • x86 平臺利用 qemu-user-static 實現 arm64 平臺 docker 鏡像的運行和構建

    x86 平臺利用 qemu-user-static 實現 arm64 平臺 docker 鏡像的運行和構建

    因為國產化的普及,尤其一些證券和銀行行業(yè),已經開始走信創(chuàng)的路線,后期也許會接觸到國產 CPU ( arm 平臺,比如華為的鯤鵬處理器) 自己買 arm 平臺的 CPU ,這個成本著實吃不消,于是嘗試 x86 平臺運行 arm 平臺的容器來降本增效 docker 運行其他平臺容器,需要使用 --pla

    2024年02月02日
    瀏覽(45)
  • Docker學習路線7:構建容器鏡像

    容器鏡像是可執(zhí)行的軟件包,包括運行應用程序所需的所有內容:代碼、運行時、系統(tǒng)工具、庫和設置。通過構建自定義鏡像,您可以在任何支持Docker的平臺上無縫地部署應用程序及其所有依賴項。 構建容器鏡像的關鍵組件是 Dockerfile 。它本質上是一個包含有關如何組裝 D

    2024年02月16日
    瀏覽(30)
  • 手動構建自己的docker容器鏡像實戰(zhàn)

    之前的實戰(zhàn)中,我們實戰(zhàn)中,我們使用的鏡像都是鏡像倉庫已有的鏡像。 已有的鏡像都是別人已經開發(fā)好上傳的。今天我們一起來看看如何構建自己的鏡像并上傳到鏡像倉庫中。 ??個人主頁:我是沐風曉月 ??個人簡介:大家好,我是沐風曉月,阿里云社區(qū)博客專家????

    2023年04月10日
    瀏覽(27)
  • Docker入門流程(創(chuàng)建容器到構建鏡像)

    Docker入門流程(創(chuàng)建容器到構建鏡像)

    平時我們經常會遇到在自己電腦上運行的代碼,在別人的電腦上運行就出現莫名其妙的問題,這種大多是因為代碼”水土不服“,不同電腦的軟件版本和依賴庫不同,Docker的使用可以很好地解決這個問題。簡單來說,Docker可以把 代碼和代碼運行的環(huán)境 一把打包,構建一個容

    2024年02月08日
    瀏覽(22)
  • Docker進階:容器數據卷與Dockerfile構建鏡像(發(fā)布)

    Docker進階:容器數據卷與Dockerfile構建鏡像(發(fā)布)

    ??The Begin??點點關注,收藏不迷路?? 1、完成數據持久化和共享數據,docker容器中的數據,同步到本地。 2、重要數據back_up 特點: 實時生效、數據卷可在容器之間共享和重用數據、數據卷中的更改不會包含在鏡像更新中、數據卷的生命周期會一直延續(xù)到沒有容器使用它為止

    2024年02月09日
    瀏覽(27)
  • Docker基礎入門:容器數據卷與Dockerfile構建鏡像(發(fā)布)

    Docker基礎入門:容器數據卷與Dockerfile構建鏡像(發(fā)布)

    ??The Begin??點點關注,收藏不迷路?? 1、完成數據持久化和共享數據,docker容器中的數據,同步到本地。 2、重要數據back_up 特點: 實時生效、數據卷可在容器之間共享和重用數據、數據卷中的更改不會包含在鏡像更新中、數據卷的生命周期會一直延續(xù)到沒有容器使用它為止

    2024年02月10日
    瀏覽(21)
  • Docker 倉庫與注冊表: 構建可靠的容器鏡像生態(tài)系統(tǒng)

    Docker 倉庫與注冊表: 構建可靠的容器鏡像生態(tài)系統(tǒng)

    ???? 博主 libin9iOak帶您 Go to New World.??? ?? 個人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學會IDEA常用操作,工作效率翻倍~?? ???? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬

    2024年02月17日
    瀏覽(34)
  • 逸學Docker【java工程師基礎】2.Docker鏡像容器基本操作+安裝MySQL鏡像運行

    逸學Docker【java工程師基礎】2.Docker鏡像容器基本操作+安裝MySQL鏡像運行

    在這里我們的應用程序比如redis需要構建成鏡像, 它作為一個Docker文件就可以進行 構建 ,構建完以后他是在 本地的 ,我們可以 推送 到鏡像服務器,逆向可以 拉取 到上傳的鏡像,或者說我們可以保存為 壓縮包 進行 相互傳遞 。 在本地的鏡像可以傳來傳去,本身也可以查看

    2024年02月01日
    瀏覽(50)
  • 【無標題】如何使用Docker構建多平臺鏡像?

    如何構建多平臺鏡像? 工作原理 準備構建環(huán)境 開啟Linux內核對多處理器架構的支持 創(chuàng)建使用\\\"docker-container\\\"驅動的Buildx實例 調整Dockerfile 調整構建命令 在不同鏡像倉庫之間傳輸鏡像 如何構建多平臺鏡像? 如果你還不了解什么是多平臺構建,請先閱讀一下Docker構建多平臺鏡像

    2024年02月11日
    瀏覽(29)
  • libreOffice構建docker鏡像,并基于此運行項目

    一、libreOffice構建docker鏡像,并啟動項目 安裝包準備 LibreOffice(v7.4.2): LibreOffice_7.4.2_Linux_x86-64_rpm.tar.gz LibreOffice-langpack:(v7.4.2): LibreOffice_7.4.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz jdk-8u202-linux-x64.tar.gz 打包windows字體包(C:WindowsFonts,搜索中文):fonts.tar.gz Dockerfile編寫 構建鏡像 啟動項

    2024年02月16日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包