国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

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

2024-07-09 22:43:02
字體:
來源:轉載
供稿:網友

引子

最近發現有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功能,可以在當前平臺上執行多平臺的程序。 查看是否支持aarch64程序。cat /proc/sys/fs/binfmt_misc/qemu-aarch64 此時本地的docker可以運行各種平臺的docker容器。比如arm64。可以使用如下命令測試。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长阳| 克拉玛依市| 故城县| 额济纳旗| 荔波县| 西乌珠穆沁旗| 彰化市| 昌吉市| 铜川市| 商河县| 宜兰县| 沅江市| 阳原县| 大新县| 南投县| 喀喇| 中牟县| 昌宁县| 康马县| 泊头市| 甘德县| 库车县| 姚安县| 平乐县| 崇阳县| 沛县| 花莲市| 栖霞市| 大宁县| 盐津县| 娱乐| 阳江市| 武陟县| 台北市| 连云港市| 辽源市| 广宗县| 霸州市| 江津市| 合山市| 将乐县|