Slide 1

Slide 1 text

Docker para desenvolvedores Fernando Silva @FernandoDebrand

Slide 2

Slide 2 text

Sobre mim! Fernando Silva Software Developer Analyst

Slide 3

Slide 3 text

Visão Geral ● Problema de padronização de ambientes ● Soluções ● Conteinerização ● O que é Docker ● Containers / Imagens ● Dockerfile ● Docker Compose ● Docker Swarm ● Docker Stack

Slide 4

Slide 4 text

Problemas de padronização de ambientes

Slide 5

Slide 5 text

Quem nunca ouviu?

Slide 6

Slide 6 text

Problemas de padronização de ambientes

Slide 7

Slide 7 text

Soluções

Slide 8

Slide 8 text

Soluções - Virtualização Máquinas virtuais (VMs) são uma abstração de hardware físico, transformando um servidor em vários servidores. O hypervisor permite que várias VMs sejam executadas em uma única máquina. Cada VM inclui uma cópia completa de um sistema operacional, o aplicativo, binários necessários e bibliotecas - ocupando dezenas de GBs. As VMs também podem ser lentas para inicializar.

Slide 9

Slide 9 text

Soluções - Virtualização

Slide 10

Slide 10 text

Soluções - Conteinerização Os contêineres são uma abstração na camada de aplicativo que agrupa código e dependências. Vários contêineres podem ser executados na mesma máquina e compartilhar o kernel do sistema operacional com outros contêineres, cada um sendo executado como processos isolados no espaço do usuário. Os contêineres ocupam menos espaço que as VMs.

Slide 11

Slide 11 text

Soluções - Conteinerização

Slide 12

Slide 12 text

Container Vs Virtual Machine Os contêineres e as máquinas virtuais têm benefícios semelhantes de isolamento e alocação de recursos, mas funcionam de maneira diferente porque os contêineres virtualizam o sistema operacional em vez do hardware. Os contêineres são mais portáteis e eficientes.

Slide 13

Slide 13 text

Container Vs Virtual Machine

Slide 14

Slide 14 text

Container Vs Virtual Machine

Slide 15

Slide 15 text

Conteinerização

Slide 16

Slide 16 text

Antes de Contêineres

Slide 17

Slide 17 text

Pós Contêineres

Slide 18

Slide 18 text

Containers LXC - Linux Containers: ● Jul/2008 - Kernel 2.6.26 + ● Compartilha kernel e libs com o host ● Isola processo nos Control Groups (CGroups) ● Difícil gerenciar

Slide 19

Slide 19 text

Evolução

Slide 20

Slide 20 text

O que é Docker?

Slide 21

Slide 21 text

O que é Docker? Docker é uma plataforma Open Source que permite criar, executar, testar e implantar aplicações distribuídas dentro de containers.

Slide 22

Slide 22 text

Docker Engine Docker Engine abstrai as chamadas de SO das suas aplicações e utiliza as libraries e binários já existentes

Slide 23

Slide 23 text

Onde usar Docker? Containers Docker estão em todos os lugares: Linux, Windows, Data center, Cloud, Serverless, etc.

Slide 24

Slide 24 text

Imagens / Containers

Slide 25

Slide 25 text

Imagens Uma imagem de container do Docker é um pacote de software leve, autônomo e executável que inclui tudo o que é necessário para executar uma aplicação: código, ferramentas do sistema, bibliotecas do sistema e configurações.

Slide 26

Slide 26 text

Containers As imagens de container se tornam containers em tempo de execução e, no caso de containers do Docker, as imagens tornam-se containers quando são executadas no Docker Engine.

Slide 27

Slide 27 text

Dockerfile

Slide 28

Slide 28 text

Dockerfile Dockerfile é um arquivo texto com instruções, comandos e passos que você executaria manualmente, basicamente o Docker executa uma receita de bolo.

Slide 29

Slide 29 text

Dockerfile - Instruções ● FROM: Informa a partir de qual imagem será gerada a nova imagem; ● MAINTAINER: Campo opcional, que informa o nome do mantenedor da nova imagem; ● RUN: Realiza a execução de um comando; ● CMD: Define um comando a ser executado quando um container baseado nessa imagem for iniciado; ● LABEL: Adiciona metadados a uma imagem, informações adicionais que servirão para identificar versão, tipo de licença, host; ● EXPOSE: Expõem uma ou mais portas; ● ENV: Instrução que cria e atribui um valor para uma variável dentro da imagem; ● ADD: Adiciona arquivos locais ou que estejam em uma url, para dentro da imagem. ● COPY: Copia arquivos ou diretórios locais para dentro da imagem;

Slide 30

Slide 30 text

Dockerfile - Instruções ● ENTRYPOINT: Informa qual comando será executado quando um container for iniciado utilizando esta imagem, diferentemente do CMD, o ENTRYPOINT não é sobrescrito, isso quer dizer que este comando será sempre executado. ● VOLUME: Mapeia um diretório do host para ser acessível pelo container; ● USER: Define com qual usuário serão executadas as instruções durante a geração da imagem; ● WORKDIR: Define qual será o diretório de trabalho (lugar onde serão copiados os arquivos, e criadas novas pastas); ● ONBUILD: Define algumas instruções que podem ser realizadas quando alguma determinada ação for executada, é basicamente como uma trigger.

Slide 31

Slide 31 text

Dockerfile - Exemplo

Slide 32

Slide 32 text

Demonstração https://labs.play-with-docker.com

Slide 33

Slide 33 text

Docker Compose

Slide 34

Slide 34 text

Docker Compose O Docker Compose é uma ferramenta para a criação e execução de múltiplos containers de aplicação. Com o Compose, você usa um arquivo do tipo yml para definir como será o ambiente de sua aplicação e usando um único comando você criará e iniciará todos os serviços definidos.

Slide 35

Slide 35 text

Docker Compose File - Exemplo

Slide 36

Slide 36 text

Demonstração https://labs.play-with-docker.com

Slide 37

Slide 37 text

Docker Swarm

Slide 38

Slide 38 text

Docker Swarm O Docker Swarm é uma ferramenta nativa do Docker que permite a criação de clusters de Docker, ou seja, podemos fazer com que diversos hosts de Docker estejam dentro do mesmo pool de recursos, facilitando assim o deploy de containers.

Slide 39

Slide 39 text

Docker Swarm

Slide 40

Slide 40 text

Demonstração https://labs.play-with-docker.com

Slide 41

Slide 41 text

Docker Stack

Slide 42

Slide 42 text

Docker Stack Uma Stack é um grupo de serviços inter-relacionados que compartilham dependências e podem ser orquestrados e escalonados juntos. Uma única stack é capaz de definir e coordenar a funcionalidade de uma aplicação inteira (embora aplicações muito complexas possam querer usar várias stack).

Slide 43

Slide 43 text

Docker Stack

Slide 44

Slide 44 text

Demonstração https://labs.play-with-docker.com

Slide 45

Slide 45 text

Mais conteúdo sobre...

Slide 46

Slide 46 text

● https://leanpub.com/dockerparadesenvolvedores ● https://github.com/gomex/docker-para-desenvolvedores ● https://training.play-with-docker.com ● https://www.docker.com/get-started ● https://www.mundodocker.com.br/o-que-e-dockerfile ● https://www.mundodocker.com.br/docker-swarm/ ● https://codeblog.dotsandbrackets.com/docker-stack/ Referências

Slide 47

Slide 47 text

OBRIGADO! fernando.poa.br speakerdeck.com/fernandodebrando Perguntas?