婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Docker buildx構建多平臺鏡像并推送到私有倉庫的方法

Docker buildx構建多平臺鏡像并推送到私有倉庫的方法

熱門標簽:網(wǎng)絡電話外呼系統(tǒng)開發(fā) 北海智能電銷機器人公司 滴滴急救中心地圖標注 申請400電話收費標 淘寶辦理400電話是多少 菏澤自動電銷機器人公司 艾澤拉斯地圖標注 福州語音電銷機器人招商 外呼線路隨意切換嗎

引子

最近發(fā)現(xiàn)有ARM版Docker,hub.docker.com上也有ARM版本的鏡像,但是ARM版本的Docker鏡像構建是個問題。嵌入式程序可以在PC機上進行交叉編譯,不知道Docker是否有交叉構建的方案。

方案

目前想到的Docker構建ARM鏡像方法有如下幾種。第三種就類似交叉編譯。

  1. 使用ARM主機,安裝ARM版本的Docker,docker build出來的就是ARM版本的鏡像。
  2. 使用Linux的虛擬化軟件,模擬ARM芯片+ Linux,例如qemu。
  3. 使用Docker試驗功能buildx,可以構建多平臺的鏡像。

使用Docker buildx構建多個平臺鏡像

參考如下幾個鏈接。
https://docs.docker.com/engine/reference/commandline/manifest/
https://docs.docker.com/buildx/working-with-buildx/
https://engineering.docker.com/2019/06/getting-started-with-docker-for-arm-on-linux/

用到了兩個docker的試驗功能,使用時需要開啟試驗功能。

docker manifest,manifest是一個包含了鏡像信息的文件。manifest list是一個鏡像清單列表,用于存放不同os/arch的鏡像信息。我們可以創(chuàng)建一個manifest list來指向兩個鏡像,然后可以支持多平臺。

docker buildx,buildx是docker的一個插件,是下一代docker鏡像構建。該插件通過qemu-user-static翻譯不同平臺的指令集,達到在x64上運行其他平臺的程序。buildx實際使用了moby/buildkit:buildx-stable-1鏡像進行多平臺構建。

搭建docker registry多平臺版本

參考如下鏈接,構建docker registry鏡像。
https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/deploying-multi-architecture-docker-registry

搭建dns服務器,解決buildx bug

buildx插件不走本地hosts文件,必須走dns。這是個bug,https://github.com/docker/buildx/issues/218,社區(qū)也沒人管。
解決方法:自建dns,把鏡像的地址buildx.com指向registry的機器,后續(xù)用nginx。ubuntu有一個默認systemd-resolved,關閉之后在開啟dnsmasq。

使用nginx代理解決命名問題

增加nginx代理同時支持HTTP和HTTPS。buildx這個插件強行使用了HTTPS,沒有找到關閉的地方。
提示證書問題,證書不是這個域名的,解決方法: 重新生成一個證書,域名填自己的。
證書問題,不信任自簽名證書,把自簽名的證書加到buildx daemon容器的證書信任鏈中。https://github.com/docker/buildx/issues/80#issuecomment-533844117

nginx增加兩個配置,解決客戶端push時的幾個問題。

# nignx.conf 配置
proxy_ignore_client_abort on; #忽略客戶端告警
client_max_body_size 0;  #上傳文件大小不限制


# 虛擬主機配置
server {
  listen 443;
  server_name buildx.com;
  ssl on;
  ssl_certificate crt/server.crt;
  ssl_certificate_key crt/server.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協(xié)議配置
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
  ssl_prefer_server_ciphers on;
  location / {
    proxy_pass http://192.168.1.11:81;
  }
}

server {
  listen 80;
  server_name buildx.com;
  location / {
    proxy_pass http://192.168.1.11:81;
  }
}

設置本地Docker環(huán)境

本地Docker需要開啟實驗功能。

  1. 在/etc/docker/daemon.json中配置 "experimental": true,重啟Docker。開啟Docker daemon的實驗功能。
  2. 在本地執(zhí)行export DOCKER_CLI_EXPERIMENTAL=enabled,開啟Docker Client的實驗功能。
  3. 使用docker version查看實驗功能是否開啟。
  4. 執(zhí)行docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3,開啟內核binfmt_misc功能,可以在當前平臺上執(zhí)行多平臺的程序。
  5. 查看是否支持aarch64程序。cat /proc/sys/fs/binfmt_misc/qemu-aarch64
  6. 此時本地的docker可以運行各種平臺的docker容器。比如arm64。可以使用如下命令測試。
# 拉取arm64版本鏡像并運行
docker pull --platform arm64 alpine:3.10
docker run --rm -it alpine:3.10 sh

制作基礎鏡像

可以從hub.docker.com中獲取多個平臺的版本,生成manifest list,上傳的registry中。

# pull arm64版本、改名、上傳。 具體鏡像是否支持多平臺,可以到hub.docker.com上看。
docker pull --platform arm64 centos:7
docker tag centos:7 buildx.com/base/centos-arm64:7
docker push buildx.com/base/centos-arm64:7
# pull amd64版本、改名、上傳
docker pull --platform amd64 centos:7
docker tag centos:7 buildx.com/base/centos-amd64:7
docker push buildx.com/base/centos-amd64:7
# 創(chuàng)建manifest list、上傳。
docker manifest create --insecure buildx.com/base/centos:7 buildx.com/base/centos-amd64:7 buildx.com/base/centos-arm64:7
docker manifest push --insecure buildx.com/base/centos:7

構建業(yè)務鏡像

# buildx 可以指定多個平臺,但是要求Dockerfile中的FROM鏡像必須有對應版本的。
# buildx 打包的鏡像不會在本地存儲,加--push,上傳docker倉?;蛘呖梢允褂?-output指定輸出方式。
docker buildx build --platform linux/amd64,linux/arm64 -t buildx.com/base/java-base:openjdk-8-centos7 . --push

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:亳州 賀州 滄州 三沙 丹東 延安 混顯 資陽

巨人網(wǎng)絡通訊聲明:本文標題《Docker buildx構建多平臺鏡像并推送到私有倉庫的方法》,本文關鍵詞  Docker,buildx,構建,多,平臺,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Docker buildx構建多平臺鏡像并推送到私有倉庫的方法》相關的同類信息!
  • 本頁收集關于Docker buildx構建多平臺鏡像并推送到私有倉庫的方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 苍梧县| 乌鲁木齐市| 调兵山市| 福建省| 贺州市| 开封县| 清水河县| 鹤庆县| 宁乡县| 枣庄市| 潼关县| 陆良县| 京山县| 临夏市| 北宁市| 会宁县| 徐闻县| 贡山| 进贤县| 波密县| 华池县| 杭锦后旗| 灌云县| 启东市| 辉县市| 宁河县| 永新县| 朝阳市| 马龙县| 南丰县| 贡山| 略阳县| 红安县| 台江县| 辉南县| 南京市| 高雄市| 宿松县| 广昌县| 剑阁县| 灵武市|