Docker buildx构建多平台镜像-基于Mac Book
最近需要构建镜像摆设到服务器上,但是我电脑的体系平台构建出来的镜像在租的服务器上无法运行,厥后发现原来是平台不一样。接着我学习了怎样用docker buildx构建多平台的镜像,下面是我总结的条记。1. 检察内核版本
检察内核版本的下令:
uname -a
uname -r
cat /proc/version
lsb_release -a 这是我当地的内核版本:
uname -a 可以看到我的条记本内核是arm64的:
https://i-blog.csdnimg.cn/direct/ff33aa22993c47c5b95f70496d9f5e5e.png
再检察一下我们要摆设的服务器的内核:
lsb_release -a 可以看到我租的阿里云服务器内核是amd64的:
https://i-blog.csdnimg.cn/direct/2a583618e18e49a1ae7795c6276072d6.png
2. docker buildx安装使用
2.1 docker buildx版本检察以及安装
先检察docker的版本(docker 版本V19.0以上才支持docker buildx):
docker -V https://i-blog.csdnimg.cn/direct/4a464b8a7e65455789d72c2a5b802487.png
检察有没有安装docker buildx(因为我用的是Mac桌面版的Docker,所以默认已经开启):
docker buildx version https://i-blog.csdnimg.cn/direct/1b9b38b576914d84912987a82ae5cd19.png
如果没有安装的话,实行以下下令安装:
docker buildx install 启用docker buildx:
export DOCKER_CLI_EXPERIMENTAL=enabled 2.2 docker buildx构建器创建
检察构建器有哪些:
docker buildx ls 我当地的docker buildx目前有以下构建器:
https://i-blog.csdnimg.cn/direct/ed17a6157ea9410197dcdb0a5aebaf8e.png
运行一个支持多平台内核的容器(如果是桌面版的可以跳过该步骤):
$ docker run --rm --privileged tonistiigi/binfmt:latest --install all 接下来我们来创建一个构建器(dockerpracticesig/buildkit:master 是一个加快镜像):
docker buildx create --use --name=mybuilder-cn-test --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master https://i-blog.csdnimg.cn/direct/77d90b8dad2b44e2a0bed3f70604039c.png
检察刚刚创建的构建器(但是可以看到状态是不可用的):
https://i-blog.csdnimg.cn/direct/b058aa5d9e3c4edaa9a0a9f36f710f97.png
我们来初始化一下这个构建器:
docker buildx inspect --bootstrap mybuilder-cn-test https://i-blog.csdnimg.cn/direct/82945599997c47f2a292f56508c01b67.png
再次检察,可以看到已经是running状态了:
https://i-blog.csdnimg.cn/direct/2adb911f21c94a36a683bc63cc2ee868.png
2.3 docker buildx构建多平台镜像
设置使用的构建器:
docker buildx use mybuilder-cn-test 我们先用一个python项目myerp举个例子:
Dockerfile:
# 使用官方 Python 基础镜像
FROM --platform=linux/amd64 centos:7
# 设置工作目录
WORKDIR /app
# 复制项目文件到容器中
COPY . /app
# 安装设置清华源并依赖包
# 暴露端口
EXPOSE 8081
CMD ["/app/install.sh"]
# 启动应用
CMD ["/app/start.sh"] install.sh
python3 -m venv ./venv
chmod +x ./venv/bin/activate
source ./venv/bin/activate
./venv/bin/activate
./venv/bin/python3 -m pip install --upgrade pip
./venv/bin/pip3 install -r ./requirements.txt
./venv/bin/python3 app.py 构建多平台镜像:
--platform 后面跟镜像需要支持的Linux内核版本
-t 后面跟镜像的名称
. 为Dockerfile所在的目录
--load:加载到当地镜像中
--push:推送到远程镜像库
docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t myerp:v1.0 . --load https://i-blog.csdnimg.cn/direct/f62893d19ecd467798cc2094ca89e1ff.png
可以看到已经构建乐成了:
https://i-blog.csdnimg.cn/direct/fb3265e166154903811634f1e3114d88.png
检察镜像详细信息:
docker inspect myerp:v1.0
可以检察到我们已经构建出一个amd64 的镜像了:
https://i-blog.csdnimg.cn/direct/d4c37b8430f0484ba4c9785aed5d8ff2.png
3. 镜像打包到新环境运行
镜像打包:
docker save -o myerp.zip myerp:v1.0 https://i-blog.csdnimg.cn/direct/a4da1f3a49cb468f94a21b5c57eac539.png
上传到新的服务器之后加载镜像:
docker load -i myerp.zip https://i-blog.csdnimg.cn/direct/1fff831c3ade4c3c879620bf0aaba8ea.png
https://i-blog.csdnimg.cn/direct/66ebb06144bc4274ac6ec34231988f81.png
最后就可以用镜像创建并且运行容器,以下表明容器已经乐成运行起来了:
https://i-blog.csdnimg.cn/direct/fbf6b04acdb94360b5ccf5383085a19c.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]