> 文章列表 > 体验 buildah

体验 buildah

体验 buildah

体验 buildah

体验 buildah

  • 什么是 Buildah
  • 安装 Buildah
  • Buildah 使用 Dockerfiles
  • 参考资料

什么是 Buildah

Buildah 是一个便于构建开放容器倡议(OCI)容器镜像的工具。

Buildah软件包提供了一个命令行工具,可以用来:

  • 创建一个工作容器,可以从头开始,也可以使用一个镜像作为起点

  • 创建一个镜像,可以从一个工作容器中创建,也可以通过 Dockerfile 中的指令创建

  • 镜像可以以 OCI 镜像格式或传统的上游 docker 镜像格式构建

  • 挂载工作容器的根文件系统以进行操作

  • 解除对工作容器根文件系统的挂载

  • 使用容器根文件系统的更新内容作为文件系统层来创建一个新的镜像

  • 删除一个工作容器或一个镜像

  • 重命名一个本地容器

安装 Buildah

refer: https://github.com/containers/buildah/blob/main/install.md

运行下面命令安装 Buildah,

sudo dnf -y install buildah

安装 Buildah 后,我们可以看到没有安装任何镜像。buildah images 命令将列出所有的镜像,

buildah images

我们还可以看到,通过运行 buildah containers 也没有工作的容器,

buildah containers

Buildah 使用 Dockerfiles

Buildah 可以使用 Dockerfile 构建镜像。构建命令将 Dockerfile 作为输入,并生成一个 OCI 镜像。

创建一个 Dockerfile 文件,

cat << EOF > Dockerfile
# Base on the most recently released Fedora
FROM fedora:latest
MAINTAINER ipbabble email buildahboy@redhat.com # not a real email# Install updates and httpd
RUN echo "Updating all fedora packages"; dnf -y update; dnf -y clean all
RUN echo "Installing httpd"; dnf -y install httpd && dnf -y clean all# Expose the default httpd port 80
EXPOSE 80# Run the httpd
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
EOF

运行 buildah build,输入 Dockerfile 的名称和创建的镜像的名称(例如,fedora-httpd),

buildah build -f Dockerfile -t fedora-httpd .
or
buildah build -t fedora-httpd

你会看到Dockerfile的所有步骤正在执行。之后,buildah images 会向你展示新的镜像。

buildah images--- output
REPOSITORY                          TAG      IMAGE ID       CREATED              SIZE
localhost/fedora-httpd              latest   37b5e0609c3e   About a minute ago   295 MB
registry.fedoraproject.org/fedora   latest   c9bfca6d0ac2   4 days ago           196 MB
---

让我们把这个镜像从容器/存储的地方复制到 Docker 守护进程存储镜像的地方,这样我们就可以用 Docker 运行它。我们可以使用 buildah push 来实现这一目标。这将把镜像复制到 Docker 的存储区域,该区域位于 /var/lib/docker 下。Docker 的存储区是由 Docker 守护程序管理的。

buildah push fedora-httpd docker-daemon:fedora-httpd:latest

现在我们可以从镜像中创建一个容器,并用 docker run 来测试它:

docker run --rm -p 8123:80 fedora-httpd

当该容器运行时,在另一个 shell 中运行,你会看到标准的Apache网页。

curl localhost:8123

参考资料

  • https://github.com/containers/buildah

完结!