Buscar

Docker Linux

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

Continue navegando