Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker 101 e Ambientes Imutáveis

Docker 101 e Ambientes Imutáveis

Introdução ao Docker até a criação de ambientes imutáveis com docker-compose.
---
Docker introduction until immutable environments with docker-compose. Language: PT-BR

Wallison Marra

May 10, 2017
Tweet

More Decks by Wallison Marra

Other Decks in Technology

Transcript

  1. Wallison Marra - Em 2006 iniciei meu caminho pelo mundo

    da web. - DevOps Engineer na Hotmart. - Entusiasta da tecnologia. - Games, família e uma boa cerveja.
  2. Preload Hoje vivenciamos o uso do Docker graças a 2

    peças fundamentais: - LXC (Um conjunto de ferramentas do linux) - DotCloud (Uma empresa)
  3. LXC LinuX Container É um conjunto de ferramentas, bibliotecas, templates

    e controladores de linguagem que nos permite criar e controlar sistemas ou aplicações em container.
  4. LXC Okay, but what is container? Linux Container é considerado

    algo entre o chroot e uma máquina virtual propriamente dita, e neste meio é onde conseguimos criar "ambientes virtuais" (containers) sem a necessidade de um novo kernel. linuxcontainers.org/lxc
  5. E a DotCloud? DotCloud é uma empresa que possuía vários

    projetos open source em LXC, e o Docker era um destes projetos.
  6. DotCloud Docker se tornou tão popular que a empresa DotCloud

    decidiu mudar o nome da empresa para Docker.
  7. Docker Docker vem dominando o mercado de conteinerização desde seu

    surgimento, e hoje possui várias comunidades além de vários eventos pelo mundo. https://www.docker.com/community/events
  8. Docker - Hoje é utilizado por desenvolvedores para criação de

    ambiente imutáveis evitando a frase "Na minha máquina funciona!". - Utilizado por DevOps para gerenciamento de aplicações de ponta-a-ponta isolando processos, adquirindo performance computacional.
  9. O que foi feito? $ docker run hello-world - docker

    - run (utilizando para criar e executar um container) - hello-world (imagem a ser utilizada para a criação do container)
  10. O que foi feito? $ docker run -ti ubuntu bash

    - docker (executável) - run (utilizando para criar e executar um container) - -ti (-t abre terminal no container e -i mantém o terminal interativo) - ubuntu (imagem utilizada para criar o container) - bash (comando a ser executado pelo container - bash mantém o terminal aberto)
  11. O que ocorreu? $ docker run -ti -p 8080:80 ubuntu:16.04

    bash - docker (deamon docker) - run (utilizando para criar e executar um container) - -ti (-t abre terminal no container e -i mantém o terminal interativo) - -p 8080:80 (Expõe porta do container baseado em uma porta do host) - 8080 (porta do host) - 80 (porta do container) - ubuntu:16.04 (Imagem utilizada para criar o container) - bash (comando a ser executado quando o container for iniciado) Interagindo com containers
  12. Com a tela do terminal aberto pressione a tecla control

    e aperte p + q. $ docker ps $ docker attach bed7185d03bb (ID do container) Interagindo com containers
  13. Crie o arquivo index.html - Conteúdo: <h1>Hello Docker</h1> $ docker

    pull nginx:alpine Interagindo com containers
  14. $ docker run --name web-server \ -p 8080:80 \ -v

    `pwd`:/usr/share/nginx/html \ -d nginx:alpine Interagindo com containers
  15. $ docker run --name web-server -p 8080:80 \ -v `pwd`:/usr/share/nginx/html:

    -d nginx:alpine - docker (daemon) - --name webserver (concede um nome para o container) - -v `pwd`:/usr/share/nginx/html (baseado em um diretório do host, cria um volume no container) - -d (executa o container em background e informa seu ID) - nginx:alpine (nome da imagem utilizada para criar o container) O que ocorreu?
  16. Imagens de Containers Para cada serviço a ser utilizado, e

    para cada versão de uma aplicação, possuímos uma imagem. jenkins-2.58 jenkins-2.57 jenkins-2.56 jenkins-2.46.2
  17. Dockerfile Arquivo utilizado para criar imagens para containers em Docker.

    Local onde iremos informar o que nosso container deve possuir, além de: - Instalar pacotes e bibliotecas. - Criar variáveis de ambiente. - Expor portas. - Copiar arquivos. - Configurar comando base do container. - Etc...
  18. Gerando uma imagem Crie um arquivo chamado Dockerfile na mesma

    pasta do arquivo index.html que criamos anteriormente. $ docker build -t web-app:1.0 . $ docker run -d -p 8080:80 web-app:1.0
  19. Gerando uma imagem Edite o arquivo index.html e insira a

    linha <h2>V2</h2>. $ docker build -t web-app:2.0 . $ docker run -d -p 8080:80 web-app:2.0
  20. Publicando imagens $ docker tag web-app:1.0 repo_name/web-app:1.0 - docker -

    tag (adiciona tag a uma imagem) - web-app:1.0 (nome da imagem a ser adicionado uma tag) - repo_name/web-app:1.0 (nome da tag a ser adicionada)
  21. Ambientes imutáveis São ambientes que não sofrem alterações, mesmo quando

    executados em outros computadores. - Configurações idênticas. - Ambiente portável - Deploy em minutos, e até em segundos.
  22. Ambientes imutáveis Com estes ambientes ganhamos segurança, e agilidade no

    processo de desenvolvimento de aplicações. - Segurança: ambientes idênticos. - A frase: "Na minha máquina funciona", deixa de existir. - Ambiente de desenvolvimento = produção - Agilidade: automatização de processos.
  23. $ docker run -d \ -v `pwd`:/usr/share/nginx/html \ -p 8080:80

    frontapp - -v `pwd`:/usr/share/nginx/html (cria um volume no container com o conteúdo da pasta /Users/marra/Projects/in-moment-docker-frontend do host dentro de /usr/share/nginx/html no container) Ambientes imutáveis
  24. Caso tenha problemas com a interface do frontend, execute o

    comando abaixo: $ docker exec container_id npm install Ambientes imutáveis
  25. $ docker run -d \ -v `pwd`:/usr/src/app \ -p 3000:3000

    backapp sh -c 'npm install && npm start' - sh -c 'npm install && npm start' (sh -c executa um comando shell dentro do container) E por que não "...backapp npm install && npm start"? Ambientes imutáveis
  26. Calma, estamos quase lá… $ docker run -d -p 3306:3306

    --name dbapp wmarra/in-moment-dbapp Ambientes imutáveis
  27. Preparando nosso ambiente: $ cd in-moment-docker-backend && git checkout master

    $ cd in-moment-docker-frontend && git checkout master $ docker rm -f $(docker ps -aq) - (remove todos os containers ativos e inativos) Ambientes imutáveis
  28. $ docker run -d --name dbapp -p 3306:3306 wmarra/in-moment-dbapp $

    cd in-moment-docker-backend $ docker run -i --name backapp_dbapp \ --link dbapp:mysql -d -p 3000:3000 \ -v `pwd`:/usr/src/app \ backapp sh -c 'npm install && npm start' Ambientes imutáveis
  29. Quando os containers estão linkados eles se conectam em um

    rede própria, e se comunicam pelos seus nomes. --link dbapp:mysql (dbapp é o nome do container e o outro mysql é o apelido do container a ser visível quando for linkado) Ambientes imutáveis Network BACKAPP DBAPP Mysql
  30. Ambientes imutáveis Para completar, vamos iniciar nosso frontend: $ cd

    in-moment-docker-frontend/ $ git checkout master $ docker run -d -p 8080:80 -v `pwd`:/usr/share/nginx/html frontapp
  31. Docker compose é utilizado para orquestrar container de maneira simples.

    Com ele conseguimos fazer todos os passos mostrados anteriormente, facilitando e muito nossa vida. Ambientes imutáveis
  32. $ docker rm -f $(docker ps -aq) - docker -

    rm -f (rm remove um container, -f força a remoção) - $(docker ps -aq) (ps lista os containers, -a lista all containers e -q retorna o id de all containers) $ docker rmi -f $(docker images) - docker - rmi -f (força a remoção de todas as imagens) - $(docker images) (lista todas imagens disponíveis) Ambientes imutáveis
  33. O que fizemos? - version (versão do docker-compose a ser

    utilizado) - services (declaração dos serviço - containers). - container_name (nome do container) - image (imagem a ser utilizada para criar o container) - ports (mapeamento de portas) - links (quais containers serão linkados entre si) - depends_on (dependência de container) - command (comando a ser executado pelo container) Ambientes imutáveis
  34. O que fizemos? $ docker-compose up --build - docker-compose (docker-compose

    command) - up (cria todo o ambiente configurado do docker-compose.yml) - --build (builda ou rebuild as imagens do docker-compose.yml) Ambientes imutáveis