蚊章汇 - Daniel Schier
type: channel
link: https://linuxcn.bwsl.wang/author/1541/
description: Daniel Schier
items: 如何构建更小的容器

如何构建更小的容器
type: item
date: 2021-05-12T19:22:01+08:00
description: 使用容器工作是很多用户和开发者的日常任务。容器开发者经常需要频繁地（重新）构建容器镜像。如果你开发容器，你有想过减小镜像的大小吗？较小的镜像有一些好处。在下载的时候所需要的带宽更少，而且在云环境中运行的时候也可以节省开销。而且在 Fedora CoreOS、IoT 以及Silverblue 上使用较小的容器镜像可以提升整体系统性能，因为这些操作系统严重依赖于容器工作流。这篇文章将会提供一些减小容器镜像大小的技巧。工具以下例子所用到的主机操作系统是 Fedora Linux 33。例子使用 Podman 3.1.0 和Buildah 1.2.0。Podman 和 Buildah 已经预装在大多数 Fedora Linux 变种中。如果你没有安装 Podman 和 Buildah，可以用下边的命令安装：$ sudo dnf install -y podman buildah 任务从一个基础的例子开始。构建一个满足以下需求的 web 容器：容器必须基于 Fedora Linux使用 Apache httpd web 服务器包含一个定制的网站容器应该比较小下边的步骤也适用于比较复杂的镜像。设置首先，创建一个工程目录。这个目录将会包含你的网站和容器文件：$ mkdir smallerContainer $ cd smallerContainer $ mkdir files $ touch files/index.html 制作一个简单的登录页面。对于这个演示，你可以将下面的 HTML 复制到 index.html 文件中。 Container Page Container Page Fedora Fedora Project Fedora Documentation Fedora Magazine Fedora Community Blog Podman Podman Podman Documentation Podman Code Podman Blog Buildah Buildah Buildah Code Buildah Blog Skopeo skopeo Code CRI-O CRI-O CRI-O Code CRI-O Blog 此时你可以选择在浏览器中测试上面的 index.html 文件：$ firefox files/index.html 最后，创建一个容器文件。这个文件可以命名为 Dockerfile 或者 Containerfile：$ touch Containerfile 现在你应该有了一个工程目录，并且该目录中的文件系统布局如下：smallerContainer/ |- files/ | |- index.html | |- Containerfile 构建现在构建镜像。下边的每个阶段都会添加一层改进来帮助减小镜像的大小。你最终会得到一系列镜像，但只有一个 Containerfile。阶段 0：一个基本的容器镜像你的新镜像将会非常简单，它只包含强制性步骤。在 Containerfile 中添加以下内容：# 使用 Fedora 33 作为基镜像 FROM registry.fedoraproject.org/fedora:33 # 安装 httpd RUN dnf install -y httpd # 复制这个网站 COPY files/* /var/www/html/ # 设置端口为 80/tcp EXPOSE 80 # 启动 httpd CMD ["httpd", "-DFOREGROUND"] 在上边的文件中有一些注释来解释每一行内容都是在做什么。更详细的步骤：在 FROM registry.fedoraproject.org/fedora:33 的基础上创建一个构建容器运行命令： dnf install -y httpd将与 Containerfile 有关的文件拷贝到容器中设置 EXPOSE 80 来说明哪个端口是可以自动设置的设置一个 CMD 指令来说明如果从这个镜像创建一个容器应该运行什么运行下边的命令从工程目录创建一个新的镜像：$ podman image build -f Containerfile -t localhost/web-base 使用一下命令来查看你的镜像的属性。注意你的镜像的大小（467 MB）。$ podman image ls REPOSITORY TAG IMAGE ID CREATED SIZE localhost/web-base latest ac8c5ed73bb5 5 minutes ago 467 MB registry.fedoraproject.org/fedora 33 9f2a56037643 3 months ago 182 MB 以上这个例子中展…