Docker 的多架构支持

docker自适应了CPU的架构
会自动选择架构的版本

镜像
多架构的标签,会自动选择适合的标签。

使用 buildx 构建多架构镜像

Windows和Mac的桌面版Docker自带buildx命令,但是Linux环境下的Docker需要自行安装buildx 。https://github.com/docker/buildx

https://docs.docker.com/buildx/working-with-buildx/

Docker Buildx

PS C:\Users\柏杉\Downloads\flask-redis-master> docker buildxUsage:  docker buildx [OPTIONS] COMMANDExtended build capabilities with BuildKitOptions:--builder string   Override the configured builder instanceManagement Commands:imagetools  Commands to work on images in registryCommands:bake        Build from a filebuild       Start a buildcreate      Create a new builder instancedu          Disk usageinspect     Inspect current builder instancels          List builder instancesprune       Remove build cacherm          Remove a builder instancestop        Stop builder instanceuse         Set the current builder instanceversion     Show buildx version informationRun 'docker buildx COMMAND --help' for more information on a command.

登录dockerhub

docker login

进入源码目录(Dockerfile所在目录)

git clone https://github.com/xiaopeng163/flask-redis
cd flask-redis

构建 docker buildx build

--platform 支持哪些架构
-t 指tag版本,账号 / 镜像文件

注意:yebax/flask-redis yebax是我的docker hub账号,flask-redis是镜像,根据自己的账号修改名称。别上传到我的账号里了!

docker buildx build --push --platform linux/arm/v7,linux/arm64/v8,linux/amd64 -t yebax/flask-redis:latest .

遇到问题buildx问题

因为使用Windows有两个环境,一个是desktop-linux,一个是default

PS C:\Users\柏杉\Downloads\flask-redis-master> docker buildx build --push --platform linux/arm/v7,linux/arm64/v8,linux/amd64 -t yeabx/flask-redis:latest .
[+] Building 0.0s (0/0)
error: multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")
PS C:\Users\柏杉\Downloads\flask-redis-master> docker buildx ls
NAME/NODE       DRIVER/ENDPOINT STATUS  PLATFORMS
desktop-linux   dockerdesktop-linux desktop-linux   running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default *       dockerdefault       default         running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

创建一个新的环境 docker buildx create

--use 切换到环境里面,默认是在default

docker buildx create --name mybuilder --use

查看 docker buildx ls

PS C:\Users\柏杉\Downloads\flask-redis-master> docker buildx ls
NAME/NODE       DRIVER/ENDPOINT                STATUS   PLATFORMS
mybuilder *     docker-containermybuilder0    npipe:./pipe/docker_engine inactive
desktop-linux   dockerdesktop-linux desktop-linux                  running  linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default         dockerdefault       default                        running  linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
PS C:\Users\柏杉\Downloads\flask-redis-master>

注意: * 代表激活的当前环境,例如上面的 mybuilder *

再次构建

原理,拉取一个镜像,在镜像里面构建linux/arm/v7,linux/arm64/v8,linux/amd64镜像,最后提交到docker hub 上。

PS C:\Users\柏杉\Downloads\flask-redis-master> docker buildx build --push --platform linux/arm/v7,linux/arm64/v8,linux/amd64 -t yebax/flask-redis:latest .
[+] Building 12.2s (20/21)=> [internal] load build definition from Dockerfile                                                                                                                         0.0s=> => transferring dockerfile: 318B                                                                                                                                         0.0s=> [internal] load .dockerignore                                                                                                                                            0.0s=> => transferring context: 2B                                                                                                                                              0.0s=> [linux/amd64 internal] load metadata for docker.io/library/python:3-slim                                                                                                 6.0s=> [linux/arm64 internal] load metadata for docker.io/library/python:3-slim                                                                                                 6.0s=> [linux/arm/v7 internal] load metadata for docker.io/library/python:3-slim                                                                                                6.0s=> [auth] library/python:pull token for registry-1.docker.io                                                                                                                0.0s=> [linux/arm/v7 1/4] FROM docker.io/library/python:3-slim@sha256:44f51ba4af570481a83972fc424f8c1546a800341aebdbc6849a523eece02eb9                                          0.0s=> => resolve docker.io/library/python:3-slim@sha256:44f51ba4af570481a83972fc424f8c1546a800341aebdbc6849a523eece02eb9                                                       0.0s=> [internal] load build context                                                                                                                                            0.0s=> => transferring context: 28B                                                                                                                                             0.0s=> [linux/arm64 1/4] FROM docker.io/library/python:3-slim@sha256:44f51ba4af570481a83972fc424f8c1546a800341aebdbc6849a523eece02eb9                                           0.1s=> => resolve docker.io/library/python:3-slim@sha256:44f51ba4af570481a83972fc424f8c1546a800341aebdbc6849a523eece02eb9                                                       0.1s=> [linux/amd64 1/4] FROM docker.io/library/python:3-slim@sha256:44f51ba4af570481a83972fc424f8c1546a800341aebdbc6849a523eece02eb9                                           0.1s=> => resolve docker.io/library/python:3-slim@sha256:44f51ba4af570481a83972fc424f8c1546a800341aebdbc6849a523eece02eb9                                                       0.0s=> CACHED [linux/arm64 2/4] RUN pip install flask redis &&     groupadd -r flask && useradd -r -g flask flask &&     mkdir /src &&     chown -R flask:flask /src            0.0s=> CACHED [linux/arm64 3/4] COPY app.py /src/app.py                                                                                                                         0.0s=> CACHED [linux/arm64 4/4] WORKDIR /src                                                                                                                                    0.0s=> CACHED [linux/amd64 2/4] RUN pip install flask redis &&     groupadd -r flask && useradd -r -g flask flask &&     mkdir /src &&     chown -R flask:flask /src            0.0s=> CACHED [linux/amd64 3/4] COPY app.py /src/app.py                                                                                                                         0.0s=> CACHED [linux/amd64 4/4] WORKDIR /src                                                                                                                                    0.0s=> CACHED [linux/arm/v7 2/4] RUN pip install flask redis &&     groupadd -r flask && useradd -r -g flask flask &&     mkdir /src &&     chown -R flask:flask /src           0.0s=> CACHED [linux/arm/v7 3/4] COPY app.py /src/app.py                                                                                                                        0.0s=> CACHED [linux/arm/v7 4/4] WORKDIR /src                                                                                                                                   0.0s=> exporting to image                                                                                                                                                       6.0s=> => exporting layers                                                                                                                                                      0.0s=> => exporting manifest sha256:587e1270a72a7d79fc876c5008b395d4c8f5d188c8436ad4ef3544ff6a5e3ff1                                                                            0.0s=> => exporting config sha256:bd1b0007330d0376080bafd604fcfc38fe7f6d7e02cbae506e81fcf2a62806fb                                                                              0.0s=> => exporting manifest sha256:4fb110df2507a812560f8b273d408cde68028ad61a5463e466875db8ecf3e820                                                                            0.0s=> => exporting config sha256:ffc79b5de755e69d57dbd979aa3e346e457ff9415f15ec6fa1d495b2fb9b0df7                                                                              0.0s=> => exporting manifest sha256:86be7ac77e67a9d0a267c2368e30f1c30a4f24d218054a3f217aabbcc8bbb771                                                                            0.0s=> => exporting config sha256:075647041b6d524b616d2aec1b33862d7d31a47b348532a1ee81b9e1be1848e1                                                                              0.0s=> => exporting manifest list sha256:5d0f37e811253261018c333cd8af7723277b7000211499349c22b26fcd8c963c                                                                       0.0s=> => pushing layers                                                                                                                                                        5.8s=> [auth] yebax/flask-redis:pull,push token for registry-1.docker.io                                                                                                        0.0s

可以再打开一个Powershell,输入 docker container ls查看,出自动出现一个容器,用来构多架构建镜像。

PS C:\Users\柏杉\Downloads\flask-redis-master> docker container ls
CONTAINER ID   IMAGE                           COMMAND       CREATED         STATUS         PORTS     NAMES
54573517ab80   moby/buildkit:buildx-stable-1   "buildkitd"   7 seconds ago   Up 5 seconds             buildx_buildkit_mybuilder0

上传成功,tag里面有多架构版本。

【Docker系列】 Docker 多架构支持 和 Docker Buildx 构建多架构相关推荐

  1. Docker系列(二十四)——Docker实例六Docker安装Redis实例

    < Docker实例三Docker安装Redis实例 > 前言 在前面一篇文章种,完成了 < Docker安装MongoDB实例 >,本篇将继续镜像安装教程,并完成Docker ...

  2. Docker系列之二:基于容器的自动构建

    自动构建系统是从美团的自动部署系统发展出来的一个新功能.每当开发人员提交代码到仓库后,系统会自动根据开发人员定制的构建配置,启动新的Docker容器,在其中对源代码进行构建(build),包括编译(如 ...

  3. docker系列之在win7上安装docker

    当VS Code上出现sql server连接成功的提示,我像是完成了一件大事一样. 前一阵,她让我装个sql server玩玩,我心想,这还不是小意思么,恰好那会我又在看docker,docker里 ...

  4. docker buildx 构建arm64架构镜像

    文章目录 buildx测试 前提条件 安装 构建镜像 推送http私库问题 docker容器里运行docker buildx 在x86架构下如何打包arm64架构的镜像,docker buildx 是 ...

  5. docker使用buildx构建不同架构镜像

    启用 buildx 插件 要想使用 buildx,首先要确保 Docker 版本不低于 19.03,同时还要通过设置环境变量 DOCKER_CLI_EXPERIMENTAL 来启用.可以通过下面的命令 ...

  6. Docker系列之八:在Dockerfile中使用多段构建Muti-stage build

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

  7. Docker系列之三:使用Docker镜像和仓库

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

  8. Docker系列之五:Volume 卷的使用——以Redis为例

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

  9. Docker镜像的多平台架构支持

    2019独角兽企业重金招聘Python工程师标准>>> Docker 官方镜像现在支持多平台架构 Docker Engine在2017年取得了很大的进展,社区版和企业版进行分开,支持 ...

最新文章

  1. 单精度和半精度混合训练
  2. php7 curl_init(),php7.3-curl_init获取301、302跳转后的数据
  3. 在Windows Server2016中安装SQL Server2016(转)
  4. VUE计算属性关键词: computed
  5. 包管理和环境管理软件Anaconda
  6. “双十一”背后,阿里的技术到底有多“牛”?
  7. 第4章 最基础的分类算法-k近邻算法 kNN 学习笔记 上
  8. wechat微信模板消息推送demo
  9. 光储直柔配电系统浅析
  10. x86 android 显卡 tablet2,随心而变 ThinkPad Tablet 2评测
  11. 华为2020校招-数字化IT应用工程师-凉经
  12. gitea 手动编译过程,以及踩坑记录
  13. nginx的 ngx.var ngx.ctx ngx.req
  14. 300色 柔和色彩渐变色卡(十六进制)
  15. 定义一个矩形类Rectangle:(知识点:对象的创建和使用)
  16. Android系统如何修改默认打开程序
  17. Spring Security系列(11)- Security5.0版本Oauth2开放平台环境搭建
  18. 安装win和xp双系统 若干问题
  19. DPI、PPI、DP、PX 的详细计算方法及算法来源是什么
  20. DELL新电脑卡在联网进不去系统,找不到硬盘解决方法

热门文章

  1. 用python代码测试你的肥胖指数
  2. ICS大作业论文-2021春
  3. 全面解决Generic host process for win32 services遇到问题需要关闭
  4. 如何彻底删除91助手
  5. QQ的第三方授权和取消第三方授权
  6. 《穷爸爸和富爸爸》《思考致富》读后感
  7. AdblockPlus 过滤列表
  8. Linux和Mac下获取文件CRC/MD5/SHA1/SHA256
  9. ros中Odom话题与odom坐标系的理解
  10. AUTOSAR DEM Introduction