Docker多架构构建镜像
docker多架构构建镜像
- what: docker多架构构建镜像
- where: centos7 x86 arm64
- when: 2022-2-14
- who: JRT
- why: 记录
- how:
1.安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.28.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
3.安装常用依赖
yum install vim wget git curl lrzsz -y
4.开启实验特性
cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.baidubce.com",
"https://docker.mirrors.ustc.edu.cn/"
],
"experimental": true
}
重加载服务配置并重启docker
#重新加载服务的配置文件
systemctl daemon-reload
#重启docker
systemctl restart docker
#查看docker状态
systemctl status docker
#测试manifest是否开启
docker manifest
#查看docker是否开启experimental功能
docker version 或docker system info
[root@ecs-40a8 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:00 2021
OS/Arch: linux/arm64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
Git commit: 459d0df
Built: Mon Dec 13 11:43:46 2021
OS/Arch: linux/arm64
Experimental: true
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
5.制作多架构镜像
以自己为例,dockerhub仓库为jrt101,现在想制作mrdoc:v4的多架构镜像
分别在x86和arm环境构建mrdoc:v4镜像,制作完后没问题,分别修改tag
docker tag b0e1fd31e99e jrt101/mrdoc-x86_64:v4
docker tag 978af99fd151 jrt101/mrdoc-arm64:v4
分别在两个环境分别将两个镜像上传至dockerhub仓库
docker login
docker push jrt101/mrdoc-x86_64:v4
docker push jrt101/mrdoc-arm64:v4
制作多架构镜像
# 创建一个新的manifest,指定多架构镜像的名称,和具体的不同架构的镜像名称
[root@ecs-40a8 doc]# docker manifest create --insecure jrt101/mrdoc:v4 jrt101/mrdoc-x86_64:v4 jrt101/mrdoc-arm64:v4
Created manifest list docker.io/jrt101/mrdoc:v4
#annotate 加注释
# 声明不同架构镜像对应的操作系统和cpu架构类型,其中x86_64需要用amd64来指定
[root@ecs-40a8 doc]# docker manifest annotate jrt101/mrdoc:v4 jrt101/mrdoc-x86_64:v4 --os linux --arch amd64
[root@ecs-40a8 doc]# docker manifest annotate jrt101/mrdoc:v4 jrt101/mrdoc-arm64:v4 --os linux --arch arm64
# 将manifest从本地推送到私用仓库中 没有大小 是一个软连接
[root@ecs-40a8 doc]# docker manifest push --insecure jrt101/mrdoc:v4
Pushed ref docker.io/jrt101/mrdoc@sha256:a6318505ea1b7882f212c5e1a55352347f57dca0e6dd1cc0c67c60948c1674a6 with digest: sha256:a6318505ea1b7882f212c5e1a55352347f57dca0e6dd1cc0c67c60948c1674a6
Pushed ref docker.io/jrt101/mrdoc@sha256:b068bbaf8a7d01ab20d77d8c3d9aa4b9f6b85ad8a189b2d1a0e0018906160b55 with digest: sha256:b068bbaf8a7d01ab20d77d8c3d9aa4b9f6b85ad8a189b2d1a0e0018906160b55
sha256:c3f9aa7e18f980133a42cb8880232d9df5bce1e5cc0ffd618c3e347d0f7b8442
[root@ecs-40a8 doc]# echo $?
0
[root@ecs-40a8 doc]#