前言

Buildx(BuildKit)是Docker官方提供的一个高级的构建引擎,可以通过多个后端驱动程序实现更强大和灵活的Docker镜像构建功能。以 Node.js 应用为例,演示Buildx构建Docker镜像的主要流程:

一、准备Dockerfile

1.创建一个包含Node.js应用的目录,假设应用文件结构如下:

1
2
3
4
5
myapp/
|-- Dockerfile
|-- app.js
|-- package.json
|-- package-lock.json

2.在该目录中新建一个Dockerfile文件(无文件后缀),编写如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 使用 Node.js 14 作为基础镜像
FROM node:14

# 设置工作目录为/app
WORKDIR /app

# 复制package.json和package-lock.json到工作目录
COPY package*.json ./

# 安装应用依赖
RUN npm install

# 复制应用代码到工作目录
COPY . .

# 指定应用程序监听的端口
EXPOSE 3000

# 启动应用
CMD ["node", "app.js"]

二、新建builder

1
2
3
4
5
6
7
8
9
10
11
# 安装Docker CLI插件
docker buildx install

# 使用默认配置新建builder,
docker buildx create --use

# 适用于国内环境
docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master

# 适用于腾讯云环境
docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master-tencent
  • docker buildx create:创建新的builder。
  • --use:将新建的builder,设置为当前活动的builder。
  • --name=mybuilder-cn:指定新建builder的名称为mybuilder-cn,可自行设定。
  • --driver docker-container:指定builder使用docker-container作为驱动程序。
  • --driver-opt image=dockerpracticesig/buildkit:master:设置特定的BuildKit镜像。

三、切换/查看builder信息

1
2
3
4
5
# 切换到名为“mybuilder-cn”的builder
docker buildx use mybuilder-cn

# 查看当前builder的详细信息
docker buildx inspect

四、构建镜像

1
2
3
4
5
6
7
8
# “<platform1>,<platform2>,...”替换成“要构建的目标平台”
docker buildx build --platform <platform1>,<platform2>,... -t myusername/hello .

# 以x86_64和arm64架构举例
docker buildx build --platform linux/amd64,linux/arm64 -t myusername/hello .

# 检查名为“myusername/hello”的Docker镜像详细信息
docker buildx imagetools inspect myusername/hello
  • --platform linux/amd64,linux/arm64:指定构建的两个平台——x86_64、ARM64
  • -t myusername/hello:指定构建的Docker镜像的名称和标签——myusername是Docker Hub用户名、hello是镜像名
  • .:构建上下文的路径

五、将镜像推送到Docker Hub

1
2
3
4
5
# 确保仓库账户已登录
docker buildx build --platform linux/amd64,linux/arm64 -t “Docker Hub用户名”/“镜像名称”:“标签” --push .

# 示例:myusername/hello:v1.0
docker buildx build --platform linux/amd64,linux/arm64 -t myusername/hello:v1.0 --push .

六、运行构建的Docker镜像

1
docker run -it --rm myusername/hello:v1.0