Fix and update

This commit is contained in:
baohua
2026-02-09 11:34:35 -08:00
parent e669ee0fe8
commit 63377d0431
136 changed files with 2146 additions and 262 deletions

View File

@@ -8,6 +8,8 @@
### `Dockerfile` 新增指令详解
BuildKit 引入了多项新指令旨在优化构建缓存和安全性以下将详细介绍这些指令的用法
使用 BuildKit 我们可以使用下面几个新的 `Dockerfile` 指令来加快镜像构建
要使用最新的 Dockerfile 语法特性建议在 Dockerfile 开头添加语法指令
@@ -51,6 +53,7 @@ COPY --from=builder /app/dist /app/dist
```docker
## syntax=docker/dockerfile:1
FROM node:alpine as builder
WORKDIR /app
@@ -65,6 +68,7 @@ COPY src /app/src
RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
## --mount=type=cache,target=/app/dist,id=my_app_dist,sharing=locked \
npm run build
FROM nginx:alpine
@@ -72,6 +76,7 @@ FROM nginx:alpine
## COPY --from=builder /app/dist /app/dist
## 为了更直观的说明 from 和 source 指令,这里使用 RUN 指令
RUN --mount=type=cache,target=/tmp/dist,from=builder,source=/app/dist \
# --mount=type=cache,target/tmp/dist,from=my_app_dist,sharing=locked \
mkdir -p /app/dist && cp -r /tmp/dist/* /app/dist
@@ -101,6 +106,7 @@ RUN --mount=type=cache,target=/tmp/dist,from=builder,source=/app/dist \
```docker
## syntax=docker/dockerfile:1
RUN --mount=type=bind,from=php:alpine,source=/usr/local/bin/docker-php-entrypoint,target=/docker-php-entrypoint \
cat /docker-php-entrypoint
```
@@ -111,6 +117,7 @@ RUN --mount=type=bind,from=php:alpine,source=/usr/local/bin/docker-php-entrypoin
```docker
## syntax=docker/dockerfile:1
RUN --mount=type=tmpfs,target=/temp \
mount | grep /temp
```
@@ -121,6 +128,7 @@ RUN --mount=type=tmpfs,target=/temp \
```docker
## syntax=docker/dockerfile:1
RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \
cat /root/.aws/credentials
```
@@ -135,6 +143,7 @@ $ docker build -t test --secret id=aws,src=$HOME/.aws/credentials .
```docker
## syntax=docker/dockerfile:1
FROM alpine
RUN apk add --no-cache openssh-client
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
@@ -150,6 +159,8 @@ $ docker build -t test --ssh default=$SSH_AUTH_SOCK .
### docker compose build 使用 BuildKit
Docker Compose 同样支持 BuildKit这使得多服务应用的构建更加高效
Docker 23.0 BuildKit 已默认启用无需额外配置如果使用旧版本可设置 `DOCKER_BUILDKIT=1` 环境变量启用
### 官方文档

View File

@@ -2,6 +2,8 @@
### 使用
Buildx 的使用非常直观绝大多数情况下可以替代 `docker build` 命令
你可以直接使用 `docker buildx build` 命令构建镜像
```bash
@@ -18,9 +20,11 @@ Buildx 使用 [BuildKit 引擎](8.1_buildkit.md) 进行构建,支持许多新
```bash
## 从 docker-compose.yml 构建所有服务
$ docker buildx bake
## 仅构建指定目标
$ docker buildx bake web
```

View File

@@ -4,6 +4,8 @@ Docker 镜像可以支持多种系统架构,这意味着你可以在 `x86_64`
### Manifest List 是什么
为了理解多架构镜像的原理我们需要先了解 Manifest List 的概念
Manifest list 是一个包含了多个指向不同架构镜像的 manifest 的文件当你拉取一个支持多架构的镜像时Docker 会自动根据你当前的系统架构选择并拉取对应的镜像
例如官方的 `hello-world` 镜像就支持多种架构你可以使用 `docker manifest inspect` 命令来查看它的 manifest list
@@ -40,6 +42,8 @@ $ docker manifest inspect hello-world
### 使用 `docker buildx` 构建多架构镜像
`docker buildx` 是构建多架构镜像的最佳实践工具它屏蔽了底层的复杂性提供了一键构建多架构镜像的能力
Docker 19.03+ 版本中`docker buildx` 是推荐的用于构建多架构镜像的工具它使用 `BuildKit` 作为后端可以大大简化构建过程
#### 新建 `builder` 实例
@@ -57,6 +61,7 @@ $ docker buildx inspect --bootstrap
```dockerfile
## Dockerfile
FROM --platform=$TARGETPLATFORM alpine
RUN uname -a > /os.txt
@@ -96,26 +101,33 @@ COPY bin/dist-${TARGETOS}-${TARGETARCH} /dist
ENTRYPOINT ["/dist"]
```
### 使用 `docker manifest` (底层工具)
### 使用 `docker manifest`底层工具
除了 `docker buildx`我们也可以直接操作 Manifest List 来手动组合不同架构的镜像
`docker manifest` 是一个更底层的命令可以用来创建检查和推送 manifest list虽然 `docker buildx` 在大多数情况下更方便但了解 `docker manifest` 仍然有助于理解其工作原理
#### 创建 manifest list
运行以下命令
```bash
## 首先,为每个架构构建并推送镜像
$ docker buildx build --platform linux/amd64 -t your-username/my-app:amd64 . --push
$ docker buildx build --platform linux/arm64 -t your-username/my-app:arm64 . --push
## 然后,创建一个 manifest list将它们组合在一起
$ docker manifest create your-username/my-app:latest \
--amend your-username/my-app:amd64 \
--amend your-username/my-app:arm64
## 最后,推送 manifest list
$ docker manifest push your-username/my-app:latest
```
#### 检查 manifest list
你可以使用 `docker manifest inspect` 来查看一个 manifest list 的详细信息如上文所示
你可以使用 `docker manifest inspect` 来查看一个 manifest list 的详细信息如上文所示

View File

@@ -3,3 +3,11 @@
Docker Buildx 是一个 docker CLI 插件其扩展了 docker 命令支持 [Moby BuildKit](8.1_buildkit.md) 提供的功能提供了与 docker build 相同的用户体验并增加了许多新功能
> 该功能仅适用于 Docker v19.03+ 版本
## 本章内容
本章将详细介绍 Docker Buildx 的使用包括
* [使用 BuildKit 构建镜像](8.1_buildkit.md)
* [使用 Buildx 构建镜像](8.2_buildx.md)
* [构建多种系统架构支持的 Docker 镜像](8.3_multi-arch-images.md)