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

x86 平臺利用 qemu-user-static 實現(xiàn) arm64 平臺 docker 鏡像的運行和構(gòu)建

這篇具有很好參考價值的文章主要介紹了x86 平臺利用 qemu-user-static 實現(xiàn) arm64 平臺 docker 鏡像的運行和構(gòu)建。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

因為國產(chǎn)化的普及,尤其一些證券和銀行行業(yè),已經(jīng)開始走信創(chuàng)的路線,后期也許會接觸到國產(chǎn) CPU (arm 平臺,比如華為的鯤鵬處理器)

自己買 arm 平臺的 CPU,這個成本著實吃不消,于是嘗試 x86 平臺運行 arm 平臺的容器來降本增效

關(guān)于 docker 版本

  • docker 運行其他平臺容器,需要使用 --platform 參數(shù)來指定平臺
  • docker 19.03.9 及以上的版本才支持 --platform 參數(shù)
  • 默認沒有開啟 --platform 參數(shù),需要手動開啟,直接執(zhí)行,會有下面的報錯
"--platform" is only supported on a Docker daemon with experimental features enabled

查看是否開啟 experimental 功能

--platform 參數(shù)需要 experimentaltrue,通過下面的命令可以驗證是否開啟

docker info | grep -i 'experimental'

開啟 experimental 功能

修改 daemon.json 文件,增加下面的參數(shù)

"experimental": true

下面的 daemon.json 文件僅供參考

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "experimental": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

修改完成后,重啟 docker 來驗證

systemctl restart docker
docker info | grep -i 'experimental'

查看當前環(huán)境平臺

uname -m

我的平臺返回下面的內(nèi)容

x86_64

拉取一個 arm 平臺的容器

docker pull --platform arm64 debian:11

查看鏡像使用的平臺

docker inspect debian:11 | grep -i 'architecture'

預(yù)期返回的結(jié)果如下

        "Architecture": "arm64",

如果不加 --platform 參數(shù),默認拉取自己當前 CPU 平臺的鏡像

如果本地有相同 tag 的鏡像,只是平臺不同的情況下,需要注意區(qū)分 tag ,不然直接 docker pull 就會覆蓋掉之前的鏡像,之前的鏡像 tag 會變?yōu)?<none>

運行一個 arm 平臺的容器

在沒有 qemu-user-static 的幫助下,單靠 --platform 參數(shù)是無法啟動非本機平臺的鏡像的

docker run --platform arm64 -t debian:11 uname -m

返回的報錯如下,是因為 CPU 平臺不同

standard_init_linux.go:211: exec user process caused "exec format error"

整一個 qemu-user-static

multiarch/qemu-user-static - github

注冊可支持的架構(gòu)解釋器

不指定 CPU 平臺,使用 register 來注冊可支持的架構(gòu)解析器

docker run --rm \
--privileged \
multiarch/qemu-user-static:register \
--reset

執(zhí)行成功后,會返回類似如下的結(jié)果來表明支持的架構(gòu)解析器

Setting /usr/bin/qemu-alpha-static as binfmt interpreter for alpha
Setting /usr/bin/qemu-arm-static as binfmt interpreter for arm
Setting /usr/bin/qemu-armeb-static as binfmt interpreter for armeb
Setting /usr/bin/qemu-sparc-static as binfmt interpreter for sparc
Setting /usr/bin/qemu-sparc32plus-static as binfmt interpreter for sparc32plus
Setting /usr/bin/qemu-sparc64-static as binfmt interpreter for sparc64
Setting /usr/bin/qemu-ppc-static as binfmt interpreter for ppc
Setting /usr/bin/qemu-ppc64-static as binfmt interpreter for ppc64
Setting /usr/bin/qemu-ppc64le-static as binfmt interpreter for ppc64le
Setting /usr/bin/qemu-m68k-static as binfmt interpreter for m68k
Setting /usr/bin/qemu-mips-static as binfmt interpreter for mips
Setting /usr/bin/qemu-mipsel-static as binfmt interpreter for mipsel
Setting /usr/bin/qemu-mipsn32-static as binfmt interpreter for mipsn32
Setting /usr/bin/qemu-mipsn32el-static as binfmt interpreter for mipsn32el
Setting /usr/bin/qemu-mips64-static as binfmt interpreter for mips64
Setting /usr/bin/qemu-mips64el-static as binfmt interpreter for mips64el
Setting /usr/bin/qemu-sh4-static as binfmt interpreter for sh4
Setting /usr/bin/qemu-sh4eb-static as binfmt interpreter for sh4eb
Setting /usr/bin/qemu-s390x-static as binfmt interpreter for s390x
Setting /usr/bin/qemu-aarch64-static as binfmt interpreter for aarch64
Setting /usr/bin/qemu-aarch64_be-static as binfmt interpreter for aarch64_be
Setting /usr/bin/qemu-hppa-static as binfmt interpreter for hppa
Setting /usr/bin/qemu-riscv32-static as binfmt interpreter for riscv32
Setting /usr/bin/qemu-riscv64-static as binfmt interpreter for riscv64
Setting /usr/bin/qemu-xtensa-static as binfmt interpreter for xtensa
Setting /usr/bin/qemu-xtensaeb-static as binfmt interpreter for xtensaeb
Setting /usr/bin/qemu-microblaze-static as binfmt interpreter for microblaze
Setting /usr/bin/qemu-microblazeel-static as binfmt interpreter for microblazeel
Setting /usr/bin/qemu-or1k-static as binfmt interpreter for or1k
Setting /usr/bin/qemu-hexagon-static as binfmt interpreter for hexagon

嘗試啟動 arm64 鏡像

下載 qemu-aarch64-static

wget https://github.com/multiarch/qemu-user-static/releases/download/v5.2.0-1/qemu-aarch64-static && \
chmod +x qemu-aarch64-static

啟動容器時將 qemu-aarch64-static 帶入到容器內(nèi)

注意 qemu-aarch64-static 二進制文件的路徑,可以自己歸納到指定的路徑,只需要帶入到容器內(nèi)的 /usr/bin 目錄下就好了

docker run -t \
--rm \
--platform arm64 \
-v $(pwd)/qemu-aarch64-static:/usr/bin/qemu-aarch64-static \
debian:11 \
uname -m

正常情況下,返回 aarch64 后容器就會被銷毀了(因為加了 --rm 參數(shù)

嘗試啟動 ppc64le 鏡像

下載 qemu-ppc64le-static

wget https://github.com/multiarch/qemu-user-static/releases/download/v5.2.0-1/qemu-ppc64le-static && \
chmod +x qemu-ppc64le-static

啟動 ppc64le 平臺的鏡像

docker run -t \
--rm \
--platform ppc64le \
-v $(pwd)/qemu-ppc64le-static:/usr/bin/qemu-ppc64le-static \
alpine:3.17.2 \
uname -m

正常情況下,返回 ppc64le 后容器就會被銷毀了(因為加了 --rm 參數(shù)

后臺運行 arm64 容器

sleep 315360000 讓容器在后臺睡眠 100 年(因為容器能在后臺運行的方法就是要有一個常駐前臺的進程

docker run -d \
--rm \
--platform arm64 \
-v $(pwd)/qemu-aarch64-static:/usr/bin/qemu-aarch64-static \
--name centos_7.9_arm64 \
centos:7.9.2009 \
sleep 315360000

進入容器

docker exec -it centos_7.9_arm64 bash

在容器內(nèi)執(zhí)行 yum 命令,可以看到一切都是正常的,并且是 aarch64

yum install -y vim

qemu-user-static,ARM64,Docker,docker,容器,運維,arm64

build 一個 arm64 鏡像

  • 準備一個 Dockerfile
  • 需要將 qemu-aarch64-static 帶入到容器內(nèi)的 /usr/bin 目錄下才可以實現(xiàn)構(gòu)建
  • 不然會返回 standard_init_linux.go:211: exec user process caused "no such file or directory" 這樣的報錯
FROM centos:7.9.2009
ADD ./qemu-aarch64-static /usr/bin/qemu-aarch64-static
RUN yum install -y net-tools gcc gcc-c++ make vim && \
    yum clean all

開始構(gòu)建

docker build \
--platform arm64 \
-t centos_make:7.9_aarch64 .

構(gòu)建完成后會返回兩個 Successfully

qemu-user-static,ARM64,Docker,docker,容器,運維,arm64

構(gòu)建完成后,可以使用下面的命令驗證容器內(nèi)的平臺是否是 arm64

docker inspect centos_make:7.9_aarch64 | grep -i 'architecture'

qemu-user-static,ARM64,Docker,docker,容器,運維,arm64

到這里,x86 平臺運行和構(gòu)建其他平臺鏡像的學(xué)習就結(jié)束了,下面有一篇關(guān)于多架構(gòu)支持的文章,有興趣的可以看一看(我是真的看麻了,太難了吧,果然還是開發(fā)改變世界)


參考文檔

容器鏡像多架構(gòu)支持介紹文章來源地址http://www.zghlxwxcb.cn/news/detail-781807.html

到了這里,關(guān)于x86 平臺利用 qemu-user-static 實現(xiàn) arm64 平臺 docker 鏡像的運行和構(gòu)建的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ubuntu22.04 x86環(huán)境上使用QEMU搭建arm虛擬機

    ubuntu22.04 x86環(huán)境上使用QEMU搭建arm虛擬機

    apt-get -y install qemu apt-get -y install bridge-utils apt-get -y install vnc4server apt-get -y install qemu-kvm apt install -y qemu-system-arm apt-get -y install libvirt0 apt-get -y install libvirt-daemon apt-get -y install libvirt-daemon-system 安裝完成后檢查: virsh version ls /usr/bin/|grep qemu wget http://releases.linaro.org/components/kernel/

    2024年02月07日
    瀏覽(24)
  • 在x86下運行的Ubuntu系統(tǒng)上部署QEMU用于模擬RISC-V硬件系統(tǒng)

    在x86下運行的Ubuntu系統(tǒng)上部署QEMU用于模擬RISC-V硬件系統(tǒng)

    下載地址: 建議選擇stable版本,arch選擇riscv64-lp64d,libc選擇常用的glibc。 下載后解壓,然后將bin目錄加入PATH環(huán)境變量中。 下載地址: 建議選擇穩(wěn)定版本,下載后解壓,然后make --enable-virtfs 用戶虛擬機和宿主機之間共享文件 Linux內(nèi)核下載地址: 選擇穩(wěn)定的版本,下載完后解

    2024年02月13日
    瀏覽(21)
  • 基于x86架構(gòu)的CentOS7虛擬機通過qemu安裝ARM架構(gòu)CentOS7虛擬機_centos7 arm 網(wǎng)絡(luò)配置

    基于x86架構(gòu)的CentOS7虛擬機通過qemu安裝ARM架構(gòu)CentOS7虛擬機_centos7 arm 網(wǎng)絡(luò)配置

    【原文連接】基于x86架構(gòu)的CentOS7虛擬機通過qemu安裝ARM架構(gòu)CentOS7虛擬機_centos7 arm_redrose2100的博客-CSDN博客 試過很多版本的在win10系統(tǒng)直接qemu安裝arm版linux都失敗了,也看到了別人也說這個方式不行得用虛擬機套虛擬機才行的方式,因為我沒有ubunto所以搜到大佬的centos虛擬機套

    2024年02月09日
    瀏覽(32)
  • x86 平臺運行 arm 的方法

    參考: https://github.com/multiarch/qemu-user-static 核心是使用 binfmt_misc 設(shè)定運行 arm 的默認程序為 qemu-aarch64-static 1.先下載 arm64 即 aarch64 的運行文件 2.設(shè)置默認打開方式, 即設(shè)置 binfmt_misc 以支持 arm64 程序的運行 # --reset 會刪除同名條目后重新設(shè)置 3.測試 4.不用映射qemu-*-static也可以使用

    2024年02月12日
    瀏覽(24)
  • x86平臺SIMD編程入門(2):通用指令

    雖然128位的XMM寄存器在硬件上只是256位YMM寄存器的下半部分,但在C++中它們是不同的類型。有一些intrinsic函數(shù)可以將它們重新解釋為不同的類型,如下表所示,行代表源類型,列代表目標類型。 __m128 __m128d __m128i __m256 __m256d __m256d __m128 = _mm_castps_pd _mm_castps_si128 _mm256_castps128_p

    2024年02月06日
    瀏覽(26)
  • x86平臺SIMD編程入門(3):浮點指令

    x86平臺SIMD編程入門(3):浮點指令

    算術(shù)類型 函數(shù)示例 備注 加 _mm_add_sd 、 _mm256_add_ps 減 _mm_sub_sd 、 _mm256_sub_ps 乘 _mm_mul_sd 、 _mm256_mul_ps 除 _mm_div_sd 、 _mm256_div_ps 平方根 _mm_sqrt_sd 、 _mm256_sqrt_ps 倒數(shù) _mm_rcp_ss 、 _mm_rcp_ps 、 _mm256_rcp_ps 快速計算32位浮點數(shù)的近似倒數(shù)(1/x),最大相對誤差小于 (1.5times 2^{-12}) 。 倒數(shù)

    2024年02月06日
    瀏覽(20)
  • x86平臺SIMD編程入門(4):整型指令

    x86平臺SIMD編程入門(4):整型指令

    算術(shù)類型 函數(shù)示例 加 _mm_add_epi32 、 _mm256_sub_epi16 減 _mm_sub_epi32 、 _mm256_sub_epi16 乘 _mm_mul_epi32 、 _mm_mullo_epi32 除 無 水平加/減 _mm_hadd_epi16 、 _mm256_hsub_epi32 飽和加/減 _mm_adds_epi8 、 _mm256_subs_epi16 最大/最小值 _mm_max_epu8 、 _mm256_min_epi32 絕對值 _mm_abs_epi16 、 _mm256_abs_epi32 平均值 _mm

    2024年02月06日
    瀏覽(22)
  • x86平臺SIMD編程入門(5):提示與技巧

    訪問內(nèi)存的成本非常高,一次緩存未命中可能會耗費100~300個周期。L3緩存加載需要40~50個周期,L2緩存大約需要10個周期,即使L1緩存的訪問速度也明顯慢于寄存器。所以要盡量保持數(shù)據(jù)結(jié)構(gòu)對SIMD友好,優(yōu)先選擇 std::vector 、 CAtlArray 、 eastl::vector 等容器,按照順序讀取數(shù)據(jù)以提

    2024年02月06日
    瀏覽(28)
  • docker在x86平臺下載arm的鏡像

    docker在x86平臺下載arm的鏡像

    6、進入該arm版本的詳細頁面,在該頁面的上方有本版本鏡像的sha校驗值。 7、復(fù)制該值,使用如下命令在x86平臺上進行下載即可。 docker pull nginx:latest@sha256:687e0e4a235ee770533f6c25fb5791b14d7b6aa603ba4ed724abbd2ed51ee11a 8、完成下載,如圖:

    2024年02月12日
    瀏覽(31)
  • x86平臺SIMD編程入門(1):SIMD基礎(chǔ)知識

    x86平臺SIMD編程入門(1):SIMD基礎(chǔ)知識

    SIMD(Single Instruction, Multiple Data)是一種并行計算技術(shù),它通過向量寄存器存儲多個數(shù)據(jù)元素,并使用單條指令同時對這些數(shù)據(jù)元素進行處理,從而提高了計算效率。SIMD已被廣泛應(yīng)用于需要大量數(shù)據(jù)并行計算的領(lǐng)域,包括圖像處理、視頻編碼、信號處理、科學(xué)計算等。許多現(xiàn)代處

    2024年02月06日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包