buildkit对接私有仓库

1 概述:

1.1 buildkit是什么

BuildKit(https://github.com/moby/buildkit)是Docker官方社区推出的下一代镜像构建工具(独立运行于Docker),使用它可以更加快速、有效、安全地构建容器镜像。Docker v18.06版本开始集成该组件。BuildKit可用于多种导出格式(例如OCI)以及前端支持(Dockerfile),可以非root用户运行,并提供高效缓存、并行构建等功能。BuildKit支持的容器运行时包括containerd和runc。buildctl是buildkit的客户端工具。


1.2 环境

版本信息如下:
a、操作系统:centos 7.6
b、buildkit版本:v.9.0
c、docker版本:18.06.0-ce
d、go环境: v1.16
e、节点列表

IP地址角色
192.168.0.70registry

2 部署registry

registry监听在443端口,使用自签证书。

2.1 准备自签证书

mkdir -p /home/registry/certs
cd /home/registry/certs

openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 3560 -nodes -subj '/CN=LIUJUN Cert Authority'

openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN=192.168.0.70'

# 可以将registry的域名,IP写入SAN中。
cat > extfile.cnf << EOF
[ v3_req ]
extendedKeyUsage=serverAuth,clientAuth
subjectAltName = DNS:liujun.harbor.com,DNS:localhost,IP:192.168.0.70,IP:127.0.0.1
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
EOF

openssl x509 -req -sha256 -days 36500 \
-extfile extfile.cnf \
-extensions v3_req \
-in server.csr \
-CA ca.crt \
-CAkey ca.key \
-out server.crt \
-CAcreateserial

执行以上命令,生成证书完毕。
在这里插入图片描述

2.1 生成registry的配置文件

mkdir -p /home/registry/config
cat > /home/registry/config/config.yml << EOF
version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
EOF

2.1 docker run运行registry

docker run -d -e REGISTRY_HTTP_ADDR="0.0.0.0:443" -e REGISTRY_HTTP_TLS_CERTIFICATE="/certs/server.crt" -e REGISTRY_HTTP_TLS_KEY="/certs/server.key" -v /home/registry/certs:/certs -v /home/registry/config/config.yml:/etc/docker/registry/config.yml -p 443:443 registry:2.7.1

3 部署buildkit

3.1 克隆代码

cd /opt/
git clone https://github.com/moby/buildkit.git

3.2 编译buildctl(go版本至少1.15)

cd /opt/buildkit/cmd/buildctl
go build
cp buildctl /usr/bin/

3.3 准备buildkitd的配置文件

守护进程buildkitd的默认配置文件是/etc/buildkit/buildkitd.toml。
由于registry使用的是自签证书,因此配置为insecure = true,如此一来,buildkitd通过containerd推送镜像时不会出现校验registry证书的错误。

mkdir -p /etc/buildkit/
cat > /etc/buildkit/buildkitd.toml << EOF
debug = true
[registry."192.168.0.70"]
  http = false
  insecure = true
EOF

3.4 启动buildkitd

直接在goland中点击调试,方便确认/etc/buildkit/buildkitd.toml文件已经被进程读取。
在这里插入图片描述


4 使用buildctl构建镜像并推送至私有仓库

4.1准备源码文件和Dockerfile

mkdir -p /tmp/test/

# Dockerfile 
cat > /tmp/test/Dockerfile << EOF
FROM golang:alpine AS builder
RUN mkdir /app
ADD . /app/
WORKDIR /app
ENV GO111MODULE=off
RUN go build -o hello .
FROM alpine
RUN mkdir /app
WORKDIR /app
COPY --from=builder /app/hello .
CMD ["./hello"]
EOF

# 源码文件
cat > /tmp/test/main.go << EOF
package main
import (
        "fmt"
        "runtime"
)
func main() {
        fmt.Printf("Hello, %s!\n", runtime.GOARCH)
}
EOF

执行以上指令,准备两个文件如下图:
在这里插入图片描述

4.2 运行buildctl build命令

目标镜像是192.168.0.70/hello:v1。

buildctl build ... --output type=image,name=192.168.0.70/hello:v1,push=true \
--export-cache type=inline \
--frontend=dockerfile.v0 \
--local context=. \
--local dockerfile=.

运行过程打印信息如下图:
在这里插入图片描述

5 小结:

使用buildkit进行构建容器镜像,从命令行打印信息中可见CACHED等字眼,说明构建镜像的过程使用了缓存,缩短镜像构建的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值