mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-10 11:54:37 +00:00
Fix and update
This commit is contained in:
@@ -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 的详细信息,如上文所示。
|
||||
|
||||
Reference in New Issue
Block a user