O documento resume as piores práticas ao usar containers, como usar a tag :latest que pode quebrar o projeto com atualizações, expor portas públicas deixando a aplicação vulnerável, e instalar/atualizar pacotes dentro do container que podem quebrar a imutabilidade. Ele também discute outras práticas como armazenar dados sensíveis, usar root, não usar .dockerignore e ter múltiplos serviços em um container.
2. $whoami
● Pery Lemke aka Peronium
● SRE na Ahgora Sistemas
● Sudocaster :)
● Membro da organização do
meetup DevOps Floripa
● Entusiasta DevOps
● Garimpeiro de bandas
obscuras de Stoner e Doom.
3. $whoami
● Gomex aka Rafael Gomes
● Especialista na Stone
● Participante do Sudocast :)
● Membro da organização do
DevOps Day PoA/Salvador
● Entusiasta DevOps
● Garimpeiro de bandas .*
4. Porque piores práticas?
Porque não há nada na vida como aprender errando!
E os exemplos serão com base no Docker.
Sorry rkt :/
6. Pois sempre baixará a última versão da imagem no
repositório.
Porém num belo dia, se houver uma atualização todo o seu
projeto pode quebrar.
Porque é uma má prática?
9. Expor uma porta alta deixa sua aplicação vulnerável
externamente, principalmente em serviços como o
Kubernetes e o OpenShift (Kubernetes com esteróides).
Lembrando que toda execução dentro do container deve
ser feita por um usuário sem previlégio.
Porque é uma má prática?
12. Rodar um upgrade atualizará os pacotes que já estão na
versão correta oriunda na sua imagem, e com isso o seu
container perderá a consistência e imutabilidade.
Rodar update e install em linhas separadas causará o
armazenamento em cache apenas do update, e não
realizará a instalação das dependências no seu container.
Porque é uma má prática?
15. Parecidos, porém diferentes. O COPY é mais simples, ele apenas copia
o arquivo e/ou diretório para o seu container.
Já o ADD, apesar de fazer o mesmo, ele “automagicamente” extrai
arquivos TAR ou busca arquivos de URLs remotas.
Resumidamente o ADD é uma “bazuca”, mas não use uma bazuca para
matar uma mosca e sim para destruir tanques.
Porque é uma má prática?
18. Escalabilidade da aplicação muito mais complicada, sem
falar na lentidão que as dependências instaladas irão
causar no seu container.
E o principal motivo é que seu Dockerfile ficará
extremamente difícil de escrever e manter.
E por fim é totalmente anti-12factor :)
Porque é uma má prática?
20. Outras piores práticas...
● Armazenar dados sensíveis em container;
● Usar root (Tema polêmico!);
● Não usar .dockerignore;
● Gemfile ou requirements.pip sem cache;
● Container = VM;
● E tantas outras...
22. Agradecimentos
Agradecimento especial ao Gomex e ao Helber pela
mentoria para esta talk.
Agradecer a Ahgora Sistemas pelo apoio.
E as vocês por participarem e ouvirem este pobre speaker.
:)