打混合鏡像

多平臺(tái)鏡像構(gòu)建

前置條件

  • Docker 啟用 experimental

    #在Docker daemon 配置文件中配置 "experimental": true開啟實(shí)驗(yàn)性功能
    vi /etc/docker/daemon.json
    {
       "experimental": true
    }
    
  • 修改Docker Daemon 配置 需要重啟docker服務(wù)

systemctl restart docker
  • 使用 docker version 命令查看版本信息缅刽,配置生效后可以看到Server: Docker Engine中有Experimental: true

  • 如果您使用的 Docker CLI 版本低于 v20.10 衰猛,執(zhí)行 docker manifest 命令會(huì)看到報(bào)錯(cuò)提示 docker manifest is only supported on a Docker cli with experimental cli features enabled 啡省,此時(shí)我們需要執(zhí)行

    export DOCKER_CLI_EXPERIMENTAL="enabled"
    

    開啟客戶端實(shí)驗(yàn)特性支持卦睹。在 v20.10 及以上版本的 Docker CLI 會(huì)默認(rèn)開啟實(shí)驗(yàn)特性结序,無(wú)需額外操作

編譯鏡像

  • 在x-86環(huán)境中構(gòu)建鏡像

    docker build -t dockerhub.mycloud.top/crux/base-image:2.0.1 .
    #推送鏡像到倉(cāng)庫(kù)
    docker push dockerhub.mycloud.top/crux/base-image:2.0.1
    
  • 在arm環(huán)境中構(gòu)建鏡像纵潦,注意鏡像名稱不一樣

    docker build -t dockerhub.mycloud.top/crux/base-image-arm64:2.0.1 .
    #推送鏡像到倉(cāng)庫(kù)
    docker push dockerhub.mycloud.top/crux/base-image-arm64:2.0.1
    
  • 創(chuàng)建多架構(gòu)鏡像

    #創(chuàng)建一個(gè)新的manifest邀层,指定多架構(gòu)鏡像的名稱,和具體的不同架構(gòu)的鏡像名稱
    docker manifest create dockerhub.mycloud.top/crux/base-image:2.0.1 dockerhub.mycloud.top/crux/base-image:2.0.1 dockerhub.mycloud.top/crux/base-image-arm64:2.0.1
    # 聲明不同架構(gòu)鏡像對(duì)應(yīng)的操作系統(tǒng)和cpu架構(gòu)類型劲赠,其中x86_64需要用amd64來(lái)指定
    docker manifest annotate dockerhub.mycloud.top/crux/base-image:2.0.1 dockerhub.mycloud.top/crux/base-image:2.0.1  --os linux --arch amd64
    docker manifest annotate dockerhub.mycloud.top/crux/base-image:2.0.1 dockerhub.mycloud.top/crux/base-image-arm64:2.0.1 --os linux --arch arm64
    #將manifest推送到私用倉(cāng)庫(kù)中
    docker manifest push dockerhub.mycloud.top/crux/base-image:2.0.1
    
    
    

第二種方案使用buildx

前置條件

  • 要想使用 buildx经磅,首先要確保 Docker 版本不低于 19.03预厌,同時(shí)還要通過(guò)設(shè)置環(huán)境變量 DOCKER_CLI_EXPERIMENTAL 來(lái)啟用轧叽】兀可以通過(guò)下面的命令來(lái)為當(dāng)前終端啟用 buildx 插件:

    export DOCKER_CLI_EXPERIMENTAL=enabled
    
  • 驗(yàn)證是否開啟

    docker buildx version
    github.com/docker/buildx v0.4.2-tp-docker fb7b670b764764dc4716df3eba07ffdae4cc47b2
    

啟用 binfmt_misc

  • 如果你使用的是 Linux甥角,需要手動(dòng)啟用 binfmt_misc。大多數(shù) Linux 發(fā)行版都很容易啟用震束,不過(guò)還有一個(gè)更容易的辦法,直接運(yùn)行一個(gè)特權(quán)容器割疾,容器里面寫好了設(shè)置腳本:

    docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d
    

    建議將 Linux 內(nèi)核版本升級(jí)到 4.x 以上嘉栓,特別是 CentOS 用戶侵佃,你可能會(huì)遇到錯(cuò)誤。

  • 驗(yàn)證是 binfmt_misc 否開啟

    ls -al /proc/sys/fs/binfmt_misc/
    總用量 0
    drwxr-xr-x 2 root root 0 3月   2 14:03 .
    dr-xr-xr-x 1 root root 0 3月   2 11:43 ..
    -rw-r--r-- 1 root root 0 3月   2 14:03 qemu-aarch64
    -rw-r--r-- 1 root root 0 3月   2 14:03 qemu-arm
    -rw-r--r-- 1 root root 0 3月   2 14:03 qemu-ppc64le
    -rw-r--r-- 1 root root 0 3月   2 14:03 qemu-s390x
    --w------- 1 root root 0 3月   2 14:03 register
    -rw-r--r-- 1 root root 0 3月   2 14:03 status
    
  • 驗(yàn)證是否啟用了相應(yīng)的處理器

    cat /proc/sys/fs/binfmt_misc/qemu-aarch64
    enabled
    interpreter /usr/bin/qemu-aarch64
    flags: OCF
    offset 0
    magic 7f454c460201010000000000000000000200b7
    mask ffffffffffffff00fffffffffffffffffeffff
    

從默認(rèn)的構(gòu)建器切換到多平臺(tái)構(gòu)建器

  • Docker 默認(rèn)會(huì)使用不支持多 CPU 架構(gòu)的構(gòu)建器涌献,我們需要手動(dòng)切換燕垃。

    先創(chuàng)建一個(gè)新的構(gòu)建器:

    docker buildx create --use --name mybuilder
    
  • 啟動(dòng)構(gòu)建器:

    docker buildx inspect mybuilder --bootstrap
    
  • 查看當(dāng)前使用的構(gòu)建器及構(gòu)建器支持的 CPU 架構(gòu)井联,可以看到支持很多 CPU 架構(gòu):

    docker buildx ls
    

構(gòu)建多平臺(tái)鏡像

  • 創(chuàng)建一個(gè) Dockerfile 將該應(yīng)用容器化:

    FROM openjdk:8-jre-alpine
    #FROM dockerhub.mycloud.top/public/openjdk:8-jre-alpine
    
    ARG PINPOINT_VERSION=${PINPOINT_VERSION:-2.0.3}
    ARG SKYWALKING_VERSION=${SKYWALKING_VERSION:-6.6.0}
    ARG INSTALL_URL=https://zwfile.mycloud.tech/share/pinpoint/releases/download/v${PINPOINT_VERSION}/pinpoint-agent-${PINPOINT_VERSION}.tar.gz
    ARG SKYWALKING_URL=https://zwfile.mycloud.tech/share/skywalking/skywalking-agent-${SKYWALKING_VERSION}.tar.gz
    
    ADD . /
    
    RUN apk add --update curl bash \
        && chmod a+x /usr/local/bin/configure-agent.sh \
        && mkdir -p /pinpoint-agent \
        && chmod -R o+x /pinpoint-agent \
        && curl -SL ${INSTALL_URL} -o pinpoint-agent.tar.gz \
        && gunzip pinpoint-agent.tar.gz \
        && tar -xf pinpoint-agent.tar -C /pinpoint-agent \
        && mv /pinpoint-agent/pinpoint-agent-${PINPOINT_VERSION}/* /pinpoint-agent \
        && rm -rf /pinpoint-agent/pinpoint-agent-${PINPOINT_VERSION} \
        && rm pinpoint-agent.tar \
        && curl -SL ${SKYWALKING_URL} -o skywalking-agent-${SKYWALKING_VERSION}.tar.gz \
        && tar -zxf skywalking-agent-${SKYWALKING_VERSION}.tar.gz -C / \
        && rm /skywalking-agent-${SKYWALKING_VERSION}.tar.gz \
        && rm /var/cache/apk/*
    
    ENV CRUX_OPTS="-Duser.timezone=Asia/Shanghai -javaagent:/app/aspectjweaver.jar"
    ENV PINPOINT_AGENT="-javaagent:/pinpoint-agent/pinpoint-bootstrap-${PINPOINT_VERSION}.jar"
    ENV SKYWALKING_AGENT="-javaagent:/skywalking/agent/skywalking-agent.jar"
    ENV JAVA_OPTS=""
    
    ENTRYPOINT ["/usr/local/bin/configure-agent.sh"]
    
  • 構(gòu)建推送

    docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t dockerhub.mycloud.top/crux/base-image:2.0.1-test --push .
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轴捎,一起剝皮案震驚了整個(gè)濱河市侦副,隨后出現(xiàn)的幾起案子驼鞭,更是在濱河造成了極大的恐慌,老刑警劉巖译隘,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件固耘,死亡現(xiàn)場(chǎng)離奇詭異词身,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)损敷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門嗤锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘟忱,“玉大人苫幢,你說(shuō)我怎么就攤上這事〈ゲ耍” “怎么了哀峻?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵剩蟀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我丙号,道長(zhǎng)缰冤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任怀薛,我火速辦了婚禮乾戏,結(jié)果婚禮上鼓择,老公的妹妹穿的比我還像新娘就漾。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布朗徊。 她就那樣靜靜地躺著爷恳,像睡著了一般象踊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栈虚,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天魂务,我揣著相機(jī)與錄音,去河邊找鬼粘姜。 笑死熔酷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坛芽。 我是一名探鬼主播翼抠,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼阴颖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了钾菊?” 一聲冷哼從身側(cè)響起偎肃,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滞详,失蹤者是張志新(化名)和其女友劉穎凛俱,沒想到半個(gè)月后蒲犬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體原叮,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巡蘸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了团甲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躺苦。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匹厘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愈诚,到底是詐尸還是另有隱情炕柔,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布陵刹,位于F島的核電站衰琐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏炼蹦。R本人自食惡果不足惜掐隐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斗搞。 院中可真熱鬧僻焚,春花似錦、人聲如沸虑啤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)总珠。三九已至勘纯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淫奔,已是汗流浹背唆迁。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工媒惕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留来庭,地道東北人妒蔚。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像月弛,于是被迫代替她去往敵國(guó)和親肴盏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容