SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Piores Práticas em Containers
Ou como aprender da pior forma!
$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.
$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 .*
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 :/
Tag :latest
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?
Por isso...
Mapear porta pública
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?
Por isso...
apt-get/yum/apk...
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?
Por isso...
Uso do ADD ao invés do COPY
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?
Por isso...
Múltiplos serviços em um container
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?
Por isso...
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...
Dúvidas capciosas ou algum case para
compartilhar? :)
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.
:)
Thanks!
Contatos:
github.com/perylemke
twitter.com/perylemke
pery.lemke@gmail.com
www.sudocast.com.br
www.facebook.com/1sudocast

Mais conteúdo relacionado

Mais procurados

TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 
TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...
TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...
TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...Stefan Teixeira
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o DockerWebSix
 
Introdução ao Python - FTEC
Introdução ao Python - FTECIntrodução ao Python - FTEC
Introdução ao Python - FTECDorneles Treméa
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)Wellington Silva
 
Primeiros passos com Nerves (Elixir para dispositivos embarcados)
Primeiros passos com Nerves (Elixir para dispositivos embarcados)Primeiros passos com Nerves (Elixir para dispositivos embarcados)
Primeiros passos com Nerves (Elixir para dispositivos embarcados)Donato Vianna
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
Github - Escrevendo código e compartilhando conhecimento
Github - Escrevendo código e compartilhando conhecimentoGithub - Escrevendo código e compartilhando conhecimento
Github - Escrevendo código e compartilhando conhecimentoHélio Medeiros
 
Seja burro e preguiçoso. A criação do synccode
Seja burro e preguiçoso. A criação do synccodeSeja burro e preguiçoso. A criação do synccode
Seja burro e preguiçoso. A criação do synccodes4nx
 
Docker para quem tem preguica
Docker para quem tem preguicaDocker para quem tem preguica
Docker para quem tem preguicaCristiano Cunha
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoDiogo Lucas
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Wellington Silva
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoSérgio Lima
 

Mais procurados (20)

TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 
TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...
TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...
TDC 2015 Floripa - Testes Automatizados de todos os tipos utilizando bibliote...
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o Docker
 
Introdução ao Python - FTEC
Introdução ao Python - FTECIntrodução ao Python - FTEC
Introdução ao Python - FTEC
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)
 
Primeiros passos com Nerves (Elixir para dispositivos embarcados)
Primeiros passos com Nerves (Elixir para dispositivos embarcados)Primeiros passos com Nerves (Elixir para dispositivos embarcados)
Primeiros passos com Nerves (Elixir para dispositivos embarcados)
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
Virtualenv e Pip
Virtualenv e PipVirtualenv e Pip
Virtualenv e Pip
 
Github - Escrevendo código e compartilhando conhecimento
Github - Escrevendo código e compartilhando conhecimentoGithub - Escrevendo código e compartilhando conhecimento
Github - Escrevendo código e compartilhando conhecimento
 
Shippable? Snap-ci? Travis?
Shippable? Snap-ci? Travis?Shippable? Snap-ci? Travis?
Shippable? Snap-ci? Travis?
 
Seja burro e preguiçoso. A criação do synccode
Seja burro e preguiçoso. A criação do synccodeSeja burro e preguiçoso. A criação do synccode
Seja burro e preguiçoso. A criação do synccode
 
Docker para quem tem preguica
Docker para quem tem preguicaDocker para quem tem preguica
Docker para quem tem preguica
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolso
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimento
 

Semelhante a Piores práticas em containers: o que evitar

Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoTobias Sette
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Trabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerTrabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerAlef Castelo
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018Renato Groff
 
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018Renato Groff
 
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIMWEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIMFernando Rizzato
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...iMasters
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Renato Groff
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Renato Groff
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Felipe Queiroz
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Renato Groff
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017Fabio Janiszevski
 
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018Renato Groff
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDextra Sistemas / Etec Itu
 

Semelhante a Piores práticas em containers: o que evitar (20)

Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Docker
DockerDocker
Docker
 
Trabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerTrabalhando em ambientes php com docker
Trabalhando em ambientes php com docker
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
 
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
 
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIMWEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
 
Conheça o Docker
Conheça o DockerConheça o Docker
Conheça o Docker
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Docker + Django
Docker + DjangoDocker + Django
Docker + Django
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 

Piores práticas em containers: o que evitar

  • 1. Piores Práticas em Containers Ou como aprender da pior forma!
  • 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?
  • 14. Uso do ADD ao invés do COPY
  • 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?
  • 17. Múltiplos serviços em um container
  • 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...
  • 21. Dúvidas capciosas ou algum case para compartilhar? :)
  • 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. :)