É possível reduzir uma imagem do Docker em tamanho?

1

Estou tentando criar uma imagem simplificada do Centos 7.4. Eu quero remover as coisas que eu não preciso e quero manter o Python e o Yum. Para começar eu queria me livrar do systemd.

Estou construindo minha imagem com:

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"]

Eu removi algumas imagens, mas a nova imagem ainda é maior que a original.

$ imagens do docking do sudo

smaller-centos      latest              59c3425f7909        2 minutes ago       219MB
centos              latest              e934aafc2206        4 weeks ago         199MB

$ sudo docker version

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
    
por Eddy Pronk 05.05.2018 / 05:17

1 resposta

4

Se você estiver usando pelo menos a versão 17.05 , o recurso de vários estágios pode fornecer uma solução simples ...

Basta adicionar isso ao final do Dockerfile:

[...]
FROM scratch
COPY --from=0 / /

CMD ["/bin/bash"]

Isso fará o "truque". Não há necessidade de opção "--squash". Apenas execute o comando:

sudo docker build -t smaller-centos smaller-centos

O resultado final é a imagem esperada de 178MB.

    
por 05.05.2018 / 14:28

Tags