19.6. 使用 Buildah 从头开始创建镜像
您可以创建一个仅包含最小容器元数据的新容器,而不是从基础镜像开始。
从全新容器中创建镜像时,请考虑:
- 您可以将不带依赖项的可执行文件复制到涂销空间镜像中,再进行一些配置设置才能使容器正常工作。
-
您必须初始化 RPM 数据库并在容器中添加发行版本软件包以使用
dnf或rpm等工具。 - 如果您添加很多软件包,请考虑使用标准 UBI 或最小 UBI 镜像而不是 scratch 镜像。
先决条件
-
container-tools元数据包已安装。
流程
您可以向容器中添加 Web 服务 httpd ,并将其配置为运行。
创建一个空容器:
buildah from scratch
# buildah from scratch working-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载
working-container容器,并将挂载点路径保存到scratchmnt变量中:scratchmnt=$(buildah mount working-container) echo $scratchmnt
# scratchmnt=$(buildah mount working-container) # echo $scratchmnt /var/lib/containers/storage/overlay/be2eaecf9f74b6acfe4d0017dd5534fde06b2fa8de9ed875691f6ccc791c1836/mergedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在全新镜像中初始化 RPM 数据库,并添加
redhat-release软件包:dnf install -y --releasever=8 --installroot=$scratchmnt redhat-release
# dnf install -y --releasever=8 --installroot=$scratchmnt redhat-releaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
httpd服务安装到scratch目录中:dnf install -y --setopt=reposdir=/etc/yum.repos.d \ --installroot=$scratchmnt \ --setopt=cachedir=/var/cache/dnf httpd# dnf install -y --setopt=reposdir=/etc/yum.repos.d \ --installroot=$scratchmnt \ --setopt=cachedir=/var/cache/dnf httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
$scratchmnt/var/www/html/index.html文件:mkdir -p $scratchmnt/var/www/html echo "Your httpd container from scratch works!" > $scratchmnt/var/www/html/index.html
# mkdir -p $scratchmnt/var/www/html # echo "Your httpd container from scratch works!" > $scratchmnt/var/www/html/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
working-container以直接从容器运行httpd守护进程:buildah config --cmd "/usr/sbin/httpd -DFOREGROUND" working-container buildah config --port 80/tcp working-container buildah commit working-container localhost/myhttpd:latest
# buildah config --cmd "/usr/sbin/httpd -DFOREGROUND" working-container # buildah config --port 80/tcp working-container # buildah commit working-container localhost/myhttpd:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出本地存储中的所有镜像:
podman images
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/myhttpd latest 08da72792f60 2 minutes ago 121 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
localhost/myhttpd镜像,并配置容器和主机系统之间的端口映射:podman run -p 8080:80 -d --name myhttpd 08da72792f60
# podman run -p 8080:80 -d --name myhttpd 08da72792f60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 测试 Web 服务器:
curl localhost:8080
# curl localhost:8080 Your httpd container from scratch works!Copy to Clipboard Copied! Toggle word wrap Toggle overflow