如何构建多种系统架构支持的 Docker 镜像

如何构建多种系统架构支持的 Docker 镜像

1.概述

我们知道使用镜像创建一个容器,该镜像必须与 Docker 宿主机系统架构一致,例如 Linux x86_64 架构的系统中只能使用 Linux x86_64 的镜像创建容器

例如我们在 Linux x86_64 中构建一个 username/test 镜像

FROM alpine

CMD echo 1

构建镜像后推送到 Docker Hub,之后我们尝试在树莓派 Linux arm64v8 中使用这个镜像

docker run -it --rm username/test

可以发现这个镜像根本获取不到


2.解决方案

golang:alpine 官方镜像为例,它有一个 manifest 列表 (manifest list)

当用户获取一个镜像时,Docker 引擎会首先查找该镜像是否有 manifest 列表,如果有的话 Docker 引擎会按照 Docker 运行环境(系统及架构)查找出对应镜像(例如 golang:alpine)。如果没有的话会直接获取镜像

我们可以使用 docker manifest inspect golang:alpine 查看这个 manifest 列表的结构:

在这里插入图片描述

可以看出 manifest 列表中包含了不同系统架构所对应的镜像 digest 值,这样 Docker 就可以在不同的架构中使用相同的 manifest (例如 golang:alpine) 获取对应的镜像


3.使用manifest案例

1、首先在 Linux x86_64 构建 username/x8664-test 镜像。并在 Linux arm64v8 中构建 username/arm64v8-test 镜像,构建好之后推送到 Docker Hub

2、创建 manifest 列表

docker manifest create username/test \
      username/x8664-test \
      username/arm64v8-test

3、设置 manifest 列表

docker manifest annotate username/test \
      username/x8664-test \
      --os linux --arch x86_64
docker manifest annotate username/test \
      username/arm64v8-test \
      --os linux --arch arm64 --variant v8

4、查看验证 manifest 列表

docker manifest inspect username/test

5、推送 manifest 列表

docker manifest push username/test

6、测试

我们在 Linux x86_64 Linux arm64v8 中分别执行 $ docker run -it --rm username/test 命令,发现可以正确的执行

相关推荐

  1. 构建支持 gpu jupyterlab docker 镜像

    2024-02-05 07:02:06       34 阅读
  2. 如何构建自己Docker镜像

    2024-02-05 07:02:06       27 阅读
  3. Docker 项目如何使用 Dockerfile 构建镜像

    2024-02-05 07:02:06       35 阅读
  4. Docker面试整理-如何进行Docker镜像构建和发布?

    2024-02-05 07:02:06       13 阅读
  5. Docker 镜像构建最佳做法

    2024-02-05 07:02:06       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-05 07:02:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-05 07:02:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-05 07:02:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-05 07:02:06       20 阅读

热门阅读

  1. vue2混入声明组件、交互流程

    2024-02-05 07:02:06       26 阅读
  2. vue学习——集成sass

    2024-02-05 07:02:06       30 阅读
  3. C++ Primer 第 5 版 第 5 章习题答案

    2024-02-05 07:02:06       23 阅读
  4. 网易和腾讯面试题精选---缓存面试问题和答案

    2024-02-05 07:02:06       29 阅读
  5. vue-element-admin npm install 失败解决

    2024-02-05 07:02:06       25 阅读
  6. Github使用教程

    2024-02-05 07:02:06       40 阅读
  7. 开源计算机视觉库OpenCV详细介绍

    2024-02-05 07:02:06       22 阅读
  8. CSS两侧固定,中间自适应

    2024-02-05 07:02:06       23 阅读
  9. idea后端几个层

    2024-02-05 07:02:06       30 阅读
  10. 可基于udp的可靠传输协议kcp介绍,C++测试kcp示例

    2024-02-05 07:02:06       28 阅读