Desenvolvimento

1 jul, 2016

Melhores práticas Dockerfile

Publicidade

Muitas pessoas pensam que construir uma imagem é apenas iniciar um container, realizar algumas alterações e, assim, realizar o commit dela. Ou até mesmo escrever um Dockerfile do jeito que quiser e, pronto, a imagem está pronta e agora é só colocar em produção. Com algumas técnicas na criação do Dockerfile é possível fazer o seu Build passar de 10 minutos para apenas 10 segundos.

Baseado nas dúvidas que o pessoal acaba tendo no dia a dia, resolvi dar algumas dicas sobre como deixar o seu Dockerfile o mais otimizado possível.

Use o .dockerignore

O .dockerignore possui a mesma funcionalidade do .gitignore, fazendo com que você possa gerar a sua imagem excluindo alguns arquivos que estejam no diretório do seu Dockerfile.

Não instale pacotes desnecessários

Para reduzir o tamanho de sua imagem e o tempo de construção dela, não instale pacotes que você acha que poderá usar um dia, instale apenas o necessário para que sua aplicação possa rodar de forma íntegra e segura. Muitas vezes, pacotes desnecessários possuem uma série de dependências, o que pode acarretar um tempo maior de construção da imagem.

Construa o mínimo possível de camadas

Cada comando “RUN”, “COPY”, “ADD” acaba adicionando uma camada a mais em sua imagem, então quanto mais comandos conseguir executar de uma vez só, melhor.

Use tags

Quando você for realizar o docker build, utilize o parâmetro -t para que possa organizar melhor sua estrutura de imagens, e no desenvolvimento ficará mais fácil para saber o qual release essa imagem representa.
docker build . -t php:56-0-4

apt-get

Nunca utilize apenas apt-get update, utilize sempre apt-get update && apt-get install. Por exemplo, você tem o seguinte Dockerfile:

FROM UBUNTU
apt-get update
apt-get install wget
Você executa isso e depois de algum tempo você altera o Dockerfile e coloca assim:
FROM UBUNTU
apt-get update
apt-get install wget vim

Ao executar o build, o Docker não irá executar o apt-get update, fazendo com que o vim esteja desatualizado no momento da instalação.

Nunca mapear a porta pública no Dockerfile

Você NUNCA deve mapear a porta do seu host em seu Dockerfile:

#Não faça isso
EXPOSE 80:8080

#Faça isso
EXPOSE 80

Deixe sempre o que mais será alterado para o final

Como o Dockerfile trabalha com camadas, então você sempre deverá deixar para o final a parte que é mais dinâmica em seu Dockerfile, pois ao rodar o seu Dockerfile pela segunda vez, o Docker irá olhar onde foi modificado o arquivo e irá refazer as camadas abaixo da modificação. Então, se você tem uma parte que demora algum tempo e não precisará modificá-la constantemente, é melhor deixar essa parte no topo.

FROM ubuntu
RUN apt-get install -y nodejs
RUN mkdir /var/www
ADD app.js /var/www/app.js
FROM ubuntu
RUN apt-get install -y nodejs
RUN mkdir /var/www
ADD package.json /var/www/package.json

Nessa alteração de Dockerfile, o Docker irá apenas refazer a camada do ADD e não irá baixar novamente o node e criar o diretório /var/www, economizando tempo de Build e também tamanho em disco.Então tá, pessoal, espero que tenham gostado deste artigo referente a dicas de como criar melhor o seu Dockerfile. Qualquer dúvida é só deixar um comentário.