我正在尝试创建一个精简版的 Centos 7.4 映像。我想删除不需要的内容,并保留 Python 和 Yum。首先,我想摆脱 systemd。
我正在用以下方式建立我的形象:
sudo docker build --squash --compress -t smaller-centos smaller-centos
Dockerfile:
FROM centos
RUN rpm -e --nodeps systemd
RUN yum remove -y dracut-033-502.el7_4.1.x86_64 iputils-20160308-10.el7.x86_64 device-mapper-1.02.140-8.el7.x86_64 dbus-1.6.12-17.el7.x86_64 kpartx-0.4.9-111.el7_4.2.x86_64 cryptsetup-libs-1.7.4-3.el7_4.1.x86_64 kpartx-0.4.9-111.el7_4.2.x86_64 acl-2.2.51-12.el7.x86_64 bind-license-9.9.4-51.el7_4.2.noarch cryptsetup-libs-1.7.4-3.el7_4.1.x86_64dbus-1.6.12-17.el7.x86_64 dbus-python-1.1.1-9.el7.x86_64 hostname-3.13-3.el7.x86_64 iputils-20160308-10.el7.x86_64 kmod-libs-20-15.el7_4.7.x86_64 passwd-0.79-4.el7.x86_64 python-gobject-base-3.22.0-1.el7_4.1.x86_64 qrencode-libs-3.4.1-3.el7.x86_64 rootfiles-8.1-11.el7.noarch vim-minimal-7.4.160-2.el7.x86_64
RUN yum clean all
CMD ["/bin/bash"]
我删除了一些图像,但新图像仍然比原始图像大。
$ sudo docker 镜像
smaller-centos latest 59c3425f7909 2 minutes ago 219MB
centos latest e934aafc2206 4 weeks ago 199MB
$ sudo docker 版本
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:17:38 2018
OS/Arch: linux/amd64
Experimental: true
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:15:45 2018
OS/Arch: linux/amd64
Experimental: true
答案1
如果您正在使用至少版本17.05,多阶段功能可以为您提供一个简单的解决方案……
只需将其添加到 Dockerfile 的末尾:
[...]
FROM scratch
COPY --from=0 / /
CMD ["/bin/bash"]
这样就可以达到目的了。不需要“--squash”选项。只需执行以下命令:
sudo docker build -t smaller-centos smaller-centos
最终结果是预期的178MB图像。