這篇文章給大家分享的是有關Docker buildx如何構建多平臺鏡像并推送到私有倉庫的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創新互聯自2013年創立以來,是專業互聯網技術服務公司,擁有項目成都網站制作、成都網站設計、外貿營銷網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元舒城做網站,已為上家服務,為舒城各地企業和個人服務,聯系電話:028-86922220引子
最近發現有ARM版Docker,hub.docker.com上也有ARM版本的鏡像,但是ARM版本的Docker鏡像構建是個問題。嵌入式程序可以在PC機上進行交叉編譯,不知道Docker是否有交叉構建的方案。
方案
目前想到的Docker構建ARM鏡像方法有如下幾種。第三種就類似交叉編譯。
使用ARM主機,安裝ARM版本的Docker,docker build出來的就是ARM版本的鏡像。
使用Linux的虛擬化軟件,模擬ARM芯片+ Linux,例如qemu。
使用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的鏡像信息。我們可以創建一個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,社區也沒人管。
解決方法:自建dns,把鏡像的地址buildx.com指向registry的機器,后續用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; #按照這個協議配置 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環境
本地Docker需要開啟實驗功能。
在/etc/docker/daemon.json中配置 "experimental": true,重啟Docker。開啟Docker daemon的實驗功能。
在本地執行export DOCKER_CLI_EXPERIMENTAL=enabled,開啟Docker Client的實驗功能。
使用docker version查看實驗功能是否開啟。
執行docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3,開啟內核binfmt_misc功能,可以在當前平臺上執行多平臺的程序。
查看是否支持aarch74程序。cat /proc/sys/fs/binfmt_misc/qemu-aarch74
此時本地的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 # 創建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
構建業務鏡像
# 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
感謝各位的閱讀!關于“Docker buildx如何構建多平臺鏡像并推送到私有倉庫”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網頁題目:Dockerbuildx如何構建多平臺鏡像并推送到私有倉庫-創新互聯
鏈接地址:http://vcdvsql.cn/article26/hssjg.html
成都網站建設公司_創新互聯,為您提供關鍵詞優化、靜態網站、品牌網站建設、搜索引擎優化、建站公司、網站設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯