Skip to content

Commit 29d0e0b

Browse files
committed
update: the docker related
1 parent 8a1f426 commit 29d0e0b

File tree

3 files changed

+68
-8
lines changed

3 files changed

+68
-8
lines changed

docker/docker-proxy.md

+14-6
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
# docker 代理
22

3-
加速 docker pull 的几种方法
3+
因为中国已屏蔽 docker hub。需要翻墙才能访问。
44

5-
1. 通过 registry-mirror 镜像服务器来加速
6-
2. 通过代理服务来加速
5+
解决方法:
76

8-
## docker for mac
7+
1. 通过 registry-mirror 镜像服务器
8+
2. 通过 http 代理服务
9+
10+
## 不同客户端的配置位置
11+
12+
### docker for mac
913

1014
对于 dokcer for mac 用户,打开设置 - Docker Engine,设置 registry-mirror 配置。
1115

12-
## orbstack
16+
### orbstack
1317

1418
对于 [orbstack](https://orbstack.dev/) 用户,
1519
通过 `orb config docker` 或者在 app 界面的「设置-Docker-Advanced engine config」设置 registry-mirror 配置。
1620
或者,通过 `orb config set network_proxy` 或者在 app 界面的「设置-Network-Proxy」设置代理。
1721

1822
## registry-mirror
1923

20-
因为国内用 docker pull 会非常慢。建议使用 docker 镜像加速
24+
docker [registry-mirror](https://docs.docker.com/docker-hub/image-library/mirror/) 只对 pull 镜像有效
2125

2226
```json
2327
{
@@ -59,3 +63,7 @@
5963
}
6064
}
6165
```
66+
67+
## docker push, docker login 失败
68+
69+
需要通过设置[代理服务](#代理服务)来解决问题。

docker/multi-arch-build.md

+44-2
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ docker buildx commands:
4242

4343
## builder
4444

45-
当前的构建器实例 (builder) 的 driver 是 `docker-container` 或者 `kubernetes` 时,可以构建多架构镜像。
46-
默认的 default builder 是 `docker` driver,而不是 `docker-container` driver。
45+
当构建器实例 (builder) 的 driver 是 `docker-container` 或者 `kubernetes` 时,可以构建多架构镜像。
46+
driver=docker 时,只能构建当前系统架构的镜像。
47+
48+
默认的 builder 是 `docker` driver。你可以使用 `docker buildx ls``docker buildx inspect` 查看详情。
4749

4850
所以你要用 `docker buildx create` 创建自己的构建器实例。`--driver docker-container` 是默认参数,会创建一个基于 `moby/buildkit` 镜像的容器。在这个容器中构建多架构镜像。
4951

@@ -52,6 +54,46 @@ docker buildx commands:
5254
- `docker buildx use` 切换 builder 实例。
5355
- `docker buildx inspect` 查看当前 builder 实例信息。
5456

57+
### builder 配置
58+
59+
当创建 `--driver=docker-container` 构建器后,在该实例里执行的构建操作,不会受到 docker 系统配置的影响。
60+
比如 buildx pull 镜像时,不会受到系统配置的 registry mirror 的影响。
61+
62+
你可以在创建构建器时用 `--buildkitd-config` 参数指定配置,详见[文档](https://docs.docker.com/build/buildkit/configure/)
63+
64+
### 中国环境下的 buildx 配置
65+
66+
由于 docker.io registry 已经被 GFW。pull/push image 都会失败。所以若想在中国环境下操作,有两种常见方案:
67+
68+
#### 使用镜像仓库
69+
70+
这种方法只适用于:只需要 pull image,不用 push image。
71+
72+
1. 准备可用的 registry mirror。例如 `mirror.docker.io`
73+
2. 当前目录下创建 config.toml 文件。内容为
74+
75+
```toml
76+
[registry."docker.io"]
77+
mirrors = ["mirror.docker.io"]`
78+
```
79+
80+
3. 创建 builder: `docker buildx create --name $BUILDER --bootstrap --use --buildkitd-config=./config.toml`
81+
4. 构建镜像 `docker buildx build`
82+
83+
#### 使用 http 代理
84+
85+
这种方法适用于:需要 push/push image。
86+
87+
1. 准备可用的 http 代理。
88+
2. 创建 builder: `docker buildx create --name $BUILDER --bootstrap --use`
89+
3. 构建镜像 `http_proxy=$http_proxy https_proxy=$http_proxy docker buildx build`
90+
91+
注意:如果你的 proxy 代理程序运行在本机上,`$http_proxy` 的值应该是 `http://127.0.0.1:$port`,而不是 `http://host.docker.internal:$port`。
92+
93+
注意:使用 `--driver-opt env.http_proxy` 创建的 builder 实测是无效果的: `docker buildx create --name $BUILDER --bootstrap --use --driver-opt env.http_proxy=$http_proxy --driver-opt env.https_proxy=$http_proxy`。
94+
95+
详见 https://github.com/moby/buildkit/issues/5839
96+
5597
## docker buildx build
5698

5799
`docker buildx build --platform linux/amd64,linux/arm64,linux/386,linux/arm/v7,linux/arm/v6 --push --tag owner/image:version .`

others/tini-in-dockerfile.md

+10
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,13 @@ ENTRYPOINT ["/tini", "--"]
2222
3. tini 依赖 libc。
2323
- 当你使用 alpine 作为 base image 时,默认是没有安装 libc 的。
2424
- 解决方案:用包管理器来安装 tini。或者下载 tini-static 版本。详见 https://github.com/krallin/tini#statically-linked-version
25+
26+
## 现在无须手动安装 tini
27+
28+
在 docker 1.13 之后的版本,tini 已经内置到 docker 系统,名为 docker-init。详见[文档](https://docs.docker.com/reference/cli/docker/container/run/#init)
29+
30+
只要 `docker run --init` 即可。默认不开启。这样就不用在构建镜像时引入 tini。
31+
32+
对于 docker compose,只要加上 `init: true` 参数即可。
33+
34+
compose 标准文档里也定义了 [init 参数](https://github.com/compose-spec/compose-spec/blob/main/spec.md#init)

0 commit comments

Comments
 (0)