最近需要构建镜像摆设到服务器上,但是我电脑的体系平台构建出来的镜像在租的服务器上无法运行,厥后发现原来是平台不一样。接着我学习了怎样用docker buildx构建多平台的镜像,下面是我总结的条记。
1. 检察内核版本
检察内核版本的下令:
- uname -a
- uname -r
- cat /proc/version
- lsb_release -a
复制代码 这是我当地的内核版本:
可以看到我的条记本内核是arm64的:
再检察一下我们要摆设的服务器的内核:
可以看到我租的阿里云服务器内核是amd64的:
2. docker buildx安装使用
2.1 docker buildx版本检察以及安装
先检察docker的版本(docker 版本V19.0以上才支持docker buildx):
检察有没有安装docker buildx(因为我用的是Mac桌面版的Docker,所以默认已经开启):
如果没有安装的话,实行以下下令安装:
启用docker buildx:
- export DOCKER_CLI_EXPERIMENTAL=enabled
复制代码 2.2 docker buildx构建器创建
检察构建器有哪些:
我当地的docker buildx目前有以下构建器:
运行一个支持多平台内核的容器(如果是桌面版的可以跳过该步骤):
- $ 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
复制代码
检察刚刚创建的构建器(但是可以看到状态是不可用的):
我们来初始化一下这个构建器:
- docker buildx inspect --bootstrap mybuilder-cn-test
复制代码
再次检察,可以看到已经是running状态了:
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
复制代码
可以看到已经构建乐成了:
检察镜像详细信息:
- docker inspect myerp:v1.0
复制代码 可以检察到我们已经构建出一个amd64 的镜像了:
3. 镜像打包到新环境运行
镜像打包:
- docker save -o myerp.zip myerp:v1.0
复制代码
上传到新的服务器之后加载镜像:
最后就可以用镜像创建并且运行容器,以下表明容器已经乐成运行起来了:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |