buildkit more arg

This commit is contained in:
Kang Huaishuai 2020-09-06 08:52:31 +08:00
parent 6ceeec7f45
commit 90a7316322
No known key found for this signature in database
GPG Key ID: 5E515022F565DA09
3 changed files with 67 additions and 7 deletions

View File

@ -4,8 +4,6 @@
**注意如果您的镜像构建使用的是云服务商提供的镜像构建服务腾讯云容器服务阿里云容器服务等由于上述服务提供商的 Docker 版本低于 18.09BuildKit 无法使用将造成镜像构建失败建议使用 BuildKit 构建镜像时使用一个新的 Dockerfile 文件例如 Dockerfile.buildkit**
**注意docker-compose build 命令暂时不支持 BuildKit**
目前Docker Hub 自动构建已经支持 buildkit具体请参考 https://github.com/docker-practice/docker-hub-buildx
## `Dockerfile` 新增指令详解
@ -147,6 +145,10 @@ $ ssh-add ~/.ssh/id_rsa
$ docker build -t test --ssh default=$SSH_AUTH_SOCK .
```
## docker-compose build 使用 Buildkit
设置 `COMPOSE_DOCKER_CLI_BUILD=1` 环境变量即可使用
## 官方文档
* https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md

View File

@ -9,7 +9,7 @@
Docker for Linux 不支持构建 `arm` 架构镜像我们可以运行一个新的容器让其支持该特性Docker 桌面版无需进行此项设置
```bash
$ docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3
$ docker run --rm --privileged tonistiigi/binfmt:latest --install all
```
由于 Docker 默认的 `builder` 实例不支持同时指定多个 `--platform`我们必须首先创建一个新的 `builder` 实例同时由于国内拉取镜像较缓慢我们可以使用配置了 [镜像加速地址](https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md) 的 [`dockerpracticesig/buildkit:master`](https://github.com/docker-practice/buildx) 镜像替换官方镜像。
@ -66,3 +66,61 @@ Linux buildkitsandbox 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 aarch6
$ docker run -it --rm myusername/hello
Linux buildkitsandbox 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 Linux
```
## 架构相关变量
`Dockerfile` 支持如下架构相关的变量
**TARGETPLATFORM**
构建镜像的目标平台例如 `linux/amd64`, `linux/arm/v7`, `windows/amd64`
**TARGETOS**
`TARGETPLATFORM` OS 类型例如 `linux`, `windows`
**TARGETARCH**
`TARGETPLATFORM` 的架构类型例如 `amd64`, `arm`
**TARGETVARIANT**
`TARGETPLATFORM` 的变种该变量可能为空例如 `v7`
**BUILDPLATFORM**
构建镜像主机平台例如 `linux/amd64`
**BUILDOS**
`BUILDPLATFORM` OS 类型例如 `linux`
**BUILDARCH**
`BUILDPLATFORM` 的架构类型例如 `amd64`
**BUILDVARIANT**
`BUILDPLATFORM` 的变种该变量可能为空例如 `v7`
### 使用举例
例如我们要构建支持 `linux/arm/v7` `linux/amd64` 两种架构的镜像假设已经生成了两个平台对应的二进制文件
* bin/dist-linux-arm
* bin/dist-linux-amd64
那么 `Dockerfile` 可以这样书写
```bash
FROM scratch
# 使用变量必须申明
ARG TARGETOS
ARG TARGETARCH
COPY bin/dist-${TARGETOS}-${TARGETARCH} /dist
ENTRYPOINT ["dist"]
```

View File

@ -60,10 +60,10 @@ $ sysctl --system
```bash
# 启用 ipvs 相关内核模块
[Service]
ExecStartPre=-modprobe ip_vs
ExecStartPre=-modprobe ip_vs_rr
ExecStartPre=-modprobe ip_vs_wrr
ExecStartPre=-modprobe ip_vs_sh
ExecStartPre=-/sbin/modprobe ip_vs
ExecStartPre=-/sbin/modprobe ip_vs_rr
ExecStartPre=-/sbin/modprobe ip_vs_wrr
ExecStartPre=-/sbin/modprobe ip_vs_sh
```
执行以下命令应用配置