Docker 打包多平台镜像
1. 首先激活 Docker 的多平台构建功能
Docker 的多平台构建功能需要 Docker BuildKit 的支持,BuildKit 是 Docker 的一个实验性功能,需要手动启用。
临时开启:在执行构建命令前添加环境变量,如 DOCKER_BUILDKIT=1 docker buildx build -t 镜像:标签 --platform linux/arm64 .
配置文件开启:在 Docker 的配置文件中添加以下内容:
vim /etc/docker/daemon.json
#添加配置
{
"experimental": true
}
2. 安装 docker buildx
buildx 是 Docker 的扩展,通常默认包含在 Docker Desktop 中,但如果你在 Linux 上使用 Docker 或需要手动安装,可以参考以下方法:
在 Docker Desktop 上:
Docker Desktop 自带了 buildx,你可以通过以下命令检查是否已经安装:
docker buildx version
如果已经安装,你会看到 buildx 的版本信息,如果没有安装,你可以通过以下命令安装:
docker buildx install
3. 使用 builder
docker buildx create --name mybuilder --use
--name mybuilder
:指定 builder 的名称为mybuilder
。--use
将mybuilder
设置为默认 builder。
4. 查看支持的构建器
docker buildx inspect --bootstrap
--bootstrap
:自动配置 builder,使其支持多平台构建。
5. 构建镜像
docker buildx build --platform linux/amd64,linux/arm64 -t myimage:latest --push .
关键参数解释:
--platform
:指定要构建的目标平台。例如linux/amd64
用于构建x86_64
架构的 Linux 镜像。如果你要支持多平台,还可以传入多个架构,如linux/amd64
,linux/arm64
。-t
:标记镜像的名称和标签,例如 hefengshun/https-ssl:1.0.0。--push
:将构建的镜像推送到镜像仓库。--load
:将构建的镜像加载到本地 Docker 镜像列表中,这样可以在本地直接运行。--cache-from
和--cache-to
(可选):这两个参数用于缓存构建,减少后续构建时间,特别是在使用 CI/CD 构建管道时。
常见问题与注意点:
没有 --push 或 --load:如果你没有指定这两个参数,镜像不会被推送到仓库或加载到本地,默认是将构建结果保留在缓存中,这就是为什么你在 docker images 中看不到镜像的原因。
证书路径:确保 Dockerfile 中的路径和本地文件路径相对应,特别是 SSL 证书和配置文件的路径。
多平台支持:buildx 的一个重要功能是多平台构建,确保你启动了 buildx 实例,并使用了 --platform 参数来构建适用于不同架构的镜像。
6. 关于打包时的网络问题
如果使用代理,需要配置 Docker 的代理,在 Docker Desktop 中,可以在设置中找到代理设置,然后配置代理服务器地址和端口 ❌ 这个配置了好像没什么用。
打包时代理则需要打开增强模式,否则会报错,但是打开增强模式后,网页好像就打不开,打开网页需要关闭增强模式 🌟。
而且切换代理后,需要重新开一个 shell 窗口,否则代理配置不生效 🤔, 或者有上一次配置代理的缓存。