TDC 2015 POA - O Fantástico Mundo de Docker

Preview:

Citation preview

O FANTÁSTICO MUNDO DE DOCKER

Stefan Teixeira @stefan_teixeira

stefanfk@gmail.com stefanteixeira.com.br

stefanteixeira.com

About meStefan Teixeira

• QA Engineer @ M4U • Entusiasta de Automação de Testes, Agile Testing e

DevOps • Blogs técnicos: stefanteixeira.com.br (pt-br) /

stefanteixeira.com (en)

Contatos: • E-mail: stefanfk@gmail.com • Twitter: twitter.com/stefan_teixeira • Facebook: facebook.com/stefan.teixeira • LinkedIn: linkedin.com/in/stefanteixeira • GitHub: github.com/stefanteixeira • SlideShare: slideshare.net/stefanteixeira

Descobrindo containers

Fonte: https://www.docker.com/whatisdocker

VMs x Containers

• Reprodutibilidade

Por que?

• Reprodutibilidade

• Escalabilidade

Por que?

• Reprodutibilidade

• Escalabilidade

• MUITO rápido :)

Por que?

• Oracle Solaris Zones - 2004

História dos Containers

• Oracle Solaris Zones - 2004

• LinuX Containers (LXC) - 2008

História dos Containers

• Oracle Solaris Zones - 2004

• LinuX Containers (LXC) - 2008

• Google’s lmctfy (Let Me Contain That For You) - 2013

História dos Containers

• Oracle Solaris Zones - 2004

• LinuX Containers (LXC) - 2008

• Google’s lmctfy (Let Me Contain That For You) - 2013

• Docker - 2013

História dos Containers

Open Container Initiative

http://opencontainers.org/ http://blog.docker.com/2015/06/open-container-project-foundation/

sudo apt-get install baidu ?

Fonte: http://blog.docker.com/2013/12/baidu-using-docker-for-its-paas/

• Imagens

Conceitos principais

• Imagens

• Containers

Conceitos principais

• Imagens

• Containers

• Dockerfiles

Conceitos principais

Ecossistema

• Compose

Ecossistema

• Compose

• Swarm

Ecossistema

• Compose

• Swarm

• Machine

Ecossistema

• Compose

• Swarm

• Machine

• Kitematic

DockerHub

https://hub.docker.com/

Arquitetura: Visão Geral

Fonte: https://docs.docker.com/introduction/understanding-docker/

Arquitetura: Execdriver

Fonte: https://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/

Host x Client: Linux

Host x Client: Windows / OS X

Host x Client: Windows / OS X

Docker Toolbox https://www.docker.com/toolbox

Documentação oficial

https://docs.docker.com

Image Layers

Dockerfiles

Dockerfiles: Instruções

• FROM

• FROM • RUN

Dockerfiles: Instruções

• FROM • RUN • ADD / COPY

Dockerfiles: Instruções

• FROM • RUN • ADD / COPY • EXPOSE

Dockerfiles: Instruções

• FROM • RUN • ADD / COPY • EXPOSE • ENV

Dockerfiles: Instruções

• FROM • RUN • ADD / COPY • EXPOSE • ENV • VOLUME

Dockerfiles: Instruções

• FROM • RUN • ADD / COPY • EXPOSE • ENV • VOLUME • CMD / ENTRYPOINT

Dockerfiles: Instruções

Dockerfiles: Exemplo

Dockerfiles: Boas Práticas

• 1 processo por container

Dockerfiles: Boas Práticas

• 1 processo por container • Minimize o número de camadas

Dockerfiles: Boas Práticas

• 1 processo por container • Minimize o número de camadas • Evite instalar pacotes

desnecessários

Dockerfiles: Boas Práticas

• 1 processo por container • Minimize o número de camadas • Evite instalar pacotes

desnecessários • Entenda como o cache do Docker

funciona (veja http://thenewstack.io/understanding-the-docker-cache-for-faster-builds/ e https://

docs.docker.com/articles/dockerfile_best-practices/)

Comandos Essenciais (CLI)

Comandos essenciais (CLI)

• Buildar uma imagem

docker build -t <nome_imagem> <path_dockerfile>

Outros parâmetros úteis: • --nocache

Comandos essenciais (CLI)

• Rodar um container

docker run -d -p <porta_host>:<porta_container> --name <nome_container> <nome_imagem>

Outros parâmetros úteis: • --link <nome_container>:<alias> • --add-host <nome_host>:<IP>

Comandos essenciais (CLI)

• Consultar logs de um container

docker logs <nome_container>

PS: para acompanhar os logs em tempo real, use o parâmetro -f

Comandos essenciais (CLI)

• Iniciar sessão bash em um container

docker exec -it <nome_container> bash

PS: o container deve estar rodando!

Comandos essenciais (CLI)

• Ver todas as imagens do host

docker images

• Ver todos os containers

docker ps -a

Comandos essenciais (CLI)

• Remover um container

docker rm -f <nome_container>

• Remover uma imagem

docker rmi -f <nome_imagem>

PS: antes de remover uma imagem, remova todos os containers associados a ela!

Hands-on

Hands-on

• https://github.com/stefanteixeira/todoapp-flask

Livros recomendados

Outros projetos interessantes

Obrigado!

Stefan Teixeira @stefan_teixeira

stefanfk@gmail.com stefanteixeira.com.br

stefanteixeira.com

Recommended