国产化大潮中,跨平台构建镜像,buildx来助力

什么是Docker?

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

什么是Buildx?

Docker是一种流行的部署工具,使我们能够打包和运行应用程序。由于采用率很高,需要根据不同的要求扩展功能。因此,为了实现这一目标,第三方使用了docker 插件。

例如,如果我们希望数据能够跨不同主机保存数据,我们可以使用插件。另一个常用的插件是Docker buildx。它通过使用 BuildKit 构建器扩展了镜像的构建能力。因此,通过该插件,我们可以为不同的平台和架构构建镜像。此外,它还支持具有自定义上下文的并行多阶段构建。

1.使用docker buildx的前提

首先,为了运行buildx ,我们需要安装 Docker。Docker buildx支持从Docker engine19.00 开始提供。

首先检查我们的 Docker 版本:

[root@centos ~]# docker --version
Docker version 24.0.5, build ced0996
[root@centos ~]#

2.升级Docker服务的主机内核

docker server端宿主机的内核为5.x ( centos7 , 默认内核版本3.10)

##升级操作
### 安装kernel源
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
### 查看可用内核
yum  --disablerepo="*"  --enablerepo="elrepo-kernel"  list  available
### 安装长期支持稳定版
yum  --enablerepo=elrepo-kernel  install  -y  kernel-lt
### 查看内核列表编号
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
### 修改默认内核
grub2-set-default 0
### 重启
reboot

3.准备qemu环境,宿主机执行

# -p 为持久生效
docker run --rm --privileged docker.bamboocloud.com/internet/multiarch/qemu-user-static --reset -p yes
# 如果上一步没报错 
cat /proc/sys/fs/binfmt_misc/qemu-aarch64
# 输出应该如下 (3.x内核 -p参数会报错且flags一项为空)
enabled
interpreter /usr/bin/qemu-aarch64-static
flags: F
offset 0
magic 7f454c460201010000000000000000000200b700
mask ffffffffffffff00fffffffffffffffffeffffff

镜像:资源下载

4.使用buildx构建镜像

# 创建一个实例
docker buildx create --name buildx --driver-opt=image=docker.bamboocloud.com/library/moby/buildkit:buildx-stable-1 --use
# 查看支持的平台
docker buildx inspect --bootstrap # 如果成功的话,如下图所示,platforms会有多个架构,否则只有amd64和386
# 构建
## 构建的时候会在docker server端,在测试场景则是docker-dind里面运行一个容器(第一步指定的那个buildkit镜像),多平台构建实际是由该容器完成,所以镜像的下载也是由该容器完成。如果私有仓库域名是用的hosts指定,可能会遇到拉取失败
#docker buildx build --platform=linux/amd64,linux/arm64 -f Dockerfile .
docker buildx build --push --provenance=false -t s4.aliyun.com/nginx:1.24 --platform=linux/amd64,linux/arm64 .
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咫尺&天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值