【无标题】如何使用Docker构建多平台镜像?

这篇具有很好参考价值的文章主要介绍了【无标题】如何使用Docker构建多平台镜像?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

如何构建多平台镜像?
工作原理
准备构建环境
开启Linux内核对多处理器架构的支持 创建使用"docker-container"驱动的Buildx实例
调整Dockerfile
调整构建命令
在不同镜像仓库之间传输镜像
如何构建多平台镜像?

如果你还不了解什么是多平台构建,请先阅读一下Docker构建多平台镜像的文档:

https://docs.docker.com/build/building/multi-platform/

官方文档里给出了3种多平台镜像的构建方式,本文推荐使用第3种方式,即Dockerfile多平台构建的方式。采用这种方式的好处是不用针对每种平台准备一份Dockerfile,只需要调整构建镜像的参数就能同时支持多平台构建。

工作原理

要让Docker支持多平台构建,需要满足以下几个条件:

Linux内核开启多处理器架构支持
构建时使用基于"docker-container"驱动的Buildx实例
使用"docker buildx build"命令构建镜像
构建命令必须指定"–platform"参数
Dockerfile中,“FROM"指令必须设置”-platform=${TARGETPLATFORM}"
Docker构建多平台镜像实际上是借助BuildKit来实现的,并且需要创建一个基于"docker-container"驱动的Buildx实例。创建实例时,Docker会创建一个容器作为虚拟节点,用来执行构建,并存放构建后产生的镜像。

当同时指定了"amd64"和"arm64"平台构建镜像时,BuildKit会分别启动两个容器,一个容器构建"amd64"架构的镜像,另一个容器构建"arm64"架构的镜像。两个容器的构建过程相同,使用的Dockerfile内容也相同。BuildKit构建完两个镜像后,会创建一个Manifest List对象,然后把"amd64"和"arm64"的镜像记录到manifest中,接着用构建时的"-–tag"参数作为manifest的名称。如果把"–tag"指定的镜像名推送到Registry,BuildKit会将Manifest对象、两个架构的镜像都推到Registry。

需要注意,BuildKit创建的镜像和Manifest都仅存在于Buildx实例中,在宿主机上是看不到这些镜像的。

准备构建环境

构建多平台镜像最难处理的地方在于准备构建环境

开启Linux内核对多处理器架构的支持
Docker的官方文档已经给出具体方案,只需要执行以下命令即可。但前提是Linux内核版本必须>=4.8,如果不满足条件,升级内核的操作可自行谷歌

命令行

docker run --privileged --rm tonistiigi/binfmt --install all

执行完成后,可以执行以下命令进行检查

docker buildx ls

“平台”中出现"linux/arm64"字样即表示开启成功,输出内容如下:

NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS

default docker

default default running v0.11.6 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

创建使用"docker-container"驱动的Buildx实例
Docker的官方文档已给出具体方案,只需要执行以下命令即可。

命令行

docker buildx create --name mybuilder --driver docker-container --use

执行完成后,可以使用以下命令进行检查

docker buildx ls

输出内容如下

NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS

mybuilder * docker-container

mybuilder0 unix:///var/run/docker.sock running v0.11.6 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

default docker

default default running v0.11.6 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

调整Dockerfile

Dockerfile只需要加上"–platform=${TARGETPLATFORM}"参数,示例:

Dockerfile

FROM --platform=${TARGETPLATFORM} ubuntu:20.04

调整构建命令

多平台构建时,不能直接使用"docker build"命令,而是使用"docker buildx build"命令。

这是因为"docker build"每次仅支持构建单一平台的镜像,而"docker buildx build"才支持单命令同时构建多平台镜像。

完整的构建命令如下:

docker buildx build \

–platform linux/amd64,linux/arm64 \

–tag “镜像名称”

如需构建完成后自动推送镜像,可以增加"–push"参数:

docker buildx build \

–platform linux/amd64,linux/arm64 \

–push \

–tag “镜像名称”

在不同镜像仓库之间传输镜像

命令行

skopeo copy --all docker://源镜像名 docker://目标镜像名

完成以上步骤,就可以使用Docker构建多平台镜像啦!文章来源地址https://www.toymoban.com/news/detail-516291.html

到了这里,关于【无标题】如何使用Docker构建多平台镜像?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker使用buildx构建多平台(x86,arm64)构架镜像

    docker目前使用版本为Server Version: 20.10.7,添加配置支持buildx docker版本较低时,请升级docker版本 有部分docker未带有,比如arm版本,则需要单独下载文件: 重启docker 系统环境要求 如果版本较低,需要升级内核 安装binfmt,支持的平台 安装编译时需要支持的平台,这里选择所有 bin

    2024年02月02日
    浏览(75)
  • 【如何使用Docker将容器打包成镜像】

    本文主要讲解如何将现有的容器打包为镜像以及如何将现有的镜像打包为tar文件并在新环境中重新载入。 docker提供了 commit 命令,可将容器打成镜像,其命令格式如下: 我们首先运行 docker images 去查看现有的镜像,当前镜像只有两个。 然后运行 docker ps -a 去查看当前容器。 执

    2023年04月18日
    浏览(46)
  • Docker 项目如何使用 Dockerfile 构建镜像?

    1.1、Docker 简介 :讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。 本文已收录于,我的技术网站 ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等

    2024年01月16日
    浏览(73)
  • Docker学习路线7:构建容器镜像

    容器镜像是可执行的软件包,包括运行应用程序所需的所有内容:代码、运行时、系统工具、库和设置。通过构建自定义镜像,您可以在任何支持Docker的平台上无缝地部署应用程序及其所有依赖项。 构建容器镜像的关键组件是 Dockerfile 。它本质上是一个包含有关如何组装 D

    2024年02月16日
    浏览(53)
  • 手动构建自己的docker容器镜像实战

    之前的实战中,我们实战中,我们使用的镜像都是镜像仓库已有的镜像。 已有的镜像都是别人已经开发好上传的。今天我们一起来看看如何构建自己的镜像并上传到镜像仓库中。 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉

    2023年04月10日
    浏览(37)
  • Docker入门流程(创建容器到构建镜像)

    平时我们经常会遇到在自己电脑上运行的代码,在别人的电脑上运行就出现莫名其妙的问题,这种大多是因为代码”水土不服“,不同电脑的软件版本和依赖库不同,Docker的使用可以很好地解决这个问题。简单来说,Docker可以把 代码和代码运行的环境 一把打包,构建一个容

    2024年02月08日
    浏览(44)
  • 如何使用docker-compose.yml构建镜像?

    使用 docker-compose.yml 文件来构建镜像,你需要在该文件中对你的服务进行定义,然后使用 docker-compose build 命令。 假设你有一个 docker-compose.yml 文件,它定义了一个名为 “web” 的服务,并指定了构建该服务所需的 Dockerfile 的路径,如下所示: 在这个例子中, build: . 指出 Dock

    2024年02月12日
    浏览(82)
  • Docker构建jar包镜像并运行容器

    Docker需要提前安装,不懂的参考: Centos7操作Docker_JohnGene的博客-CSDN博客_centos7 操作docker 安装Docker安装Docker官方源:yum-config-manager –add-repo http://download.docker.com/linux/centos/docker-ce.repo更新源:yum makecache fast安装:yum install docker-ce启动并设为开机自启:systemctl enable docker #设为开机

    2024年02月09日
    浏览(63)
  • Docker进阶:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月09日
    浏览(55)
  • Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月10日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包