CONTAINERS Prof Marcelo de Oliveira Rosa Containers Anteriormente

  • Slides: 107
Download presentation
CONTAINERS Prof. Marcelo de Oliveira Rosa

CONTAINERS Prof. Marcelo de Oliveira Rosa

Containers Anteriormente, � VMs SO – emulação de máquinas convidado e suas aplicações estão

Containers Anteriormente, � VMs SO – emulação de máquinas convidado e suas aplicações estão ISOLADAS Qual o custo? A máquina anfitriã (host) reserva recursos computacionais (memória e área de armazenamento) CPU é compartilhada Alternativa “leve” Containers

Containers Baseado em cgroups/namespaces do Linux � Ou virtualização no nível do SO �

Containers Baseado em cgroups/namespaces do Linux � Ou virtualização no nível do SO � Partição dos recursos do kernel Recursos são atribuídos a namespaces Processos são associados a namespaces Processos do namespace A só podem usar recursos desse namespace. � Permitem a implementação de containers!

Containers Baseado em cgroups/namespaces do Linux � 7 tipos existentes e elementos isolados IPC

Containers Baseado em cgroups/namespaces do Linux � 7 tipos existentes e elementos isolados IPC Fila de mensagens , semáforos, memória compartilhada Network Dispositivos de rede, portas PID ID de processos (para fork() e clone()) Users ID de usuários e de grupos

Containers Baseado em cgroups/namespaces do Linux � 7 tipos existentes e elementos isolados UTS

Containers Baseado em cgroups/namespaces do Linux � 7 tipos existentes e elementos isolados UTS Nome de anfitrião (hostname) Nome de domínio (domain name) Mount Estruturas de “diretório” (mount points) Cgroup Estruturas de gerência de recursos do sistema Percentual da CPU Quantidade de memória

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade � Essas de recursos fixada por namespace características não nos lembram VM?

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade � Essas de recursos fixada por namespace características não nos lembram VM? Mais leve que VM Não tão isolada quanto VM

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade � Essas de recursos fixada por namespace características não nos lembram VM? Mais leve que VM Não tão isolada quanto VM � Base para software compartimentarizado “Containers”!

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade

Containers Baseado em cgroups/namespaces do Linux � Permite isolamento de processos por namespace Quantidade App 1 de recursos fixada por namespace App 2 App 3 App 4 Gerenciador de Containers SO Host HW App 5

Containers Além do isolamento, os containers. . . � Os executáveis, bibliotecas e dependências

Containers Além do isolamento, os containers. . . � Os executáveis, bibliotecas e dependências são empacotadas em imagens O ambiente de execução está sempre pronto � Podem ser executados anywhere Na mesma máquina Na mesma nuvem Parece JAVA, não é?

Containers Além do isolamento, os containers. . . � Desenvolvimento de aplicação multiplataforma Primeira

Containers Além do isolamento, os containers. . . � Desenvolvimento de aplicação multiplataforma Primeira versão: WINDOWS Re-implementação: MACOS Re-implementação: LINUX � Com containers Apenas uma versão Lembre-se: muito provavelmente, 1ª versão para LINUX

Containers Aproveitando. . . � Definições preliminares Imagem Unidade de software contendo executáveis, arquivos

Containers Aproveitando. . . � Definições preliminares Imagem Unidade de software contendo executáveis, arquivos de configuração, bibliotecas e qualquer dependência exigida para sua correta execução Inclusive outras imagens Container Instância de uma imagem em execução

Containers Aproveitando. . . � Para facilitar o entendimento Imagem arquivo Container processo

Containers Aproveitando. . . � Para facilitar o entendimento Imagem arquivo Container processo

Containers Implementações � LXC/LXD Linux Containers https: //linuxcontainers. org/ � Docker https: //www. docker.

Containers Implementações � LXC/LXD Linux Containers https: //linuxcontainers. org/ � Docker https: //www. docker. com/ Trabalharemos com este!

Containers Docker � Desenvolvido Distribuição pela empresa Docker Inc. “gratuita” de ferramentas Fatura com

Containers Docker � Desenvolvido Distribuição pela empresa Docker Inc. “gratuita” de ferramentas Fatura com serviços!

Containers Docker � Composto de: Containerd (no núcleo do Docker Engine) Daemon open-source para

Containers Docker � Composto de: Containerd (no núcleo do Docker Engine) Daemon open-source para gestão das imagens e containers Build. Kit CLI Ferramentas para encapsular/montar os as imagens (parte do Docker Engine) Interface de comandos para executar a gestão Docker Hub Repositório controlado de imagens! Um dos pontos de faturamento ($$$) da Docker Inc.

Containers Docker � Teste de instalação Checar a versão do engine docker --version Executando

Containers Docker � Teste de instalação Checar a versão do engine docker --version Executando O um container a partir de uma imagem docker run hello-world que aconteceu?

Containers Docker � Teste de instalação Executando O um container a partir de uma

Containers Docker � Teste de instalação Executando O um container a partir de uma imagem docker run hello-word que aconteceu? Daemon procura pela imagem “hello-world” Não encontramos, recupera sua versão mais recente Docker Hub A partir dessa imagem, cria uma instância, o container Executa essa instância/container!

Containers Docker � Teste de instalação Execute O duas ou três vezes o mesmo

Containers Docker � Teste de instalação Execute O duas ou três vezes o mesmo comando docker run hello-word que aconteceu? Duas ou três instâncias foram criadas

Containers Docker � Quantas docker image ls docker container ls --all docker ps --all

Containers Docker � Quantas docker image ls docker container ls --all docker ps --all � Dúvidas sobre os comandos Adicione --help � Sintaxe imagens ou containers existem? dos comandos no Docker CLI docker comando subcomando parametros

Containers Docker � Gestão de imagens e containers docker images Outro modo de listar

Containers Docker � Gestão de imagens e containers docker images Outro modo de listar as imagens disponíveis No seu sistema! docker system info docker info Estado atual do engine Docker docker system df -v Checagem do estado do disco

Containers Docker � Gestão de imagens e containers (limpeza) docker image rm <imagem 1>

Containers Docker � Gestão de imagens e containers (limpeza) docker image rm <imagem 1> <imagem 2> docker rm <imagem 1> <imagem 2> Elimina imagens específicas docker image prune Elimina imagens não usadas ou “pendentes” docker container rm <container> Elimina containers específicos docker container prune Elimina containers que estejam PARADOS

Containers Docker � Gestão de imagens e containers (limpeza) docker system prune --all Limpeza

Containers Docker � Gestão de imagens e containers (limpeza) docker system prune --all Limpeza total do sistema (imagens e containers) Equivalentes: del *. * ou rm -rf / (linux) Usem antes de desinstalar o ambiente Docker!

Containers Docker � Lidando com repositórios Imagens são armazenadas no repositório Docker Hub Contas

Containers Docker � Lidando com repositórios Imagens são armazenadas no repositório Docker Hub Contas podem ser pessoais, de empresas, de projetos. . . Para baixar (pull) pull imagens, não é necessário ter conta! Para carregar (push) push imagens, você precisa! Conta gratuita com limitações 1 (um) repositório privado! Conta paga ($$$) 5 (cinco) repositórios privados por US$ 7/mês Fonte de renda para Docker Inc.

Containers Docker � Baixando e examinando imagens docker pull drmarcelorosa/my-hello-world docker images docker inspect

Containers Docker � Baixando e examinando imagens docker pull drmarcelorosa/my-hello-world docker images docker inspect drmarcelorosa/my-hello-world Abra a página: https: //hub. docker. com/repository/docker/drmarcelor osa/my-hello-world Compare variáveis Id e Repo. Digests O que elas significam?

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL docker pull mariadb

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL docker pull mariadb Servidor preparado pela comunidade. . . Há outros! docker run --name my-db -e MYSQL_ROOT_PASSWORD=senha -d mariadb Ligando o servidor O que aconteceu aqui? Que parâmetros são esses?

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL docker run --name

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL docker run --name my-db --e MYSQL_ROOT_PASSWORD=senha -d mariadb Atribuindo um nome para o container § Para facilitar sua identificação Definindo uma variável de ambiente § Que o servidor mariadb reconhece (senha do adm) Deixe-o rodando em background (como um daemon) docker inspect mariadb docker inspect my-db

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL docker run -it

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL docker run -it --network bridge --rm mariadb mysql -h 172. 17. 0. 2 –uroot -p Faça isso em outra janela Cria um cliente (para comandos SQL) Usando uma rede específica do container § Lembre-se: o container é um “computador” dentro do seu Elimina o container quando finalizar seu uso Em azul: comando e parâmetros para mariadb/mysql! exit

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL Alguns comandos SQL

Containers Docker � Estabelecendo Antigo um servidor Maria. DB My. SQL Alguns comandos SQL para nosso deleite! CREATE DATABASE CID; CREATE TABLE CID. ALUNOS (ID INT, NOME VARCHAR(255), NOTA INT); INSERT INTO CID. ALUNOS(ID, NOME, NOTA) VALUES (1, 'Marcelo Rosa', 10), (2, 'Joao da Silva', 5); SELECT * FROM CID. ALUNOS WHERE NOTA > 6; EXIT

Containers Docker � Estabelecendo Desligando um servidor Maria. DB e religando um container Container

Containers Docker � Estabelecendo Desligando um servidor Maria. DB e religando um container Container é uma instância (algo “vivo”) de uma imagem Imagine desligar um servidor que esteja acessando disco docker stop my-db docker start my-db docker run -it --network bridge --rm mariadb mysql -h 172. 17. 0. 2 –uroot -p USE CID; SELECT * FROM ALUNOS; EXIT

Containers Docker � Estabelecendo Qual um servidor Maria. DB a diferença entre start, exec

Containers Docker � Estabelecendo Qual um servidor Maria. DB a diferença entre start, exec e run? start: inicia um container existente que esteja “parado” docker stop my-db docker start my-db docker inspect my-db exec: executa um comando dentro de um container “rodando” Logo veremos um exemplo run: Cria uma instância de uma imagem e a “executa” Chamada interna start

Containers Docker � Estabelecendo Ligando um servidor Apache o servidor docker run -dit --name

Containers Docker � Estabelecendo Ligando um servidor Apache o servidor docker run -dit --name my-web -p 8080: 80 httpd: 2. 4 Um container com nome my-web Executado em background Mapeando a porta 80 do container para a porta 8080 que hospeda o Docker Engine. docker-machine ip Identificando o endereço IP desse servidor Se não fosse Docker Toolbox, seria localhost

Containers Docker � Estabelecendo um servidor Apache Testando Abra um navegador para acessar o

Containers Docker � Estabelecendo um servidor Apache Testando Abra um navegador para acessar o seguinte endereço http: //192. 168. 99. 100: 8080 Endereço IP pode variar Encerrando o servidor docker stop my-web docker rm my-web

Containers Docker � Estabelecendo um servidor Apache Como colocar mais páginas no servidor Um

Containers Docker � Estabelecendo um servidor Apache Como colocar mais páginas no servidor Um jeito: mapeamento de diretórios Um diretório no host será mapeado em um diretório no container! container Crie o diretório C: Users<login>dockerhtml-pages <login>

Containers Docker � Estabelecendo um servidor Apache A configuração do apache (httpd. conf) usa

Containers Docker � Estabelecendo um servidor Apache A configuração do apache (httpd. conf) usa o diretório /usr/local/apache 2/htdocs/ para manter páginas. Inicie o servidor com docker run -dit --name my-web -p 8080: 80 –v /c/Users/<login>/docker/html-pages/: <login> /usr/local/apache 2/htdocs/ httpd: 2. 4 Copie uma página html qq no diretório do host

Containers Docker � Estabelecendo Abra um servidor Apache o navegador e. . . Voilá!

Containers Docker � Estabelecendo Abra um servidor Apache o navegador e. . . Voilá! http: //192. 168. 99. 100: 8080 Endereço provido pelo Virtual. Box § Docker engine é sustentado por VM Esse container agora enxerga páginas desse diretório Mais de um container pode enxergar o mesmo diretório

Containers Docker � Checando containers em execução docker ps -a docker stats docker logs

Containers Docker � Checando containers em execução docker ps -a docker stats docker logs --details my-web Captura tudo que é enviado para STDOUT e STDERR docker diff <container> Identificar nossas modificações no camada/layer de escrita

Containers Docker � Criando uma imagem Imagens A por camadas Imagine “herança” em programação

Containers Docker � Criando uma imagem Imagens A por camadas Imagine “herança” em programação orientada a objetos Ou camada OSI de redes primeira camada chama-se SCRATCH Não faz nada, do ponto de vista do usuário! Próximas camadas adicionam novas informações Arquivos e diretórios Variáveis de ambiente

Containers Docker � Criando uma imagem Imagens A por camadas Imagine “herança” em programação

Containers Docker � Criando uma imagem Imagens A por camadas Imagine “herança” em programação orientada a objetos Ou camada OSI de redes primeira camada chama-se SCRATCH Não faz nada, do ponto de vista do usuário! Próximas camadas adicionam novas informações Arquivos e diretórios Variáveis de ambiente Por economia, salvasse apenas a diferença entre camadas! DIFF e GIT

Containers Docker � Criando uma imagem Importante Cada camada de uma imagem é READ-ONLY

Containers Docker � Criando uma imagem Importante Cada camada de uma imagem é READ-ONLY Quando um container é gerado, uma nova camada é criada Essa camada é READ-WRITE Pode, posteriormente, tornar-se uma READ-ONLY § Caso específico – geração de nova imagem

Containers Docker � Criando uma imagem Exemplo: Word. Press Gerenciador e servidor de páginas

Containers Docker � Criando uma imagem Exemplo: Word. Press Gerenciador e servidor de páginas HTML O Docker cria o seguinte container READ-WRITE DADOS CONTAINER WORDPRESS HTTPD UBUNTU Imagem do Word. Press (há subdivisões) SCRATCH READ-ONLY

Containers Docker � Criando uma imagem Exemplo: Word. Press Gerenciador e servidor de páginas

Containers Docker � Criando uma imagem Exemplo: Word. Press Gerenciador e servidor de páginas HTML O Docker cria o seguinte container docker pull wordpress: php 7. 3 -apache docker pull php: 7. 3 -apache Em hub. docker. com, procure pelas imagens wordpress: php 7. 3 -apache php: 7. 3 -apache

Containers Docker � Criando uma imagem Exemplo: Word. Press Em hub. docker. com, procure

Containers Docker � Criando uma imagem Exemplo: Word. Press Em hub. docker. com, procure pelas imagens https: //hub. docker. com/layers/amd 64/php/ 7. 3 -apache/images/sha 256 fbc 91483333 b 1 f 54 b 5 de 0 ee 8090 ffbd 1 b 60827 ec 37546 e 4 ca 713 fab 0 a 12 ca 62 b? context=explore https: //hub. docker. com/layers/wordpress/ library/wordpress/php 7. 3 apache/images/sha 2562 c 98 af 2 aa 1 ae 81343278 b 1 d 62618 e 05 bfa 5 d 3 fe 5 8 a 487000 d 4 e 94 fa 338 bea 780? context=explore

Containers Docker � Criando uma imagem Exemplo: Word. Press No ambiente docker inspect wordpress:

Containers Docker � Criando uma imagem Exemplo: Word. Press No ambiente docker inspect wordpress: php 7. 3 -apache docker inspect php: 7. 3 -apache

Containers Docker � Criando Nosso uma imagem “Hello-World” Crie os diretórios C: Users<login>dockerhello-world-code <login>

Containers Docker � Criando Nosso uma imagem “Hello-World” Crie os diretórios C: Users<login>dockerhello-world-code <login> § Conterá nosso código-fonte C: Users<login>dockerhello-world<login> codemy-build § Para gerar a imagem Precisamos gerar um arquivo binário executável Imprimirá uma mensagem na tela Usando linguagem C + printf()

Containers Docker � Criando Nosso uma imagem “Hello-World” No LINUX Colocar código executável no

Containers Docker � Criando Nosso uma imagem “Hello-World” No LINUX Colocar código executável no diretório C: Users<login>dockerhello-world<login> codemy-build No Windows Usar container para compilar o código!

Containers Docker � Criando Nosso uma imagem “Hello-World” Salve o seguinte código-fonte com o

Containers Docker � Criando Nosso uma imagem “Hello-World” Salve o seguinte código-fonte com o seguinte nome: C: Users<login>dockerhello-world<login> codehello. c #include <stdio. h> int main(void) { printf("Hello world da turman"); return 0; }

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux (alternativa 1) 1 docker run --rm -it -v /c/Users/<login>/docker/hello-world/<login> code/: /build ubuntu apt-get –y update apt-get –y install build-essential cd /build gcc –o my-build/hello –static hello. c exit

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux (alternativa 2) 2 docker run --rm -it -v /c/Users/<login>/docker/hello-world/<login> code/: /build alpine apk add build-base cd /build gcc -o my-build/hello -static hello. c exit

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux (alternativa 3) 3 docker run --rm -it -v /c/Users/<login>/docker/hello-world/<login> code/: /build drmarcelorosa/my-ubuntudevel cd /build gcc -o my-build/hello -static hello. c exit

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux

Containers Docker � Criando Nosso uma imagem “Hello-World” Compilando o código num container Linux (alternativa 4) 4 docker run --rm -it -v /c/Users/<login>/docker/hello-world/<login> code/: /build drmarcelorosa/my-alpinedevel cd /build gcc –o my-build/hello –static hello. c exit

Containers Docker � Criando Nosso uma imagem “Hello-World” Salve o seguinte código-fonte com o

Containers Docker � Criando Nosso uma imagem “Hello-World” Salve o seguinte código-fonte com o seguinte nome: C: Users<login>dockerhello-world-codemy <login> -builderDockerfile FROM scratch ADD hello / CMD ["/hello"]

Containers Docker � Criando Nosso uma imagem “Hello-World” Agora que temos o executável e

Containers Docker � Criando Nosso uma imagem “Hello-World” Agora que temos o executável e o script de criação de imagem no diretório de montagem docker build --tag our-hello. § Não esqueça deste ponto § Ele define o “contexto” da montagem § Todos os arquivos do contexto são enviados ao daemon Executando um container desta imagem docker run --rm our-hello

Containers Docker � Criando uma imagem <seu-hub-id>/my-ubuntu-devel Dockerfile FROM ubuntu: latest RUN set -xe

Containers Docker � Criando uma imagem <seu-hub-id>/my-ubuntu-devel Dockerfile FROM ubuntu: latest RUN set -xe && apt-get -f update && aptget -f install build-essential CMD ["/bin/bash"] docker login docker build --tag <seu-hub-id>/my-ubuntudevel. docker push <seu-hub-id>/my-ubuntu-devel

Containers Docker � Criando uma imagem <seu-hub-id>/my-alpine-devel Dockerfile FROM alpine: latest RUN set -xe

Containers Docker � Criando uma imagem <seu-hub-id>/my-alpine-devel Dockerfile FROM alpine: latest RUN set -xe && apk add build-base CMD ["/bin/bash"] docker build --tag <seu-hub-id>/my-alpinedevel. docker push <seu-hub-id>/my-alpine-devel

Containers Docker � Criando uma imagem <seu-hub-id>/my-alpine-devel (via COMMIT) docker run -it --name my-alpine

Containers Docker � Criando uma imagem <seu-hub-id>/my-alpine-devel (via COMMIT) docker run -it --name my-alpine apk add build-base exit docker commit my-alpine <seu-hub-id>/myalpine-devel: v 2 docker run -it --rm <seu-hub-id>/my-alpinedevel: v 2 gcc --version exit

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile Para outro nome

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile Para outro nome -f nome-docker-file Descreve como o docker daemon empacotará a imagem Deve começar com FROM Há uma exceção ARG Indica quem é a base para a nova imagem Base mais “básica” scratch Apenas um CMD Se colocar mais de um, docker daemon usará o último

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile Comandos FROM, ADD,

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile Comandos FROM, ADD, COPY, RUN geram novas camadas! Por isso agrega-se vários comandos em RUN § Para minimizar o tamanho do container Camadas são diferenças em relação a camada anterior

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile CMD e ENTRYPOINT

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile CMD e ENTRYPOINT CMD § Comando default quando container é executado § Formato exec (JSON array) ou formato shell § [“cmd”, “param 1”, “param 2”] § [“/bin/sh”, “-c”] § Formato shell § exec param 1 param 2 § Internalmente /bin/sh -c exec param 1 param 2

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile CMD e ENTRYPOINT

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile CMD e ENTRYPOINT CMD § Se a linha for muito grande usar § Barra invertida § Shell default pode ser alterado SHELL

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile CMD e ENTRYPOINT

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile CMD e ENTRYPOINT § Comando executado quando container é executado § Ignora RUN § Usa seu conteúdo como parâmetros adicionais § Ignora comando usado em docker run § Também usa-o como parâmetros adicionais § Não usa SHELL default para executar o comando § Um jeito de forçar a execução de um processo!

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile ADD e COPY

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile ADD e COPY [ADD|COPY] ORIGEM DESTINO Ambos copiam a origem no destino § Destino é sempre um local na imagem do Docker COPY § Origem deve estar no sistema de arquivos do host ADD § Além do host, pode ser uma URL (arquivo ZIP) § Arquivo TAR ZIP e TAR são expandidos na imagem

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile EXPOSE PORTA/PROTOCOLO EXPOSE

Containers Docker � Criando O uma imagem que é Dockerfile? Dockerfile EXPOSE PORTA/PROTOCOLO EXPOSE PORTA “Abre firewall” do container para uma porta Lembre-se que precisa mapeá-la com docker run –p ENV CHAVE VALOR ENV CHAVE=VALOR Define variável de ambiente na construção da imagem Tais variáveis também são disponíveis para o container § Lembre-se, estamos falando de LINUX!

Containers Docker � Criando uma aplicação multisserviços Aplicação conjunto de serviços Geralmente dependentes Exemplo:

Containers Docker � Criando uma aplicação multisserviços Aplicação conjunto de serviços Geralmente dependentes Exemplo: Servidor de banco de dados + php + servidor HTTP Cada serviço é executado em um container Precisam ser iniciados em uma sequência Em caso de falha, devem ser reiniciados Os parâmetros de suas configurações são interdependentes

Containers Docker � Criando uma aplicação multisserviços Uma aplicação pode ser manualmente executada Esse

Containers Docker � Criando uma aplicação multisserviços Uma aplicação pode ser manualmente executada Esse processo pode ser automatizado Facilita gestão dos processos, minimizando erros! docker-compose Ferramenta para automação da iniciação, gerenciamento e encerramento de uma aplicação

Containers Docker � Criando uma aplicação multisserviços Exemplo manual Servidor Word. Press, com SGDB

Containers Docker � Criando uma aplicação multisserviços Exemplo manual Servidor Word. Press, com SGDB My. SQL separado 2 containers (Word. Press e My. SQL) My. SQL docker stop my-web my-db docker run --name comp 1 -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -v db_data: /var/lib/mysql -d mysql: 5. 7

Containers Docker � Criando uma aplicação multisserviços Exemplo manual 2 containers (Word. Press e

Containers Docker � Criando uma aplicação multisserviços Exemplo manual 2 containers (Word. Press e My. SQL) docker inspect comp 1 Confirmar endereço de rede de comp 1 docker run --name comp 2 -e WORDPRESS_DB_HOST=172. 17. 0. 4: 3306 –e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -p 8000: 80 –v wp_data: /var/www/html –d wordpress: latest

Containers Docker � Criando uma aplicação multisserviços Exemplo manual 2 containers (Word. Press e

Containers Docker � Criando uma aplicação multisserviços Exemplo manual 2 containers (Word. Press e My. SQL) Para terminar a instalação do Word. Press Abra navegador em sua página de configuração/gestão § http: //192. 168. 99. 100: 8000 § Não precisa terminar a configuração!

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Arquivo no formato YAML

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Arquivo no formato YAML Ain’t Markup Language Usa indentação como o Python § mas não é Python!!! Padrão para serialização de dados § A grosso modo para facilitar configuração Há diferentes versões de comandos para docker-compose Evolução do produto!

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Podemos escrever o script

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Podemos escrever o script da aplicação na versão desejada Crie o diretório C: Users<login>dockercompose 1 <login> § Conterá dados da aplicação

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml <login> version: '3. 1' services: § wordpress: § image: wordpress: latest § restart: always § ports: § - 8000: 80

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml <login> § environment: § WORDPRESS_DB_HOST: db § WORDPRESS_DB_USER: wordpress § WORDPRESS_DB_PASSWORD: wordpress § volumes: § - wp_data: /var/www/html § depends_on: § - db

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml <login> § db: § image: mysql: 5. 7 § restart: always § environment: § MYSQL_DATABASE: wordpress § MYSQL_USER: wordpress § MYSQL_PASSWORD: wordpress § volumes: § - db_data: /var/lib/mysql

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose C: Users<login>dockercompose 1wp. yml <login> volumes: § wp_data: § db_data: Para executá-lo cd /c/Users/<login>/docker/compose 1/ /<login> docker-compose -f wp. yml up

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Para interrompê-lo CTRL+C §

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Para interrompê-lo CTRL+C § Envia um sinal SIGTERM para containers docker-compose -f wp. yml down Para executá-lo em background docker-compose -f wp. yml up –d Não esqueça: http: //192. 168. 99. 100: 8000

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Outras ações docker-compose –f

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Outras ações docker-compose –f wp. yml logs docker-compose –f wp. yml top docker network ls docker network inspect <compose_net> docker volume ls docker ps -a

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose O que observamos? Script

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose O que observamos? Script reflete operações manuais envolvendo imagens e containers. § Minimiza erros de desenvolvimento, teste e produção Preparação para execução em cluster ou nuvem Preparação para orquestração Serviços são etiquetados (tag) de acordo com o nome do diretório/projeto!

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Construindo imagens (build) Construir

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Construindo imagens (build) Construir um servidor simples Python + Flask Persistir número de acessos de uma página Redis § Servidor de cache

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Crie o diretório C:

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose Crie o diretório C: Users<login>dockercompose 2 <login> Baixe o arquivos. . . nesse diretório Abra o arquivo app. py Abra o arquivo Dockerfile Abra o arquivo docker-compose. yml

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose cd /C/Users/<login>/docker/compose 2 /<login>

Containers Docker � Criando uma aplicação multisserviços Exemplo com docker-compose cd /C/Users/<login>/docker/compose 2 /<login> docker-compose up Abra o navegador http: //192. 168. 99. 100: 5000 Faça o navegador recarregar a página algumas vezes

Containers Docker � Criando Visão uma aplicação multisserviços geral do arquivo no formato Yaml

Containers Docker � Criando Visão uma aplicação multisserviços geral do arquivo no formato Yaml services: Que podem ser construídos (build) Como docker service [cmd]. . . networks: Definição da estrutura de rede Como docker network [cmd]. . . volumes: Definição dos elementos de armazenagem de dados Como docker volume [cmd]. . .

Containers Docker � Criando Visão uma aplicação multisserviços geral do arquivo no formato Yaml

Containers Docker � Criando Visão uma aplicação multisserviços geral do arquivo no formato Yaml secrets: Definição de dados sensíveis § Senhas, dados privados Como docker secret [cmd]. . . configs: Definição de dados não-sensíveis § Arquivos de configuração, iniciação Como docker config [cmd]. . .

Containers Docker � Usando um cluster Docker Swarm Um gestor (manager) e vários colaboradores

Containers Docker � Usando um cluster Docker Swarm Um gestor (manager) e vários colaboradores (workers) Suporta mais gestores § Tolerância a falhas Suporte a balanceamento de carga e despachante Opera sobre a aplicação multisserviço Serviços em diferentes nós do cluster, por exemplo

Containers Docker � Docker Swarm Usado para gestão de cluster Orquestração de serviços Rival

Containers Docker � Docker Swarm Usado para gestão de cluster Orquestração de serviços Rival do Kubernetes é uma produto open-source da Google Algoritmo de consenso de Raft O objetivo é garantir execução ótima da aplicação Usando restrições impostas Assumindo possibilidade de falhas Possibilitando atualizações dinâmicas

Containers Docker � Docker Swarm Executor Worker 1 Gestor 2 Executor Worker 1 Gestor

Containers Docker � Docker Swarm Executor Worker 1 Gestor 2 Executor Worker 1 Gestor 3 Executor Worker 1

Containers Docker � Docker Swarm

Containers Docker � Docker Swarm

Containers Docker � Docker Gestor Swarm (Manager) Responsável pela filiação (membership) e delegação de

Containers Docker � Docker Gestor Swarm (Manager) Responsável pela filiação (membership) e delegação de tarefas (tasks) Trabalhador (Worker) Executa as tarefas (tasks) atribuídas a ele Entidade de execução Executor Executam os services Canais de comunicação entre gestores e trabalhadores

Containers Docker � Docker Swarm Agora, um serviço (parte de uma aplicação) é um

Containers Docker � Docker Swarm Agora, um serviço (parte de uma aplicação) é um grupo escalável de containers idênticos Balanceamento Alocação “ótima” de containers por máquina Distribuição de carga entre containers idênticos Ex: atender requisições HTTP em múltiplas máquinas Serviço de carga DNS embutido Encontrar rapidamente as máquinas do cluster

Containers Docker � Docker Swarm da diversão. . . Formar um cluster com 3

Containers Docker � Docker Swarm da diversão. . . Formar um cluster com 3 VMs my-node 1 my-node 2 Hora default Usar o boot 2 docker. iso Já temos 1 das VMs! docker-machine create --driver virtualbox my-node 1 docker-machine create --driver virtualbox my-node 2

Containers Docker � Docker Swarm Abrir dois terminais para monitorar os nós criados Em

Containers Docker � Docker Swarm Abrir dois terminais para monitorar os nós criados Em cada terminal docker-machine ssh my-node 1 docker-machine ssh my-node 2 Iniciar o cluster No terminal do nó default docker swarm init --advertise-addr 192. 168. 99. 100 IP definido na VM do nó default

Containers Docker � Docker Em Swarm cada terminal docker swarm join --token BLABLABLA 192.

Containers Docker � Docker Em Swarm cada terminal docker swarm join --token BLABLABLA 192. 168. 99. 100: 2377 Use copiar-e-colar para isso Miss the token § docker swarm join-token [manager|worker] Pronto. . . temos um cluster! default também será um worker! my-node 1 my-node 2 default

Containers Docker � Docker Para examinar a rede docker network ls docker network inspect

Containers Docker � Docker Para examinar a rede docker network ls docker network inspect <rede> Para examinar a execução dos containers docker ps -a Como antes! Para Swarm examinar os nós docker node ls docker node inspect <nó> docker node inspect --pretty <nó>

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para usar vários containers distribuídos no cluster Potencial DDo. S Faremos manualmente usando docker cmd Poderia ser executado com docker-compose

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para usar vários containers distribuídos no cluster docker service create --replicas=1 --name ddos alpine ping docker. com docker service ls docker service inspect --pretty ddos docker ps –a

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para usar vários containers distribuídos no cluster Vamos agora ampliar o número de réplicas docker service scale ddos=5 service ls service inspect --pretty ddos ps –a

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para usar vários containers distribuídos no cluster Precisamos interromper o uso do nó my-node 1 Para manutenção, por exemplo docker node update --availability drain mynode 1 active drain “move” containers para os demais nós disponíveis

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para

Containers Docker � Docker Swarm Criar um serviço fake usando ping e replicá-lo para usar vários containers distribuídos no cluster Reestabelecendo nó my-node 1 docker node update --availability active my -node 1 drain active Não faz qualquer re-distribuição de tarefas. Estados possíveis active, pause, drain

Containers Docker � Docker Swarm Criar um serviço nginx com roteamento automático no cluster/balanceamento

Containers Docker � Docker Swarm Criar um serviço nginx com roteamento automático no cluster/balanceamento de carga Routing mesh docker service create --name my-web -publish 8080: 80 --replicas 2 nginx Note: 2 containers vs 3 nós docker-machine ls Para capturar os IPs dos nós

Containers Docker � Docker Swarm Criar um serviço nginx com roteamento automático no cluster/balanceamento

Containers Docker � Docker Swarm Criar um serviço nginx com roteamento automático no cluster/balanceamento de carga Routing mesh Abra navegador em http: //192. 168. 99. 100: 8080/ http: //192. 168. 99. 101: 8080/ http: //192. 168. 99. 102: 8080/

Containers Docker � Docker Swarm Criar um serviço nginx com roteamento automático no cluster/balanceamento

Containers Docker � Docker Swarm Criar um serviço nginx com roteamento automático no cluster/balanceamento de carga Routing mesh docker service update --replicas 5 my-web docker service update --replicas 1 my-web

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços em multimáquinas Exemplo: Crie o diretório C: Users<login>dockercompose 3 <login> Baixe o arquivos. . . nesse diretório Abra o arquivo docker-compose. yml Note o nome da imagem armazenar em Docker Hub cd /C/Users/<login>/docker/compose 3 /<login>

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços em multimáquinas Exemplo: Construir as imagens docker-compose up -d docker-compose down --volume docker images

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços em multimáquinas Exemplo: Registrar (upload) a imagem em um repositório docker-compose push § No caso, a imagem ficará no Docker Hub

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços em multimáquinas Exemplo: Implantar (deploy) a pilha no cluster docker stack deploy --compose-file docker-compose. yml stackdemo docker stack services stackdemo docker stack ps stackdemo

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços em multimáquinas Exemplo: Implantar (deploy) a pilha no cluster docker ps -a § Cheque os diferentes nós § Acesse a página http: //192. 168. 99. 100: 5000/

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços

Containers Docker � Docker Stack Implantar uma pilha de aplicação em um cluster Multisserviços em multimáquinas Exemplo: Encerrando a pilha de aplicação docker network ls docker stack rm stackdemo docker stack ps stackdemo

Containers Docker

Containers Docker