Baixe o app para aproveitar ainda mais
Prévia do material em texto
E rik H enrique P inheiro / erikpinheiro@ gm ail.com 540 Docker DCA E rik H enrique P inheiro / erikpinheiro@ gm ail.com Sumário 1 Preparando o ambiente de aprendizado 3 1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 VirtualBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 LAB 1 – Instalar e configurar o VirtualBox . . . . . . . . . . . . . . . . . . . 3 1.3.1 Sistema operacional Windows . . . . . . . . . . . . . . . . . . . . . . 4 1.3.2 Sistema operacional Linux . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.3 Sistema operacional Mac OS X . . . . . . . . . . . . . . . . . . . . . 9 1.3.4 Configuração do VirtualBox Extension Pack em Windows/Linux/Mac . 13 1.4 Ansible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.5 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.6 LAB 2 – Instalar o Ansible e Git . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.6.1 Sistema Operacional Windows . . . . . . . . . . . . . . . . . . . . . . 17 1.6.2 Sistema operacional Linux . . . . . . . . . . . . . . . . . . . . . . . . 29 1.6.3 Sistema operacional Mac OS X . . . . . . . . . . . . . . . . . . . . . 30 1.7 Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.8 LAB 3 – Instalar o Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.8.1 Sistema operacional Windows . . . . . . . . . . . . . . . . . . . . . . 32 1.8.2 Sistema operacional Linux . . . . . . . . . . . . . . . . . . . . . . . . 35 2 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 3 SUMÁRIO 1.8.3 Sistema operacional Mac OS X . . . . . . . . . . . . . . . . . . . . . 36 1.9 Obtendo os arquivos para aprendizado . . . . . . . . . . . . . . . . . . . . . . 40 1.10 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2 Introdução e instalação do Docker 42 2.1 Introdução ao Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.1.2 Ambiente Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.1.3 Docker Editions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.2 Plataformas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.3 Arquitetura e requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.3.1 Arquitetura Docker Engine . . . . . . . . . . . . . . . . . . . . . . . 45 2.3.2 Arquitetura Docker UCP . . . . . . . . . . . . . . . . . . . . . . . . 45 2.3.3 Requisitos de hardware e software para Docker UCP . . . . . . . . . . 46 2.3.4 Requisitos da distribuição Linux . . . . . . . . . . . . . . . . . . . . . 47 2.4 Docker namespaces e Cgroups . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.4.1 Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.4.2 Cgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.5 LAB 1.1 – Acessar as máquinas virtuais . . . . . . . . . . . . . . . . . . . . . 48 2.6 LAB 1.2 – Instalação do Docker no Linux . . . . . . . . . . . . . . . . . . . . 49 2.6.1 Instalar o Docker em ambientes Windows Desktop . . . . . . . . . . . 52 2.6.2 Instalar o Docker em ambiente Windows Server . . . . . . . . . . . . . 52 2.6.3 Instalar o Docker em ambientes Mac OS X . . . . . . . . . . . . . . . 52 2.7 LAB 1.3 – Comandos essenciais do Docker . . . . . . . . . . . . . . . . . . . 52 2.8 Gerenciar Logging Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . 55 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 4 SUMÁRIO 2.8.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.8.2 Configurar o driver de log para um container . . . . . . . . . . . 55 2.8.3 Log padrão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.9 LAB 1.4 – Alterar log padrão no Docker . . . . . . . . . . . . . . . . . . . . 56 2.9.1 Syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.9.2 Journald . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.10 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3 Gerenciar imagens no Docker 60 3.1 Introdução à imagens no Docker . . . . . . . . . . . . . . . . . . . . . . . . 60 3.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.1.2 Camadas em uma Imagem Docker . . . . . . . . . . . . . . . . . 61 3.1.3 Containers e camadas de imagem . . . . . . . . . . . . . . . . . . 62 3.2 Docker Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.2.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.3 LAB 2.1 – Criar conta no Docker Hub . . . . . . . . . . . . . . . . . . . . . 63 3.3.1 Testar o acesso a sua conta do Docker Hub . . . . . . . . . . . . . . . 66 3.4 LAB 2.2 – Gerenciamento de imagens no Docker . . . . . . . . . . . . . . . . 68 3.4.1 Comandos iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.4.2 Backup e restauração de Imagens . . . . . . . . . . . . . . . . . . . . 69 3.5 Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.5.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.5.2 Instruções do Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.6 LAB 2.3 – Criar imagem no Docker com Dockerfile . . . . . . . . . . . . . . . 72 3.6.1 Imagem webserver-wordpress . . . . . . . . . . . . . . . . . . . . . . 73 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 5 SUMÁRIO 3.6.2 Imagem banco-wordpress . . . . . . . . . . . . . . . . . . . . . . . . 74 3.6.3 Executar uma aplicação WordPress com Docker . . . . . . . . . . . . 76 3.7 LAB 2.4 – Enviar imagens ao Docker Hub . . . . . . . . . . . . . . . . . . . 79 3.8 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4 Gerenciar volumes no Docker 81 4.1 Introdução aos volumes Docker . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.2 Volumes x Bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 4.2.1 Vantagens de um volume sobre montagens Bind: . . . . . . . . . . . . 82 4.2.2 Armazenamento compartilhado . . . . . . . . . . . . . . . . . . . . . 83 4.3 Storage drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.4 Avisos e recomendações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.5 LAB 3.1 – Gerenciar volumes no Docker – Parte 1 . . . . . . . . . . . . . . . 85 4.5.1 Mapear volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.5.2 Criar volumes com Docker . . . . . . . . . . . . . . . . . . . . . . . . 86 4.5.3 Usar volume de outro container . . . . . . . . . . . . . . . . . . . . . 87 4.5.4 Remover volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.6 LAB 3.2 – Gerenciar volumes no Docker – Parte 2 . . . . . . . . . . . . . . . 88 4.6.1 Criar volumes personalizados . . . . . . . . . . . . . . . . . . . . . . 88 4.6.2 Realizar backup de volumes . . . . . . . . . . . . . . . . . . . . . . . 89 4.6.3 Realizar restauração de volumes . . . . . . . . . . . . . . . . . . . . . 89 4.7 Introdução aos pontos de montagem Bind . . . . . . . . . . . . . . . . . . . 90 4.7.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.7.2 Uso de flags: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 6 SUMÁRIO 4.8 LAB 3.3 – Gerenciar Bind Mounts no Docker . . . . . . . . . . . . . . . . . . 91 4.8.1 Executar contêiner usando Bind Mounts . . . . . . . . . . . . . . . . 91 4.8.2 Uso de pontosde montagem somente leitura . . . . . . . . . . . . . . 92 4.8.3 Montagem em um diretório ocupado no contêiner . . . . . . . . . . . 92 4.9 Introdução aos plugins de volume . . . . . . . . . . . . . . . . . . . . . . . . 93 4.9.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.9.2 Plugins de volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.10 LAB 3.4 - Gerenciar volumes utilizando plugins . . . . . . . . . . . . . . . . . 96 4.10.1 Instalação do plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.10.2 Criar um volume utilizando plugin . . . . . . . . . . . . . . . . . . . . 97 4.11 LAB 3.5 – Gerenciar volumes NFS . . . . . . . . . . . . . . . . . . . . . . . 99 4.11.1 Preparando o servidor NFS . . . . . . . . . . . . . . . . . . . . . . . 99 4.11.2 Preparar o cliente NFS . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.11.3 Criar volumes persistentes no servidor web . . . . . . . . . . . . . . . 100 4.12 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5 Gerenciar redes no Docker 103 5.1 Introdução às redes Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5.1.2 Modelo de rede de um container . . . . . . . . . . . . . . . . . . . . 104 5.2 Drivers de rede nativos do Docker . . . . . . . . . . . . . . . . . . . . . . . . 104 5.2.1 Descrição dos drivers de rede . . . . . . . . . . . . . . . . . . . . . . 105 5.3 Tipos de rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.3.1 Host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.3.2 Bridge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 7 SUMÁRIO 5.3.3 Overlay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 5.4 Portas, Links e DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 5.4.1 Uso de portas no Docker . . . . . . . . . . . . . . . . . . . . . . . . 106 5.4.2 Uso de links no Docker . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.4.3 Uso de DNS no Docker . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.5 LAB 4.1 - Gerenciar portas, links e DNS no Docker . . . . . . . . . . . . . . . 107 5.5.1 Gerenciar portas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.5.2 Gerenciar links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 5.5.3 Gerenciar DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5.6 LAB 4.2 – Gerenciar redes host e bridge no Docker . . . . . . . . . . . . . . . 111 5.6.1 Rede bridge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 5.6.2 Rede host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.7 LAB 4.3 – Comandos de gerenciamento de redes no Docker . . . . . . . . . . 113 5.7.1 Utilizar a rede padrão . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.7.2 Criar redes personalizadas . . . . . . . . . . . . . . . . . . . . . . . . 114 5.7.3 Utilizar IP fixo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 5.7.4 Remover rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5.8 Plugins de rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 5.8.1 Plugins de Rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 5.9 LAB 4.4 – Instalar plugin de rede no Docker . . . . . . . . . . . . . . . . . . 116 5.9.1 Instalação do plugin de rede Weave Net . . . . . . . . . . . . . . . . . 117 5.10 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 6 Gerenciar Docker Registry e Compose 119 6.1 Introdução ao Docker Registry . . . . . . . . . . . . . . . . . . . . . . . . . . 119 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 8 SUMÁRIO 6.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.2 LAB 5.1 – Instalação do Docker Registry . . . . . . . . . . . . . . . . . . . . 120 6.3 LAB 5.2 – Configurar certificados e autenticação básica . . . . . . . . . . . . 121 6.4 LAB 5.3 – Configurar o acesso aos clientes . . . . . . . . . . . . . . . . . . . 123 6.4.1 Configurar clientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 6.4.2 Enviar imagens para o Docker Registry . . . . . . . . . . . . . . . . . 124 7 Orquestrar ambientes com Docker Compose 126 7.1 Introdução ao Docker Compose . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.2 LAB 5.4 – Instalação do Docker Compose . . . . . . . . . . . . . . . . . . . 127 7.3 LAB 5.5 – Docker Compose: comandos essenciais . . . . . . . . . . . . . . . 128 7.4 LAB 5.6 – Docker Compose: gerenciar volumes e redes . . . . . . . . . . . . 129 7.5 LAB 5.7 – Gerenciar Registry com Docker Compose . . . . . . . . . . . . . . 131 7.5.1 Instalação do Docker Compose . . . . . . . . . . . . . . . . . . . . . 131 7.5.2 Instalação do Docker Compose em Mac OS X ou Windows . . . . . . 132 7.5.3 Configuração do arquivo docker-compose.yml . . . . . . . . . . . . . . 132 7.6 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 8 Gerenciar Cluster com Docker Swarm 134 8.1 Introdução ao Docker Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . 134 8.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 8.1.2 Funcionamento do Swarm . . . . . . . . . . . . . . . . . . . . . . . . 135 8.1.3 O nó manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 8.1.4 O nó worker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 9 SUMÁRIO 8.2 LAB 6.1 – Criar um cluster com Docker Swarm . . . . . . . . . . . . . . . . . 136 8.3 LAB 6.2 – Gerenciamento de nós no cluster Swarm . . . . . . . . . . . . . . . 138 8.3.1 Listar nós . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 8.3.2 Definir labels (rótulos) . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.3.3 Inspecionar o nó . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 8.3.4 Remover nó do Cluster . . . . . . . . . . . . . . . . . . . . . . . . . 140 8.3.5 Promoção dos nós no Cluster . . . . . . . . . . . . . . . . . . . . . . 141 8.3.6 Reverter promoção de um nó . . . . . . . . . . . . . . . . . . . . . . 143 8.4 Manutenção no cluster Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . 144 8.5 LAB 6.3 – Realizar manutenção no cluster Swarm . . . . . . . . . . . . . . . 144 8.5.1 Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 8.5.2 Active . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8.5.3 Drain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8.5.4 Lock e Unlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 8.6 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 9 Gerenciamento de serviços no Docker Swarm 151 9.1 Serviços e tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 9.1.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 9.1.2 Tarefas e agendamento . . . . . . . . . . . . . . . . . . . . . . . . . 152 9.1.3 Serviços replicados e globais . . . . . . . . . . . . . . . . . . . . . . . 152 9.2 LAB 7.1 – Gerenciar serviço no cluster Swarm . . . . . . . . . . . . . . . . . 153 9.2.1 Criar um serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 9.2.2 Atualizar serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 9.2.3 Escalonar serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 E rik H enrique P inheiro / erikpinheiro@ gm ail.com10 SUMÁRIO 9.2.4 Rollback de serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 9.2.5 Remover serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.2.6 Alterar o modo de replicação em um serviço . . . . . . . . . . . . . . 156 9.2.7 Visualizar logs de serviço . . . . . . . . . . . . . . . . . . . . . . . . 157 9.2.8 Limitar recursos computacionais em um serviço . . . . . . . . . . . . . 157 9.3 LAB 7.2 – Utilizar redes overlay no cluster Swarm . . . . . . . . . . . . . . . 158 9.3.1 Criar rede do tipo overlay . . . . . . . . . . . . . . . . . . . . . . . . 158 9.3.2 Criar rede utilizando o plugin Weave Net . . . . . . . . . . . . . . . . 160 9.4 LAB 7.3 – Utilizar rede e volume em serviços . . . . . . . . . . . . . . . . . . 161 9.5 LAB 7.4 – Utilizar secrets em serviços . . . . . . . . . . . . . . . . . . . . . . 165 9.6 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 10 Routing Mesh e balanceamento de carga 168 10.1 Introdução ao Routing Mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.1.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.1.2 Routing Mesh: Ingress x Host . . . . . . . . . . . . . . . . . . . . . . 169 10.2 LAB 8.1 – Gerenciar serviços no modo ingress . . . . . . . . . . . . . . . . . 170 10.3 LAB 8.2 – Gerenciar serviços no modo host . . . . . . . . . . . . . . . . . . . 175 10.4 Descoberta de serviços: VIP e DNSRR . . . . . . . . . . . . . . . . . . . . . 178 10.4.1 VIP x DNSRR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 10.5 LAB 8.3 – Descoberta de serviços: VIP e DNSRR . . . . . . . . . . . . . . . 179 10.5.1 VIP Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 10.5.2 DNSRR Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 10.5.3 Testar a descoberta de serviços . . . . . . . . . . . . . . . . . . . . . 180 10.6 Balanceamento de carga com Traefik . . . . . . . . . . . . . . . . . . . . . . 182 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 11 SUMÁRIO 10.6.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 10.6.2 Conhecendo o Traefib . . . . . . . . . . . . . . . . . . . . . . . . . . 182 10.6.3 Load balance utilizando Traefik . . . . . . . . . . . . . . . . . . . . . 183 10.6.4 Resolução de nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 10.7 LAB 8.4 – Balanceamento de carga com Traefik . . . . . . . . . . . . . . . . 184 10.7.1 Criar serviço do Traefik no cluster . . . . . . . . . . . . . . . . . . . . 184 10.7.2 Criar serviços no cluster . . . . . . . . . . . . . . . . . . . . . . . . . 185 10.7.3 Acessar o dashboard do Traefik . . . . . . . . . . . . . . . . . . . . . 187 10.7.4 Alterar os arquivos index.html dos containers . . . . . . . . . . . . . . 188 10.8 LAB 8.5 – Redirecionar URLs com Traefik . . . . . . . . . . . . . . . . . . . 192 10.8.1 Criar serviços no cluster . . . . . . . . . . . . . . . . . . . . . . . . . 192 10.8.2 Alterar os arquivos index.html dos containers . . . . . . . . . . . . . . 192 10.9 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 11 Gerenciar stacks no cluster Swarm e dashboard 196 11.1 Introdução a stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 11.1.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 11.2 LAB 9.1 – Gerenciar serviços utilizando stacks . . . . . . . . . . . . . . . . . 198 11.2.1 Criar stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 11.2.2 Atualizar stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 11.2.3 Remover Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 11.3 LAB 9.2 – Gerenciar réplicas, limites, volumes e redes utilizando Stacks . . . . 201 11.3.1 Escalonar serviços e gerenciar limites . . . . . . . . . . . . . . . . . . 202 11.3.2 Utilizar volume e rede em stacks . . . . . . . . . . . . . . . . . . . . 203 11.3.3 Integrando Traefik com stacks . . . . . . . . . . . . . . . . . . . . . . 204 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 12 SUMÁRIO 12 Gerenciamento gráfico do Docker com Portainer 207 12.1 Introdução ao Portainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 12.1.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 12.2 LAB 9.3 – Instalar o Portainer no cluster Swarm . . . . . . . . . . . . . . . . 207 12.2.1 Instalação do Portainer . . . . . . . . . . . . . . . . . . . . . . . . . 208 12.3 LAB 9.4 – Acessaro painel do Portainer . . . . . . . . . . . . . . . . . . . . . 210 12.4 LAB 9.5 – Gerenciar stacks com Portainer . . . . . . . . . . . . . . . . . . . 213 12.5 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 13 Provisionar ambientes com Docker Machine 219 13.1 Introdução ao Docker Machine . . . . . . . . . . . . . . . . . . . . . . . . . 219 13.1.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 13.2 Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 13.2.1 Virtualbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 13.2.2 Vmware (Fusion/vSphere/vCloud Air) . . . . . . . . . . . . . . . 220 13.2.3 DigitalOcean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 13.2.4 AWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 13.2.5 Google Cloud Platform . . . . . . . . . . . . . . . . . . . . . . . . 221 13.2.6 Exoscale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 13.2.7 OpenStack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 13.3 LAB 10.1 – Instalação do Docker Machine . . . . . . . . . . . . . . . . . . . 221 13.3.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 13.3.2 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 13.3.3 Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 13.4 LAB 10.2 – Provisionar ambientes Docker no Virtualbox . . . . . . . . . . . . 222 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 13 SUMÁRIO 13.4.1 Comandos iniciais Docker Machine . . . . . . . . . . . . . . . . . 223 13.4.2 Comandos de gerenciamento do Docker Machine . . . . . . . . 223 13.5 Provisionar ambiente Docker na nuvem . . . . . . . . . . . . . . . . . . . . . 227 13.5.1 Google Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 13.5.2 Etapas: criar instância no Google Cloud através do Docker Machine: . 228 13.5.3 Digital Ocean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 13.5.4 Etapas: criar instância no Digital Ocean através do Docker Machine: . 228 13.5.5 Amazon Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . 229 13.5.6 Etapas: criar instância na AWS através do Docker Machine: . . . . . . 229 13.6 LAB 10.3 – Cluster Swarm com Trafiek através do Docker Machine . . . . . . 229 13.6.1 ETAPA 1 - Criar máquinas virtuais no cluster Swarm . . . . . . 229 13.6.2 ETAPA 2 – Criar um cluster Swarm utilizando as máquinas virtuais do Docker Machine . . . . . . . . . . . . . . . . . . . . . 230 13.6.3 ETAPA 3 – Criar serviço do Traefik no cluster Swarm . . . . . . . . . 232 13.6.4 ETAPA 4 – Definir labels para os nós worker no cluster Swarm . . . . 232 13.6.5 ETAPA 5 – Realizar Deploy do Wordpress no Cluster Swarm . . . . . . 233 13.6.6 ETAPA 6 – Acessar aplicação Wordpress no cluster Swarm . . . . . . . 235 13.6.7 ETAPA 7 – Removendo máquinas virtuais do cluster Swarm . . . . . . 238 13.7 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 14 Extra: introdução e instalação do Docker UCP 240 14.1 Introdução ao Docker UCP . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 14.1.1Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 14.1.2 Requisitos de instalação Docker UCP . . . . . . . . . . . . . . . 241 14.1.3 Atualização do Docker UCP . . . . . . . . . . . . . . . . . . . . . . . 241 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 14 SUMÁRIO 14.2 LAB 11.1 – Instalar o Docker UCP . . . . . . . . . . . . . . . . . . . . . . . 241 14.2.1 Cluster Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 14.2.2 Docker UCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 14.3 LAB 11.2 – Acesso ao painel do Docker UCP . . . . . . . . . . . . . . . . . . 245 14.4 LAB 11.3 – Gerenciar nós através do Docker UCP . . . . . . . . . . . . . . . 248 14.5 LAB 11.4 – Realizar backup e restauração do Docker UCP . . . . . . . . . . . 252 14.5.1 Exibir id do Docker UCP . . . . . . . . . . . . . . . . . . . . . . . . 252 14.5.2 Backup do UCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 14.5.3 Desinstalação do Docker UCP . . . . . . . . . . . . . . . . . . . . 257 14.5.4 Restore do Docker UCP . . . . . . . . . . . . . . . . . . . . . . . 258 14.6 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 15 Extra: introdução e instalação do DTR 262 15.1 Introdução ao DTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 15.1.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 15.1.2 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 15.1.3 Funcionalidades do DTR . . . . . . . . . . . . . . . . . . . . . . . . . 263 15.2 LAB 12.1 – Instalação do DTR . . . . . . . . . . . . . . . . . . . . . . . . . 264 15.3 LAB 12.2 – Enviar imagem para o DTR . . . . . . . . . . . . . . . . . . . . . 267 15.4 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 16 Extra: configuração RBAC no Docker UCP 270 16.1 RBAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 16.1.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 16.1.2 Componentes do RBAC . . . . . . . . . . . . . . . . . . . . . . . . . 271 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 15 SUMÁRIO 16.2 LAB 13.1 – Configurar equipes e usuários e no Docker UCP . . . . . . . . . . 271 16.2.1 Adicionar equipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 16.2.2 Adicionar usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 16.2.3 Associar um usuário a uma equipe . . . . . . . . . . . . . . . . . . . . 276 16.3 LAB 13.2 – Configurar Access Control no Docker UCP . . . . . . . . . . . . . 280 16.3.1 Criar role (regras) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 16.3.2 Conceder acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 17 Extra: Docker Security 288 17.1 Áreas principais na segurança do Docker . . . . . . . . . . . . . . . . . . . . 288 17.1.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 17.2 LAB 14.1 – Gerenciar imagens com Docker Content Trust . . . . . . . . . . . 290 17.2.1 Realizar o download . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 17.2.2 Realizar o upload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 17.3 Certificados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 17.3.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 17.4 LAB 14.2 – Utilizar certificados externos no Docker UCP . . . . . . . . . . . 294 17.5 Client Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 17.6 LAB 14.3 – Criar pacote para clientes no Docker UCP . . . . . . . . . . . . . 298 17.6.1 Gerar pacote via download no painel . . . . . . . . . . . . . . . . . . 299 17.6.2 Gerar pacote via download no terminal . . . . . . . . . . . . . . . . . 301 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 1 Preparando o ambiente de aprendizado Objetivos • Instalar e configurar o VirtualBox • Instalar o Ansible • Instalar o Git • Instalar o Vagrant • Obter os arquivos necessários para o aprendizado VirtualBox O VirtualBox [1] é um software de virtualização desenvolvido pela empresa Innotek. Pre- cisamos do VirtualBox em nossa infraestrutura para gerenciar as máquinas virtuais que serão apresentadas neste material. LAB 1 – Instalar e configurar o VirtualBox Neste laboratório vamos aprender como instalar e configurar, o VirtualBox nos sistemas op- eracionais Windows, Linux e Mac. 16 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 17 1. PREPARANDO O AMBIENTE DE APRENDIZADO Sistema operacional Windows Para começar, acesse o site do VirtualBox, clique em Downloads e clique na opção Windows hosts: Fig. 1.1: Download do Virtualbox para Windows Clique duas vezes no arquivo executável do instalador e siga as instruções de instalação con- forme a imagem a seguir: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 18 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.2: Download do Virtualbox para Windows-1 Após realizar a instalação clique no botão Finish: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 19 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.3: Instalação do Virtualbox no Windows Verifique se o VirtualBox foi instalado corretamente em seu sistema: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 20 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.4: Tela inicial do Virtualbox no Windows Sistema operacional Linux Acesse o site do Virtualbox, clique em Downloads e clique na opção Linux distributions: Fig. 1.5: Download do Virtualbox para Linux E rik H enrique P inheiro / erikpinheiro@ gm ail.com 21 1. PREPARANDO O AMBIENTE DE APRENDIZADO Selecione a sua distribuição para realizar o download do pacote de instalação. No exemplo apresentado, será feito o download para a distribuição Ubuntu: Fig. 1.6: Download do Virtualbox - Escolha da distribuição Linux Selecione a opção para salvar o arquivo: Fig. 1.7: Download do Virtualbox para Linux E rik H enrique P inheiro / erikpinheiro@ gm ail.com 22 1. PREPARANDO O AMBIENTE DE APRENDIZADO Acesse a pasta onde o pacote de instalação do VirtualBox foi salvo após o download e realize a instalação conforme a sua distribuição. Exemplos: Debian/Ubuntu: 1 sudo dpkg -i $HOME/Downloads/virtualbox-<versão>.deb 2 sudo apt install -f Oracle Linux/openSUSE/Fedora: 1 sudo rpm -i $HOME/Downloads/virtualbox-<versão>.rpm Verifique se o VirtualBox foi instalado corretamente em seu sistema: Fig. 1.8: Tela inicial do Virtualbox no Linux Sistema operacional Mac OS X Para começar acesse o site do VirtualBox, clique em Downloads e clique na opção OS X hosts: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 23 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.9: Download do Virtualbox para Mac OS X Clique duas vezes no arquivo DMG para montar o disco de instalação do VirtualBox: Fig. 1.10: Disco de instalação do Virtualbox para Mac OS X Dê um duplo clique no arquivo VirtualBox.pkg e siga as instruções de instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 24 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.11: Instalação do Virtualbox no Mac OS X Após realizar a instalação clique no botão Fechar: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 25 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.12: Instalação do Virtualbox no Mac OS X Verifique se o VirtualBox foi instalado corretamente em seu sistema: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 26 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.13: Tela inicial do Virtualbox no Mac OS X Configuração do VirtualBox Extension Pack em Windows/Linux/Mac Realize o download do Extension pack na área de downloads do site do VirtualBox, clicando em All supported platforms: Fig. 1.14: Download do Extension Pack para o Virtualbox Cliqueduas vezes no arquivo Oracle_VM_VirtualBox_Extension_Pack-<versão>.vbox-extpack para iniciar a instalação do pacote. Na janela do Virtualbox clique no botão Instalar: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 27 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.15: Instalação do Extension Pack para o Virtualbox Clique Eu concordo (A) na tela seguinte para aceitar a licença de uso: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 28 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.16: Instalação do Extension Pack para o Virtualbox Confirme a instalação do Extension Pack e clique no botão OK. E rik H enrique P inheiro / erikpinheiro@ gm ail.com 29 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.17: Instalação do Extension Pack para o Virtualbox Ansible O Ansible [2] é um software utilizado para gerenciar a orquestração da sua infraestrutura através de código. Precisamos do Ansible em nossa infraestrutura para provisionar as máquinas virtuais que serão utilizadas durante o aprendizado deste conteúdo. Git Também faremos uso do versionador de código Git [3], que será utilizado para gerenciar seus códigos através de repositórios públicos e privados. Precisamos do Git em nossa infraestrutura, para obter os arquivos apresentados neste material através do endereço GitHub da 4Linux. E rik H enrique P inheiro / erikpinheiro@ gm ail.com 30 1. PREPARANDO O AMBIENTE DE APRENDIZADO LAB 2 – Instalar o Ansible e Git Neste laboratório vamos aprender como instalar o Git e o Ansible nos sistemas operacionais Windows, Linux e Mac. Sistema Operacional Windows Antes de iniciar a instalação do Ansible e Git no Windows, vamos utilizar a ferramenta Cygwin [4]. Essa ferramenta disponibiliza uma coleção de ferramentas open source, que fornecem recursos semelhantes à uma distribuição Linux no Windows. Acesse o site do Cygwin clique em Install Cygwin e em seguida no link setup-x86_64.exe: Fig. 1.18: Download do Cygwin Abra o arquivo executável do instalador e clique no botão Avançar para iniciar a instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 31 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.19: Instalação do Cygwin - Etapa 1 Selecione quais pacotes serão baixados da Internet, através da opção Install from Internet. Clique no botão Avançar para continuar a instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 32 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.20: Instalação do Cygwin - Etapa 2 Confirme o diretório em que o Cygwin será instalado. Clique no botão Avançar para continuar a instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 33 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.21: Instalação do Cygwin - Etapa 3 Confirme o diretório onde o Cygwin irá armazenar os arquivos de pacotes e configurações. Clique no botão Avançar para continuar a instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 34 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.22: Instalação do Cygwin - Etapa 4 Selecione o tipo de conexão com a Internet, através da opção Direct Connection. Clique no botão Avançar para continuar a instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 35 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.23: Instalação do Cygwin - Etapa 5 Selecione o endereço do site onde o Cygwin irá baixar os pacotes, através da lista Available Download Sites. Clique no botão Avançar para continuar a instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 36 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.24: Instalação do Cygwin - Etapa 6 Para selecionar o pacote ansible: • Na caixa View selecione a opção Full; • Na caixa Search digite ansible; • Na coluna New, selecione a versão do ansible e ansible-doc; • Na coluna Src?, selecione ansible e ansible-doc. E rik H enrique P inheiro / erikpinheiro@ gm ail.com 37 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.25: Instalação Ansible no Cygwin Para selecionar o pacote git: • Na caixa View selecione a opção Full; • Na caixa Search digite git; • Na coluna New, selecione a versão do git; • Na coluna Src?, selecione git; • Clique no botão Avançar para continuar a instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 38 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.26: Instalação do Git Cygwin Confirme os pacote que serão necessários através do botão Avançar: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 39 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.27: Confirmação dos pacotes ansible, ansible-doc e git no Cygwin Aguarde o download dos pacotes: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 40 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.28: Downloads de pacotes no Cygwin Para finalizar a instalação, marque os ícones, menus e clique no botão Concluir: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 41 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.29: Downloads de pacotes no Cygwin Para confirmar a instalação do Ansible e do Git no Windows, clique duas vezes no ícone Cygwin64 Terminal e digite os seguintes comandos: 1 ansible --version 1 git --version E rik H enrique P inheiro / erikpinheiro@ gm ail.com 42 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.30: Ansible e Git instalados no Windows Sistema operacional Linux Para instalar o Ansible e o Git na distribuição Ubuntu execute os seguintes comandos: 1 sudo apt update 2 sudo apt install software-properties-common -y 3 sudo apt-add-repository --yes --update ppa:ansible/ansible 4 sudo apt install ansible git -y Para instalar o Ansible e o Git na distribuição Debian execute os seguintes comandos: 1 sudo vim /etc/apt/sources.list 2 .... 3 deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main 1 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 2 sudo apt update 3 sudo apt install ansible git -y Para instalar o Ansible e o Git na distribuição Fedora execute o comando: 1 sudo dnf install ansible git E rik H enrique P inheiro / erikpinheiro@ gm ail.com 43 1. PREPARANDO O AMBIENTE DE APRENDIZADO Para instalar o Ansible e o Git na distribuição CentOS execute o comando: 1 yum --enablerepo=epel -y install ansible git Para confirmar a instalação do Ansible e do Git no Linux, execute os comandos: 1 ansible --version 1 git --version Fig. 1.31: Ansible e Git instalados no Linux Sistema operacional Mac OS X Antes de iniciar a instalação do Ansible e do Git no Windows, vamos utilizar a ferramenta Homebrew [5]. Essa ferramenta funciona como um gerenciador de pacotes para o Mac OS X. Para começar acesse o terminal em seu Mac, e digite o comado para instalar o Homebrew: 1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ master/install.sh)" Para instalar o Ansible e o Git através do Homebrew, execute o seguinte comando: 1 brew install ansible git E rik H enrique P inheiro / erikpinheiro@ gm ail.com 44 1. PREPARANDO O AMBIENTE DE APRENDIZADO Para confirmar a instalação do Ansible e do Git no Mac OS X, execute os seguintes comandos: 1 ansible --version 1 git --version Fig. 1.32: Ansible e Git instalados no Mac OS X Vagrant O Vagrant [6] é um software de automação escrito em Ruby e mantido pela empresa Hashicorp. Precisamos do Vagrant em nossa infraestrutura para automatizar a criação da máquinas vir- tuais do curso. LAB 3 – Instalar o Vagrant Neste laboratório vamos aprender como instalar o Vagrant nos sistemas operacionais Windows, Linux e Mac. E rik H enrique P inheiro / erikpinheiro@ gm ail.com 45 1. PREPARANDO O AMBIENTE DE APRENDIZADO Sistema operacional Windows Para começar acesse o site do Vagrant: Fig. 1.33: Site do Vagrant - https://www.vagrantup.com Em seguida clique na opção Download para Windows: Fig. 1.34: Download do Vagrant para Windows E rik H enrique P inheiro / erikpinheiro@ gm ail.com 46 1. PREPARANDO O AMBIENTE DE APRENDIZADO Clique duas vezes no arquivo executável doinstalador e siga as instruções: Fig. 1.35: Instalação do Vagrant no Windows Após realizar a instalação clique no botão Finish: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 47 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.36: Instalação do Vagrant no Windows É preciso reiniciar o sistema para concluir a instalação do Vagrant: Fig. 1.37: Instalação do Vagrant no Windows E rik H enrique P inheiro / erikpinheiro@ gm ail.com 48 1. PREPARANDO O AMBIENTE DE APRENDIZADO Sistema operacional Linux Acesse o site do Vagrant: Fig. 1.38: Site do Vagrant - https://www.vagrantup.com Em seguida clique na opção Download conforme a sua distribuição: Fig. 1.39: Download do Vagrant para Linux Selecione a opção para salvar o arquivo: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 49 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.40: Download do Vagrant para Linux Acesse a pasta onde o pacote de instalação do Vagrant foi salvo e realize a instalação conforme a sua distribuição. Exemplos: Debian/Ubuntu: 1 sudo dpkg -i $HOME/Downloads/vagrant_<versão>.deb 2 sudo apt install -f CentOS: 1 sudo rpm -i $HOME/Downloads/vagrant_<versão>.rpm Sistema operacional Mac OS X Acesse o site do Vagrant: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 50 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.41: Site do Vagrant - https://www.vagrantup.com Em seguida clique na opção Download para MAC OS X: Fig. 1.42: Download do Vagrant para Mac OS X Clique duas vezes no arquivo DMG para montar o disco de instalação do Vagrant: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 51 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.43: Disco de instalação do Vagrant para Mac OS X Clique duas vezes no arquivo vagrant.pkg e siga as instruções de instalação: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 52 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.44: Instalação do Vagrant no Mac OS X Após realizar a instalação clique no botão Fechar: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 53 1. PREPARANDO O AMBIENTE DE APRENDIZADO Fig. 1.45: Instalação do Virtualbox no Mac OS X Obtendo os arquivos para aprendizado Após instalar todas as ferramentas e preparar sua infraestrutura é preciso obter os arquivos para iniciar o aprendizado neste material no Github da 4Linux. Os arquivos são necessários para a instalação e configuração das máquinas virtuais através do Vagrant. Abra um Terminal no Linux ou Mac, ou o Cygwin64 Terminal no Windows, e execute o comando git para clonar o repositório de seu curso. Exemplos: Docker: Código 4540 1 git clone https://github.com/4linux/4540.git Kubernetes: Código 4541 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 54 1. PREPARANDO O AMBIENTE DE APRENDIZADO 1 git clone https://github.com/4linux/4541.git OpenShift: Código 4542 1 git clone https://github.com/4linux/4542.git Para saber o código correto de seu curso, acesse a lista de cursos no site da 4Linux [7]. Links [1] VirtualBox: https://www.virtualbox.org/ [2] Ansible: https://www.ansible.com/ [3] GitHub da 4Linux: https://github.com/4linux [4] Cygwin: https://www.cygwin.com [5] Homebrew: https://brew.sh/index_pt-br [6] Vagrant: https://www.vagrantup.com [7] Lista de cursos da 4Linux: https://4linux.com.br/cursos E rik H enrique P inheiro / erikpinheiro@ gm ail.com 2 Introdução e instalação do Docker Competências deste conteúdo Esta material possui conteúdo que atende aos objetivos das seguintes certificações: Certificação Objetivos DCA (Docker Certified Associate) Installation and Configuration (15% of exam) LPI DevOps Tools Engineer Container Usage (weight: 7) Introdução ao Docker Conceito O Docker é uma plataforma open source que permite o gerenciamento de pacotes de software em ambientes isolados. Foi escrito em Go, linguagem de programação desenvolvida pela Google. O Docker é muito utilizado em ambientes DevOps, pois permite a execução de aplicações distribuídas em containers. Ambiente Docker Um container é uma instância em tempo de execução de uma imagem Docker. Quando exe- cutamos um container, é criada uma área restrita que contém a aplicação e sua dependências bem como arquivos de configurações, binários e bibliotecas. A máquina hospedeira ou Host 55 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 56 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER OS, consegue criar diversos ambientes de forma independente e comparado ao modelo tradi- cional de virtualização O uso de containers permite executar aplicações de forma instantânea e isolada. Conforme a imagem abaixo podemos ver a diferença entre executar aplicações em container e em máquinas virtuais. Fig. 2.1: Ambiente Docker Docker Editions Docker Community A Docker Community Edition -- CE, é a edição de código aberto disponível gratuitamente e suportada pela comunidade. Contém o mecanismo Docker e a orquestração Swarm integrada à rede e à segurança. Seu uso é recomendado por desenvolvedores para testes, treinamento e aprendizado, sendo a primeira escolha para quem deseja ter experiência prática com Docker. O Docker Community Edition é ideal para desenvolvedores e pequenas equipes que querem começar a utilizar o Docker e experimentar aplicativos baseados em container. O Docker CE possui três tipos de canais de atualização, stable, test e nightly: • Stable: fornece os últimos lançamentos estáveis do ambiente; • Test: fornece pré-versões que estão prontas para teste, antes que esta se torne uma versão stable; • Nightly: compilações diárias da plataforma que oferecem as mais recentes versões pre- vistas para lançamento. Fonte: https://docs.docker.com/engine/install/ Docker Enterprise E rik H enrique P inheiro / erikpinheiro@ gm ail.com 57 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER O Docker Enterprise Edition – é uma edição utilizada em ambientes de produção disponível em três versões: básico, padrão e avançado. Para ser suportado pelo Docker, é preciso que seu hardware atenda à lista de compatibilidade de hardware e com isso seja certificada pelo Docker. A versão Docker Enterprise Advanced Edition, inclui a verificação segura de imagens, garantindo que qualquer imagem de container no seu repositório seja segura e livre de código malicioso. Foi projetado também para desenvolvimento de empresas e equipes de TI que constroem, enviam e executam aplicativos críticos de negócios e produção em escala. é integrado, certificado e suportado para fornecer às empresas a plataforma de containers mais segura da indústria para modernizar aplicações. Além disso, o Docker EE Advanced vêm com adicionais corporativos como UCP e DTR. Plataformas O Docker Community Edition pode ser executado tanto no sistema operacional GNU/Linux, MacOS X, quanto no Windows 10, caso você esteja usando o Docker para desenvolvimento, treinamento ou aprendizado local. O Docker Enterprise Edition também é executado em uma variedade de diferentes distribuições Linux e no Microsoft Windows Server 2016. O Docker Enterprise Edition e o Docker Community Edition podem ser executados na nuvem pública. E essa é uma das grandes vantagens do Docker, os containers criados e executados em um ambiente de teste local ou em um desktop, podem ser facilmente ser movidos para a nuvem pública ou para um servidor que execute esses contêineres em produção. Antes de instalar o Docker Enterprise é preciso fazer uma verificação de requisitos dos seguintes itens: • Portas de rede: uma série de portas precisam ser abertas para o tráfego de entrada de dados. • Espaço em disco: é preciso 5GB de espaço livre em disco para a partição /var para os nós manager (é recomendado um mínimo de 6GB) e 500 MB de espaço livre para a partição /var para os nós worker. A partição /var é utilizada pelo Docker para armazenar containers e imagens. • Sincronização de horário: em sistemas distribuídos, como o Docker UCP, a sin- cronização de tempo é fundamental para garantir a operação adequada. Como prática recomendada para garantir aconsistência entre os mecanismos de um cluster UCP, todos os mecanismos devem sincronizar regularmente o tempo com um servidor NTP (Network Time Protocol). • Compatibilidade da versão do Docker Engine, DTR e UCP: o Docker EE é uma assi- natura de software que inclui três produtos: Docker Engine, com suporte de nível corpo- rativo, registro confiável do Docker (TR) e também o Docker Universal Control Plane E rik H enrique P inheiro / erikpinheiro@ gm ail.com 58 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER (UCP) Arquitetura e requisitos Arquitetura Docker Engine O Docker Engine é projetado como um aplicativo cliente-servidor, sendo composto por três itens diferentes, começando pelo dockerd ou daemon do Docker, que é instalado automatica- mente na instalação do Docker, sendo esse serviço o próprio servidor Docker. Vale lembrar que o termo daemon é utilizado para definir um programa que é executado como um processo em background. Juntamente com a instalação do Docker Engine, você recebe uma API RESTful. Ela é im- portante porque define a interface que todos os outros programas utilizam para falar com o daemon. O cliente é o comando docker que é executado para se comunicar com o servidor Docker, a fim de extrair e criar imagens e também instanciar containers. Independentemente da versão do Docker que você esteja usando, seja a Community Edition ou Enterprise Edition, o Docker Engine é a base necessária para tornar tudo isso possível. O daemon está instalado no host do Docker. Esse host pode ser seu computador desktop, laptop, um servidor em um datacenter ou até mesmo uma máquina virtual sendo executada na nuvem. A partir daí, o host do Docker é usado para executar ou instanciar seus containers e imagens. Isso é administrado através do cliente Docker, que pode estar no mesmo host que o daemon ou pode executado remotamente. Fonte: https://docs.docker.com/get-started/overview/ Arquitetura Docker UCP O Universal Control Plane é uma aplicação executada com base no Docker Swarm, que é um orquestrador nativo para o Docker. O Docker UCP permite o gerenciamento gráfico e monitoramento de uma instância Docker. O aplicativo container que é executado no Docker Enterprise Edition, estende sua funcionalidade para simplificar a implantação, a configuração e o monitoramento de seus aplicativos em grande escala. O UCP também protege o Docker com controle de acesso baseado em função, de modo que apenas usuários autorizados possam fazer alterações e implantar aplicativos no cluster do Docker. Depois que a instância é implantada, os desenvolvedores e a equipe de operações não interagem E rik H enrique P inheiro / erikpinheiro@ gm ail.com 59 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER mais com o Docker Engine diretamente, mas interagem com o UCP. Como o UCP expõe a API Docker padrão, tudo isso é feito de maneira transparente, para que você possa usar as ferramentas que já conhece. Fig. 2.2: Arquitetura Docker UCP Fonte: https://docs.mirantis.com/docker-enterprise/v3.0/dockeree-products/ucp.html Requisitos de hardware e software para Docker UCP Hardware • 8 GB de RAM para os nós manager; • 4 GB de RAM para os nós worker; • 2 vCPUs para nós manager; • 4 GB de espaço livre em disco para a partição /var para os nós manager; • 500 MB de espaço livre em disco para a partição /var para nós worker. Software • Docker EE Engine versão 18.09; • Versão do kernel Linux 3.10 ou superior; • Endereço IP estático; • Sincronização de horário através de um servidor NTP. Portas Ao instalar o UCP em um host, uma série de portas precisam ser abertas para o tráfego de entrada. Cada uma dessas portas espera o tráfego de entrada de um conjunto de hosts, indicado como o “Escopo” dessa porta. Os três escopos são: • External: o tráfego chega de fora do cluster, por meio da interação do usuário final; • Internal: o tráfego chega de outros hosts no mesmo cluster; E rik H enrique P inheiro / erikpinheiro@ gm ail.com 60 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER • Self: o tráfego chega a essa porta apenas por meio de processos no mesmo host. Requisitos da distribuição Linux CentOS • Versão 7/8 do CentOS; • Versões inferiores não são suportadas nem testadas; • O repositório centos-extras deve estar ativado; • O driver de armazenamento overlay2 é recomendado. Debian • Versão Buster 10; • Versão Stretch 9 (stable); • O Docker CE é suportado nas arquiteturas x86_64 (ou amd64), armhf e arm64. Fedora • Versão 28/29; • O Docker CE é suportado nas arquiteturas amd64. Ubuntu • Versão Cosmic 18.10; • Versão Bionic 18.04 (LTS); • Versão Xenial 16.04 (LTS); • O Docker CE é suportado nas arquiteturas x86_64 (ou amd64), armhf e arm64. Docker namespaces e Cgroups Namespace Os namespaces asseguram que cada container enxergue apenas o seu próprio ambiente e não afete ou tenha acesso a processos em execução dentro de outros containers. Além disso, os namespaces fornecem acesso restrito aos sistemas de arquivos como, por exemplo, o Chroot, por ter uma estrutura de diretório exclusiva para cada container. O Docker utiliza namespaces de processo, montagem, IPC, rede e usuário para isolar o que está acontecendo no host do Docker do que está acontecendo em seus contêineres. A Microsoft adicionou o equivalente a um isolamento de namespace no Windows, de forma que o Docker E rik H enrique P inheiro / erikpinheiro@ gm ail.com 61 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER para Windows forneça a mesma funcionalidade. Saiba mais executando o comando: man namespaces e conheça todos os recursos fornecidos pelos namespaces. Os namespaces são semelhantes em conceito ao que um hypervisor faz para fornecer os recursos virtuais, como CPU, memória e armazenamento à uma máquina virtual. Cgroups O Docker Engine no Linux, também faz uso de outra tecnologia chamada Cgroups ou grupos de controle. Com o uso do Cgroups, o Docker consegue isolar as aplicações e gerenciar apenas os recursos que você desejar. Os grupos de controle, permitem que o Docker compartilhe recursos de hardware disponíveis para cada container, e se necessário, configure limites e restrições. Para saber mais sobre o Cgroups execute o comando: man cgroups. LAB 1.1 – Acessar as máquinas virtuais Neste laboratório vamos aprender como acessar as máquinas virtuais utilizadas neste material. é necessário seguir os procedimentos da aula Preparando o ambiente de aprendizado, que está disponível aqui ou através das vídeo aulas disponíveis no Netclass [1] da 4Linux . Para começar acesse a pasta 4540 que você obteve do Github da 4Linux: 1 cd 4540 Em seguida verifique se as máquinas virtuais do curso estão presentes, através do Vagrant: 1 vagrant status Resultado do comando: 1 Current machine states: 2 3 manager poweroff (virtualbox) 4 worker01 poweroff (virtualbox) 5 worker02 poweroff (virtualbox) 6 registry poweroff (virtualbox) E rik H enrique P inheiro / erikpinheiro@ gm ail.com 62 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER 7 8 This environment represents multiple VMs. The VMs are all listed 9 above with their current state. For more information about a specific 10 VM, run ‘vagrant status NAME‘. Para iniciar as máquinas virtuais utilize o subcomando up do Vagrant: 1 vagrant up Para acessar as máquinas virtuais utilize o comando vagrant ssh <nome_da_vm>. Exemplos: 1 vagrant ssh manager 1 vagrant ssh worker01 1 vagrant ssh worker02 1 vagrant ssh registry LAB 1.2 – Instalação do Docker no Linux Neste laboratório vamos aprender como instalar o Docker em distribuições baseadas no Red- Hat e Debian. Instalação em distribuições CentOS Para começar acesse a pasta 4540 que você obteve do Github da 4Linux: 1 cd 4540 Em seguida, acesse as máquinas virtuais Manager e Worker01, através do vagrant ssh. 1 vagrant ssh manager E rik H enrique P inheiro / erikpinheiro@ gm ail.com 63 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER 1 vagrant ssh worker01 Para realizar o laboratório, alterne para a conta do usuário suporte. 1 sudo su - suporte Para a instalação em ambas máquinas virtuaisvamos seguir os seguintes passos: 1. Instalar o yum-utils, que fornece o utilitário yum-config-manager 2. Configurar o repositório estável do Docker 3. Instalar o Docker 4. Ativar e iniciar o Docker na inicialização do sistema 5. Adicionar o usuário suporte ao grupo do Docker Conforme a sequência de comandos a seguir: 1 sudo yum install yum-utils device-mapper-persistent-data lvm2 -y 2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/ docker-ce.repo 3 sudo yum install docker-ce docker-ce-cli containerd.io -y 4 sudo systemctl enable docker && sudo systemctl start docker 5 sudo usermod -aG docker suporte && sudo su - suporte Gerenciar o Docker sem um usuário root O daemon do Docker é ligado a um soquete Unix ao invés de uma porta TCP. Por padrão, o soquete Unix é de propriedade do usuário root e outros usuários só podem acessá-lo usando o comando sudo. O daemon do Docker sempre é executado como usuário root. Se você não deseja começar o comando docker com sudo, adicione o usuário ao grupo docker. Desta forma, quando o daemon do Docker é iniciado, ele cria um soquete Unix acessível pelos membros do grupo docker. Sendo assim, verifique qual é a versão instalada do Docker: 1 docker version Instalação em distribuições Ubuntu Para começar, acesse a pasta 4540 que você obteve do Github da 4Linux: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 64 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER 1 cd 4540 Em seguida, acesse as máquinas virtuais Worker02 e Registry, através do vagrant ssh. 1 vagrant ssh worker02 1 vagrant ssh registry Para realizar o laboratório, alterne para a conta do usuário suporte. 1 sudo su - suporte Para a instalação em ambas máquinas virtuais vamos seguir os seguintes passos: 1. Atualizar lista de pacotes de repositórios do sistema 2. Instalar as dependências para o Docker 3. Baixar e configurar a chave pública do repositório 4. Configurar o repositório estável do Docker 5. Atualizar novamente a lista de pacotes dos repositórios configurados 6. Instalar o Docker 7. Adicionar o usuário suporte ao grupo do Docker Conforme a sequência de comandos a seguir: 1 sudo apt-get update 2 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y 3 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 4 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ ubuntu $(lsb_release -cs) stable" 5 sudo apt-get update 6 sudo apt-get install docker-ce docker-ce-cli containerd.io -y 7 sudo usermod -aG docker suporte && sudo su - suporte Verifique qual é a versão instalada do Docker: 1 docker version E rik H enrique P inheiro / erikpinheiro@ gm ail.com 65 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER Instalar o Docker em ambientes Windows Desktop Acesse o link abaixo e clique no botão Get Docker. Sera feito o download de um instalador, onde sera preciso instalá-lo seguindo as instruções na tela: https://hub.docker.com/editions/community/docker-ce-desktop-windows/ Instalar o Docker em ambiente Windows Server Abra um prompt de comando do PowerShell e digite os seguintes comandos: 1 Install-Module DockerMsftProvider -Force 2 Install-Package Docker -ProviderName DockerMsftProvider -Force Reinicie o servidor para finalizar a instalação: 1 Restart-Computer Instalar o Docker em ambientes Mac OS X Acesse o link abaixo e clique no botão Get Docker.. Será feito o download de um arquivo DMG, e será preciso montá-lo e arrastar o App do Docker para a pasta Aplicativos: https://hub.docker.com/editions/community/docker-ce-desktop-mac/ LAB 1.3 – Comandos essenciais do Docker Neste laboratório vamos aprender os comandos essenciais do Docker. Para começar acesse a pasta 4540 que você obteve do Github da 4Linux: 1 cd 4540 Em seguida, acesse a máquina virtual Manager, através do vagrant ssh e alterne para a conta do usuário suporte. 1 vagrant ssh manager E rik H enrique P inheiro / erikpinheiro@ gm ail.com 66 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER 2 sudo su - suporte Execute o comando que exibe informações do ambiente: 1 docker system info Para listar containers, imagens e redes no Docker, execute os comandos: 1 docker container ls 2 docker image ls 3 docker network ls Para pesquisar imagem Debian no Docker Hub, execute o comando: 1 docker search debian Descrição dos comandos • docker info ou docker system info: exibe informações do Docker como versão, quan- tidade de containers em execução, storage drivers entre outros; • docker ps ou docker container ls: lista os containers em execução. Utilize a flag -a para mostrar todos os containers em qualquer estado; • docker images ou docker image ls: lista imagens do Docker armazenadas localmente; • docker network ls: lista redes criadas para uso do Docker; • docker search: pesquisa uma imagem no Docker Hub Baixe a imagem do servidor Debian e verifique se este aparece na lista de imagens: 1 docker image pull debian 2 docker image ls A imagem do Debian possui o tamanho de um pouco mais de 100MB. Uma dica para um teste rápido com o Docker, é utilizar imagens mais leves, como o Busybox (1.22MB) e o Alpine (5.57MB). Execute um container Debian e verifique se o mesmo aparece na lista de containers em exe- cução: 1 docker container run -dit --name servidor-debian --hostname servidor-debian debian E rik H enrique P inheiro / erikpinheiro@ gm ail.com 67 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER 2 docker container ls A sintaxe do comando docker run é como a seguir: 1 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Para se conectar ao container em execução, execute o comando: 1 docker container attach servidor-debian Descrição dos comandos • docker pull ou docker image pull: baixa do Docker Hub uma imagem do Docker, para a máquina local; • docker run -dit ou docker container run -dit: executa um container; • docker attach ou docker container attach: anexa um terminal a um container em ex- ecução. Opções do subcomando run ou container run: • --dit: executa o container em segundo plano, no modo interativo e alocado a um TTY; • --name: define o nome do container; • --hostname: define o nome de máquina do container. Uma vez conectado ao container, verifique o nome da máquina e as configurações de rede: 1 hostname 2 ip a 3 exit Para exibir logs de um container em execução, digite o comando: 1 docker container logs servidor-debian Pare a execução de um container, através da opção stop: 1 docker container stop servidor-debian Para remover apenas o container em execução e conservar a imagem base, execute: 1 docker container rm -f servidor-debian E rik H enrique P inheiro / erikpinheiro@ gm ail.com 68 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER Descrição dos comandos • docker logs ou docker container logs: exibe logs de um container em execução. • docker rm ou docker container rm: remove um container em execução. Outros comandos do Docker: - docker stop ou docker container stop: para a execução de um container; - docker start ou docker container start: inicia a execução de um container; - docker rename ou docker container rename: renomeia um container. Gerenciar Logging Drivers Conceito O Docker inclui vários mecanismos de registro para ajudá-lo a obter informações da execução de containers e serviços. Esses mecanismos são chamados de drivers de log ou drivers de registro. Cada daemon do Docker, possui um driver de registro padrão que cada container usa, a menos que você o configure para usar um driver de registro diferente. Configurar o driver de log para um container Ao iniciar um container, você pode configurá-lo para usar um driver de registro, diferente do padrão do daemon do Docker, usando a flag --log-driver. Por exemplo: 1 docker container run -it --log-driver json-file debian O driver padrão é json-file e os logs do container ficam disponíveis no diretório /var/lib/docker/containers/container_id/container_id-json.log. Log padrão Para configurar o daemon do Docker como padrãopara um driver de registro específico, defina o valor do driver de log como o nome do driver de registro no arquivo daemon.json, localizado no diretório /etc/docker/ nos hosts do Linux, ou então em C:\ProgramData\docker\config\ em hosts de servidores Windows. Vale lembrar que o driver de registro padrão é o arquivo json-file. Drivers de registro suportados E rik H enrique P inheiro / erikpinheiro@ gm ail.com 69 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER • none: nenhum log está disponível para o container e os logs do Docker não retornam nenhuma saída; • json-file: os logs são formatados em formato JSON e é o driver de log padrão do Docker; • syslog: grava mensagens de registro no recurso de syslog. O daemon syslog deve estar em execução na máquina host; • journald: grava mensagens de log no journald. O daemon journald deve estar em execução na máquina host; • gelf: grava mensagens de log em um endpoint GELF (Graylog Extended Log Format), como Graylog ou Logstash; • fluentd: escreve mensagens de log para fluentd (entrada direta). O daemon fluentd deve estar em execução na máquina host; • awslogs: grava mensagens de log nos registros do Amazon CloudWatch; • splunk: grava mensagens de log em splunk, usando o coletor de eventos HTTP; • etwlogs: grava mensagens de log como eventos de rastreamento para Windows (ETW). Este comando está disponível apenas nas plataformas Windows; • gcplogs: grava mensagens de log no registros do Google Cloud Platform (GCP); • logentries: grava mensagens de log no Rapid7 Logentries. LAB 1.4 – Alterar log padrão no Docker Neste laboratório vamos aprender como gerenciar os logs dos containers no Docker. Para começar acesse a pasta 4540 que você obteve do Github da 4Linux: 1 cd 4540 Em seguida, acesse a máquina virtual Manager, através do vagrant ssh e alterne para a conta do usuário suporte. 1 vagrant ssh manager 2 sudo su - suporte Visualize o driver padrão, através do seguinte comando: 1 docker info --format ’{{.LoggingDriver}}’ Resultado do comando: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 70 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER 1 json-file Syslog Em seguida, visualize o arquivo modelo daemon.json que configura o driver syslog: 1 sudo cat /opt/daemon.json Resultado do comando: 1 { 2 "log-driver": "syslog" 3 } Copie o arquivo daemon.json para o subdiretório /etc/docker e reinicie o serviço do Docker: 1 sudo cp /opt/daemon.json /etc/docker/ 2 sudo systemctl restart docker Para testar, execute um container utilizando a imagem httpd: 1 docker container run -dit --name webserver --hostname webserver httpd Para acompanhar os logs criados pelo container, visualize o conteúdo do arquivo syslog: 1 sudo tail /var/log/messages Resultado do comando: 1 May 11 10:50:15 manager 66f3d012b14c[3266]: AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ’ServerName’ directive globally to suppress this message 2 May 11 10:50:15 manager 66f3d012b14c[3266]: AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ’ServerName’ directive globally to suppress this message 3 May 11 10:50:15 manager 66f3d012b14c[3266]: [Mon May 11 13:50:15.666633 2020] [ mpm_event:notice] [pid 1:tid 140425979872384] AH00489: Apache/2.4.43 (Unix) configured -- resuming normal operations 4 May 11 10:50:15 manager 66f3d012b14c[3266]: [Mon May 11 13:50:15.683470 2020] [ E rik H enrique P inheiro / erikpinheiro@ gm ail.com 71 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER core:no Em distribuições baseadas no Debian, o arquivo possui o nome syslog. Exemplo: 1 sudo tail /var/log/syslog Feito os testes, remova o container webserver: 1 docker container rm -f webserver Tenha cuidado ao utilizar a flag -f do comando docker container rm, pois esta flag remove o container sem nenhuma confirmação. Journald Para testar o logging do driver journald, execute um container através do seguinte comando: 1 docker container run -dit --log-driver=journald --name webserver --hostname webserver httpd Para acompanhar os logs criados pelo container, execute o comando docker logs: 1 docker logs webserver Resultado do comando: 1 AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ’ServerName’ directive globally to suppress this message 2 AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ’ServerName’ directive globally to suppress this message 3 [Mon May 11 14:01:22.819428 2020] [mpm_event:notice] [pid 1:tid 140679525840000] AH00489: Apache/2.4.43 (Unix) configured -- resuming normal operations 4 [Mon May 11 14:01:22.819558 2020] [core:notice] [pid 1:tid 140679525840000] AH00094: Command line: ’httpd -D FOREGROUND’ é possível acompanhar os logs, através do comando journalctl: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 72 2. INTRODUÇÃO E INSTALAÇÃO DO DOCKER 1 sudo journalctl --output=cat CONTAINER_NAME=webserver Resultado do comando: 1 AH00558: httpd: Could not reliably determine the server’s fully qualified domain 2 AH00558: httpd: Could not reliably determine the server’s fully qualified domain 3 [Mon May 11 14:01:22.819428 2020] [mpm_event:notice] [pid 1:tid 140679525840000] 4 [Mon May 11 14:01:22.819558 2020] [core:notice] [pid 1:tid 140679525840000] AH00 5 lines 1-4/4 (END) Tecle CTRL + C para destravar o terminal. Feitos os testes, remova o container webserver: 1 docker container rm -f webserver A seguir, vamos entender como funcionam as imagens no Docker. Links [1] Netclass 4Linux: http://netclass.4linux.com.br/ E rik H enrique P inheiro / erikpinheiro@ gm ail.com 3 Gerenciar imagens no Docker Competências deste conteúdo Este material possui conteúdo que atende aos objetivos das seguintes certificações: Certificação Objetivos DCA (Docker Certified Associate) Installation and Configuration (15% of exam); DCA (Docker Certified Associate) Image Creation Management, and Registry (20% of exam); LPI DevOps Tools Engineer Container Usage (weight: 7) Introdução à imagens no Docker Conceito Uma imagem Docker contém o que é necessário para que uma aplicação seja executada. Ao executar o comando docker container run, estamos na verdade executando uma camada da imagem e a aplicação com suas variáveis de ambientes, bibliotecas e seu código. Podemos concluir que um container é uma instância em tempo de execução de uma imagem. Sendo assim, podemos resumir que uma imagem é um container que ainda não está em execução. 73 E rik H enrique P inheiro / erikpinheiro@ gm ail.com 74 3. GERENCIAR IMAGENS NO DOCKER Camadas em uma Imagem Docker As imagens do Docker possuem várias camadas somente leitura e que não podem ser modifi- cadas. Você pode criar novas imagens a partir de imagens existentes, mas não pode modificá- las. Vários containers são geralmente baseados na mesma imagem, portanto, você pode usar essa imagem e gerar centenas ou milhares de containers. Quando uma imagem é instanciada ou executada como um container, uma camada gravável superior é criada. Em seguida, essa camada gravável superior é realmente excluída quando o container é removido. O Docker faz isso, usando drivers de armazenamento para gerenciar o conteúdo das camadas de imagem e a camada superior gravável. Fonte: https://docs.docker.com/storage/storagedriver/ Fig. 3.1: Imagem para Representar as Camadas de uma Imagem Ao baixar uma imagem base do Docker, podemos adicionar a ela diversas camadas de leitura antes da camada de gravação. Exemplo: 1. Vou baixar uma imagem base do Debian e adicionar uma aplicação como, por exemplo, um editor de textos; E rik H enrique P inheiro / erikpinheiro@ gm ail.com 75 3. GERENCIAR IMAGENS NO DOCKER 2. À partir dessa alteração, crio uma nova imagem que vai conter as camadas Debian (Base Image) e o editor de texto emacs (Image); 3. Baixo uma imagem com a base do Debian + oeditor de textos e adiciono nela uma segunda aplicação como, por exemplo, um servidor Apache; 4. A partir dessa alteração, crio uma nova imagem que vai conter as camadas Debian (Base Image), o editor de textos emacs (Image) e o servidor Apache (Image); 5. Ao executar um container usando a imagem com as três camadas, a última camada será de gravação, quando o container estiver em execução. Containers e camadas de imagem A principal diferença entre um container e uma imagem, é a camada gravável superior. Todas as gravações no container que adicionam novos dados ou modificam dados existentes, são armazenadas nessa camada gravável. Quando o container é excluído, a camada gravável também é excluída. A imagem subjacente permanece inalterada. Como cada container tem sua própria camada de container gravável e todas as alterações são armazenadas nessa camada de container, vários containers podem compartilhar o acesso à mesma imagem subjacente e ainda ter seu próprio estado único de dados. O diagrama abaixo mostra vários containers compartilhando a mesma imagem do Ubuntu 15.04. Fig. 3.2: Compartilhamento de Imagens entre Inúmeros containers Fonte: https://docs.docker.com/storage/storagedriver/ E rik H enrique P inheiro / erikpinheiro@ gm ail.com 76 3. GERENCIAR IMAGENS NO DOCKER Docker Hub Conceito O Docker Hub [1] é o maior repositório do mundo, com imagens de container e uma variedade de fontes de conteúdo, incluindo desenvolvedores de comunidades de containers, projetos de código aberto e fornecedores independentes de software (ISV – Independent Sofware Vendors), além de distribuir seu código em containers. Os usuários obtêm acesso a repositórios públicos gratuitos para armazenar e compartilhar imagens, ou podem escolher o plano de assinatura para repositórios privados. O Docker Hub é um recurso centralizado para trabalhar com o Docker e seus componentes. Ele fornece os seguintes serviços: • Hospedagem de imagens do Docker; • Autenticação de usuário; • Construções automáticas de imagens e ferramentas de fluxo de trabalho, como triggers de construção e ganchos da web; • Integração com GitHub e Bitbucket. LAB 2.1 – Criar conta no Docker Hub Neste laboratório vamos aprender como criar uma conta no Docker Hub. Utilize sua máquina física para realizar este laboratório. Acesse o endereço https://hub.docker.com/ e clique em Sign Up para criar uma conta: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 77 3. GERENCIAR IMAGENS NO DOCKER Fig. 3.3: Docker Hub - Acesso ao Site Após preencher seu ID, e-mail e senha, selecione o plano Community através do botão Continue. Um e-mail sera enviado onde será preciso confirmar o cadastro através do botão Verify email address. E rik H enrique P inheiro / erikpinheiro@ gm ail.com 78 3. GERENCIAR IMAGENS NO DOCKER Fig. 3.4: Docker Hub - Escolhendo Plano Community Em seguida você será redirecionado para a tela de login. Informe seu ID e senha do Docker Hub. Fig. 3.5: Docker Hub - Login E rik H enrique P inheiro / erikpinheiro@ gm ail.com 79 3. GERENCIAR IMAGENS NO DOCKER Parabéns, agora você possui uma conta gratuita no Docker Hub. Ainda neste capítulo vamos aprender como enviar imagens do Docker para sua conta no Docker Hub. Fig. 3.6: Docker Hub - Tela de Boas Vindas Testar o acesso a sua conta do Docker Hub Para começar acesse a pasta 4540 que você obteve do Github da 4Linux: 1 cd 4540 Para iniciar as máquinas virtuais, utilize o subcomando up do Vagrant: 1 vagrant up Em seguida, acesse a máquina virtual Manager, através do vagrant ssh e alterne para a conta do usuário suporte. 1 vagrant ssh manager 2 sudo su - suporte Execute o comando para logar no Docker Hub: 1 docker login -u usuario_docker_hub <TECLE ENTER> E rik H enrique P inheiro / erikpinheiro@ gm ail.com 80 3. GERENCIAR IMAGENS NO DOCKER Resultado do comando: 1 Password: digite_sua_senha 2 WARNING! Your password will be stored unencrypted in /home/suporte/.docker/ config.json. 3 Configure a credential helper to remove this warning. See 4 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 5 6 Login Succeeded Verifique se um arquivo de autorização foi criado: 1 cat .docker/config.json Resultado do comando: 1 { 2 "auths": { 3 "https://index.docker.io/v1/": { 4 "auth": "c2VuaGFtdWl0b2RpZmljaWw=" 5 }, 6 }, 7 "HttpHeaders": { 8 "User-Agent": "Docker-Client/19.03.11 (linux)" 9 } 10 } Para encerrar o login da conta do Docker Hub, execute o comando: 1 docker logout Resultado do Comando: 1 Removing login credentials for https://index.docker.io/v1/ Descrição dos comandos • docker login: permite logar em uma conta no repositório Docker, sendo ele local ou remoto; • docker logout: permite encerrar o login em uma conta no repositório Docker, sendo ele local ou remoto. E rik H enrique P inheiro / erikpinheiro@ gm ail.com 81 3. GERENCIAR IMAGENS NO DOCKER LAB 2.2 – Gerenciamento de imagens no Docker Neste laboratório vamos aprender como gerenciar imagens no Docker. Para começar acesse a pasta 4540 que você obteve do Github da 4Linux: 1 cd 4540 Em seguida, acesse a máquina virtual Manager, através do vagrant ssh e alterne para a conta do usuário suporte. 1 vagrant ssh manager 2 sudo su - suporte Comandos iniciais Liste as imagens e verifique o histórico de comandos utilizados para sua construção: 1 docker image ls 2 docker image history debian Para inspecionar uma imagem, utilizamos o comando: 1 docker image inspect debian Antes de criar uma nova imagem, execute o seguinte: 1 docker container run -dit --name servidor-debian debian 2 docker container exec servidor-debian apt-get update 3 docker container exec servidor-debian apt-get install apache2 -y Para criar uma nova imagem a partir das alterações feitas em um container, execute os seguintes comandos: 1 docker commit servidor-debian servidor-web 2 docker image ls Para inspecionar a nova imagem criada a partir do container em execução: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 82 3. GERENCIAR IMAGENS NO DOCKER 1 docker image inspect servidor-web Descrição dos comandos • docker image ls: lista imagens do Docker armazenadas localmente; • docker inspect: exibe informações detalhadas de um container ou imagem; • docker container exec: executa um comando em um container em execução. Backup e restauração de Imagens Salve a imagem servidor-web que inclui o Apache em um arquivo em formato .tar: 1 docker image save servidor-web -o imagem-servidor-web.tar 2 du -sh imagem-servidor-web.tar Remova o container servidor-debian e a imagem servidor-web: 1 docker container rm -f servidor-debian 2 docker image rm -f servidor-web 3 docker image ls Para remover imagens não utilizadas, execute o seguinte comando: 1 docker image prune Resultado do comando: 1 Are you sure you want to continue? [y/N] y 2 Total reclaimed space: 0B Carregue a imagem servidor-web a partir do arquivo .tar, e inicie o container servidor-web utilizando a nova imagem: 1 docker image load -i imagem-servidor-web.tar 2 docker image ls Execute o container com a imagem restaurada: E rik H enrique P inheiro / erikpinheiro@ gm ail.com 83 3. GERENCIAR IMAGENS NO DOCKER 1 docker container run -dit --name=servidor-web --hostname=servidor-web servidor- web 2 docker container ls Para terminar o laboratório, remova o container servidor-web: 1 docker container rm -f servidor-web Descrição dos comandos • docker commit: cria uma imagem, a partir de alterações realizadas em um container. • docker image save: salva uma ou mais imagens em um arquivo .tar. • docker image rm: remove uma imagem (a opção -f força a remoção). • docker image prune: remove imagens não utilizadas. • docker image load: carrega uma imagem do Docker, a partir de um arquivo .tar. Dockerfile Conceito O Docker pode criar imagens automaticamente, lendo as instruções de um Dockerfile, que é um documento de texto que contém todos os comandos que um usuário pode chamar na linha
Compartilhar