docker build 依赖 buildkit 命令

BuildKit 是下一代的镜像构建组件,在 https://github.com/moby/buildkit 开源

安装

cd /usr/local/src/
wget https://github.com/moby/buildkit/releases/download/v0.8.3/buildkit-v0.8.3.linux-amd64.tar.gz
tar xzf buildkit-v0.8.3.linux-amd64.tar.gz
[ -f /usr/bin/buildctl ] || (cp -v bin/buildctl bin/buildkitd /usr/bin/)

systemd服务单元配置

cat > /usr/lib/systemd/system/buildkit.service << 'EOF'
[Unit]
Description=Dockerfile-agnostic builder toolkit
Documentation=https://github.com/moby/buildkit

[Service]
Type=notify
ExecStart=/usr/bin/buildkitd
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
启动
# 开机自启动
systemctl enable buildkit.service

# 启动
systemctl start buildkit.service

# 检测状态
systemctl status buildkit.service

创建容器

nginx 官方 Dockerfile 为例:docker-nginx/Dockerfile

Dockerfile

基于 centos:7 源码编译一个 nginx

FROM centos:7

LABEL maintainer="zaza <260458726@qq.com>"

ENV NGINX_VERSION   1.20.1

COPY nginx-${NGINX_VERSION}.tar.gz /usr/local/src

RUN yum -y install gcc make openssl-devel pcre-devel \
  && useradd www-data -M -s /bin/false \
  && cd /usr/local/src \
  && tar xzf nginx-${NGINX_VERSION}.tar.gz \
  && cd nginx-${NGINX_VERSION} \
  && ./configure --prefix=/usr/local/nginx --user=www-data --group=www-data --with-http_stub_status_module --with-http_ssl_module \
  && make \
  && make install \
  && install -m 755 -o root -g root -d /usr/local/nginx/conf/sites-available \
  && install -m 755 -o root -g root -d /usr/local/nginx/conf/sites-enabled \
  && echo "This is test dockerfile nginx" > /usr/local/nginx/html/index.html

# COPY nginx.conf /usr/local/nginx/conf/

expose 80

CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

编译(构建)

先下载 nginx-1.20.1.tar.gz

# nerdctl build -t zaza-test/nginx-1.20.1:v1 .
# docker build -t zaza-test/nginx-1.20.1:v1 .
nerdctl build -t nginx-1.20.1:zaza .

运行测试

# nerdctl run -it --rm -p 80:80 zaza-test/nginx-1.20.1

# 外部访问的话,需要声明 0.0.0.0,否则防火墙 nat 只有 nerdctl0 网段和 127.0.0.1的路由
nerdctl run --name nginx-zaza -d -p 0.0.0.0:8080:80 nginx-1.20.1:zaza

# nat
iptables -nvL -t nat|grep 8080

# 进入容器
nerdctl exec -it nginx-zaza /bin/bash
# ipaddr=$(hostname -I)

自建仓库

registry (docker.com)

# 运行容器
nerdctl run -d -p 5000:5000 --restart always --name nginx-1.20.1:zaza

# 使用方法
nerdctl pull centos:7
nerdctl tag centos:7 localhost:5000/centos:7
nerdctl push localhost:5000/centos:7

下载基础容器

Docker Hub

# 下载镜像(大小:72MB 左右)
nerdctl pull centos:7

# 运行实例
# --tty, -t
# --interactive, -i 即使未连接STDIN(标准输入)也保持打开状态,分配一个交互终端
# --rm 退出时自动删除容器
# 下面的命令:运行一个 centos:7 镜像的容器,并进入容器,退出的时候自动销毁
nerdctl run -it --rm centos:7

常见基础镜像

Alpine, Slim, Stretch, Buster, Jessie, Bullseye — What are the Differences in Docker Images?

alpine

A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!

Alpine 是众多 Linux 发行版中的一员,和 CentOSUbuntuArchlinux 之类一样,只是一个发行版的名字,号称小巧安全,有自己的包管理工具 apk

因为其特别小,主流软件都是基于alpine构建的

slim

slim 镜像一般都基于 Debianglibc,删除了许多非必需的软件包,优化了体积。如果构建过程中需要编译器,那么 slim 镜像不适合,除此之外大多数情况下还是可以使用 slim 作为基础镜像的

例如:FROM debian:buster-slim

busybox

busybox是一个软件工具箱,里边集成了linux中几百个常用的linux命令以及工具。大小只有1.2M,适合用来测试用

groovy focal bionic xenial

Ubuntu Groovy 20.10

Ubuntu Focal 20.04 (LTS)

Ubuntu Bionic 18.04 (LTS)

Ubuntu Xenial 16.04 (LTS)

buster

Raspbian Buster 10 (stable)

参考