K8s教程-构建docker镜像
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)
自建仓库
# 运行容器
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
下载基础容器
# 下载镜像(大小: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 发行版中的一员,和CentOS
、Ubuntu
、Archlinux
之类一样,只是一个发行版的名字,号称小巧安全,有自己的包管理工具apk
因为其特别小,主流软件都是基于
alpine
构建的
slim
slim 镜像一般都基于
Debian
和glibc
,删除了许多非必需的软件包,优化了体积。如果构建过程中需要编译器,那么 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)
参考
- 原文作者:zaza
- 原文链接:https://zazayaya.github.io/2021/06/04/docker-build-image.html
- 说明:转载本站文章请标明出处,部分资源来源于网络,如有侵权请及时与我联系!