Escolar Documentos
Profissional Documentos
Cultura Documentos
Página 1 de Docker
1-Instalando Docker Ubuntu
sexta-feira, 20 de novembro de 2020 21:10
Ubuntu
Versões Suportadas: Yakkety 16.10, Xenial 16.04 (LTS), Trusty 14.04 (LTS)
Instalação
3 - Verificar a integridade da chave (key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C
0EBF CD88)
6 - Instalar Docker-CE:
Fonte: https://docs.docker.com/engine/installation/linux/ubuntu/
--------------------------------------------------------------------------------------------------------------
Página 2 de Docker
1.2-Mão na massa - "Hello Docker"
sexta-feira, 20 de novembro de 2020 22:46
OBS: como não foi usado nenhum parâmetro opcional, o container irá
iniciar e, logo em seguida, parar
sudo docker ps
sudo docker ps -a
OBS: como não foi usado nenhum parâmetro opcional, o container irá
iniciar e, logo em seguida, parar
sudo docker ps -a
Página 3 de Docker
o campo NAME):
sudo docker ps
OBS: observe que foi preciso iniciar um container solicitando o bash para
assim ter acesso ao shell do container
Página 4 de Docker
2-Administrando imagens - Orientação
sábado, 21 de novembro de 2020 21:23
Prezado aluno(a),
Interagir é preciso
Conhecerá e aplicará comandos Docker que permitem coletar e monitorar informações sobre o
container, a imagem e a engine
Aprenderá o uso do docker search como forma de pesquisar imagens do Docker Hub via docker CLI
Página 5 de Docker
2.1-Administração de imagens - Comandos
sábado, 21 de novembro de 2020 15:27
Listando container
docker ps
---------------------------------------------------------------------------------------------------------------------
Listando container em execução
docker ps -a
---------------------------------------------------------------------------------------------------------------------
Iniciando um container
docker start upbeat_swirles
---------------------------------------------------------------------------------------------------------------------
Congelando (Freezing) uma container
docker pause upbeat_swirles
---------------------------------------------------------------------------------------------------------------------
Descongelando (Freezing) um container
docker unpause upbeat_swirles
---------------------------------------------------------------------------------------------------------------------
Parando um container
docker stop upbeat_swirles
---------------------------------------------------------------------------------------------------------------------
Removendo um container
docker rm upbeat_swirles
---------------------------------------------------------------------------------------------------------------------
Removendo de força abrupta um container (Não recomendado) parar antes de remover
docker rm -f upbeat_swirles
---------------------------------------------------------------------------------------------------------------------
Removendo todos containers parados
docker container prune
---------------------------------------------------------------------------------------------------------------------
TRABALHANDO COM IMAGENS
Página 6 de Docker
---------------------------------------------------------------------------------------------------------------------
Inspecionando valores do container (Forma2)
docker inspect --format='{{.Config.Image}}' MARCELO
docker inspect --format='{{.NetworkSettings.Gateway}}' MARCELO
---------------------------------------------------------------------------------------------------------------------
Imagem de LOG para interação com ping em localhost
docker run --name LOGS -d busybox ping 127.0.0.1 -c 20
---------------------------------------------------------------------------------------------------------------------
Verificar os pings no container
docker logs LOGS
---------------------------------------------------------------------------------------------------------------------
Verificar os pings no container (Em tempo real) Similar ao tail
docker logs -f LOGS
---------------------------------------------------------------------------------------------------------------------
Verificar consumo dos containers (Estatisticas)
docker stats
---------------------------------------------------------------------------------------------------------------------
Verificar informações da arquitetura DOCKER
docker info
---------------------------------------------------------------------------------------------------------------------
Verificar informações de versão do server e client
docker version
---------------------------------------------------------------------------------------------------------------------
INTERAGINDO COM CONTAINERS
Página 7 de Docker
---------------------------------------------------------------------------------------------------------------------
FAZENDO BACKUP DE CONTAINER (EXPORTAR E IMPORTAR)
---------------------------------------------------------------------------------------------------------------------
FAZENDO BACKUP DE IMAGEM
Criando backup de imagem com save (Compactando)
docker save export_novo | gzip -c > IMAGEM.tar.gz
---------------------------------------------------------------------------------------------------------------------
Removendo a imagem feito backup
docker rmi -f export_novo
---------------------------------------------------------------------------------------------------------------------
Voltando o Backup com LOAD (Descompactando)
docker load < IMAGEM.tar.gz
---------------------------------------------------------------------------------------------------------------------
Página 8 de Docker
2.2-Mão na massa - "Tendo controle de tudo"
sábado, 21 de novembro de 2020 17:51
sudo docker ps -a
* Observe que foi preciso usar recursos shell Linux para listar todos os
containers ID ativos e passar como parâmetro para o comando "docker
stop"
exit
touch arquivo.txt
Página 9 de Docker
06 - Faça modificações no arquivo enviado para o container e reenvie-
o para o host:
CTRL+P+Q
OU
Página 10 de Docker
11 - Criar um container, em background, a partir da imagem alpine, e
baixar dentro do container, através do wget, imagem ISO do Debian
Linux Netinstall. Depois, monitorar os registros de logs do container
para saber quando o download terminará:
http://debian.c3sl.ufpr.br/debian-cd/9.8.0/amd64/iso-cd/debian-9.8.0-
amd64-netinst.iso
De <https://www.udemy.com/course/docker-introducao-a-administracao-de-containers/learn/lecture/13770086
#questions>
Página 11 de Docker
2.3-Mão na massa - "Recuperar um container"
sábado, 21 de novembro de 2020 20:43
Página 12 de Docker
docker cp CONTAINER /tmp/orientacoes.txt ${PWD}
AÇÃO: Siga as orientações do arquivo, contido no container, e execute-as em
sequência.
root@ubuntu:~# cat orientacoes.txt
# 1 - Iniciar 2 containers, com nomes cont_1, cont_2 e options "-itd", de imagem alpine
e debian, respectivamente;
docker search alpine
docker pull alpine
docker pull debian
docker search --filter "is-official=true" Debian
docker run --name count_1 -itd alpine
docker run --name count_2 -itd debian
# 2 - Verificar as estatasticas de consumo dos containers iniciados, anterioremente;
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM %
NET I/O BLOCK I/O PIDS
49db4c343534 count_2 0.00% 456KiB / 1.953GiB 0.02% 648B
/ 0B 0B / 0B 1
e3a9e707f003 count_1 0.00% 132KiB / 1.953GiB 0.01% 648B /
0B 0B / 0B 1
8d642fbd83cd CONTAINER 0.00% 412KiB / 1.953GiB 0.02%
828B / 0B 0B / 8.19kB 1
docker
inspect al...
Página 13 de Docker
3-Object: Networking - Orientação
sábado, 21 de novembro de 2020 21:21
Conhecerá os recursos que permitem que um container tenha conectividade com outros e o "resto
do mundo"
Entenderá como funciona a rede padrão Docker que concede conectividade a todos os containers
criados
Entenderá o mapeamento de portas dos containers para conceder comunicação externa. Primeiras
aplicações poderrão ser criadas
Conhecerá outro meio de comunicação que usa a mesma pilha de conexão do host com os
containers
Página 14 de Docker
3.1-Object: Networking - Comandos
sábado, 21 de novembro de 2020 21:21
---------------------------------------------------------------------------------------------------------------------
Mapeamento de portas (Manual)
docker run -d --name c1_apache -p 9090:80 httpd
Página 15 de Docker
docker run -d --name c1_apache -p 9090:80 httpd
OBS: Subir um container e mapear da porta 9090 do host para porta 80 do container servidor
apache
---------------------------------------------------------------------------------------------------------------------
Mapeamento de portas (Automatica)
docker run -d --name c2_apache -P httpd
---------------------------------------------------------------------------------------------------------------------
Verificando portas no Docker
docker port c2_apache
docker ps
---------------------------------------------------------------------------------------------------------------------
Subindo container em modo host sem compartilhar rede
docker run -itd --net host --name c1_busybox busybox
docker run -d --net host --name c4_apache httpd
Página 16 de Docker
3.2-Mão na massa - "Meu primeiro container web"
domingo, 22 de novembro de 2020 19:17
02 - Verificar se algum container está ativo (iniciado), caso contrário iniciar e capturar o endereço
IP que ele recebeu:
sudo docker ps
sudo docker run -itd --name [CONTAINER NAME] busybox
sudo docker inspect [CONTAINER NAME] | grep IP
* Observe que o endereço IP atribuído a esse container será do mesmo segmento da interface
bridge “docker0”
Página 17 de Docker
03 - Acessar um terminal bash no container com seu nome:
sudo docker exec -it [CONTAINER NAME] bash
04 - Verificar a conectividade com o “mundo exterior” pingando para algum host da internet:
ping 8.8.8.8
ping google.com
exit
06 - Iniciar um container que ofereça uma aplicação web, com mapeamento de portas manual
sudo docker run -itd --name web_80 -p 9090:80 httpd
* Observe o parâmetro -p
* Depois de iniciado, prossiga para o browser do seu computador e acesse http://localhost:9090
Página 18 de Docker
Estava utilizando maquina qemu dentro do EVENG
07 - Iniciar um container que ofereça uma aplicação web, com mapeamento de portas automático
sudo docker run -itd --name web_random -P httpd
* Observe o parâmetro -P
* Mapeamento automático gera um porta aleatória. Para descobri-la, execute:
sudo docker port [CONTAINER_NAME]
* Depois de iniciado e descoberto a porta, prossiga para o browser do seu computador e acesse
http://localhost:PORTA
Página 19 de Docker
* Observe a presença de uma nova option do docker run, apresentada como "--env" ou "-e". Ela é
responsável por receber valor de uma variável de ambiente prevista na imagem a ser utilizada. Ou
seja, quem desenvolveu a imagem mysql decidiu que quem for usar teria que informar esse ou
outros valores, em tempo de execução do container, para cada variável invocada. Algumas são
obrigatórias, como no caso da MYSQL_ROOT_PASSWORD - consulte mais informações na
documentação oficial da imagem.
De <https://www.udemy.com/course/docker-introducao-a-administracao-de-containers/learn/lecture/13950536
#overview>
Página 20 de Docker
3.3-Mão na massa - Migrar Banco de dados
segunda-feira, 23 de novembro de 2020 10:03
Instruções da tarefa
45 minutos para concluir
101 soluções do aluno
Num cenário hipotético, as exigências do seu cargo estão aumentando. Agora, a sua equipe decidiu
iniciar um processo de adoção de alguns serviços de rede em containers. Dentre diversas outras
opções, você foi incumbido a homologar o uso de base de dados Postgresql em container.
Diante disso, o objetivo dessa tarefa é que você inicie um container de servidor Postgresql em
modo de conexão bridge padrão. Depois, através de um único cliente psql, você use outro
container para acessar o container servidor e criar um banco de dados de teste. Por fim, através do
cliente desktop pgAdmin validar esse teste.
INFORMAÇÕES IMPORTANTES
• Imagem para uso de container servidor Postgresql: postgres (consulte mais em
https://hub.docker.com/_/postgres/)
• Imagem para uso de container cliente Postgresql: governmentpaas/psql (consulte mais em
https://hub.docker.com/r/governmentpaas/psql)
• Sintaxe de comando de acesso, via psql cliente, a base de dados criada: psql -h
<IP_CONTAINER_SERVER> -U postgres --password
• Sintaxe de comando SQL para criação de banco de dados: CREATE DATABASE teste;
• Porta de conexão do container servidor Postgresql: 5432
• Download de cliente pgAdmin: https://www.pgadmin.org/
VARIÁVEIS DE AMBIENTES EM TEMPO DE EXECUÇÃO NO DOCKER
No processo de criação das imagens (build), muitos desenvolvedores decidem usar os benefícios de
variáveis de ambientes, amplamentes utilizadas em diversas linguagens e plataformas de
programação. Essa técnica se deve ao fato de manter seguro e eficiente o uso de informações
sensíveis da sua aplicação que não podem (e devem) estar salvar em imagem (elemento estático e
genérico). Por exemplo, senhas, usuários e/ou informações sensíveis importantes.
Assim, é de respondibilidade de quem cria o container, a partir da imagem, informar em tempo de
execução as variáveis de ambientes previstas na imagem - para informações à cerca de quais
existem (e se existem) em cada imagem é recomendado consultar sempre a documentação oficial,
de desenvolvimento dela no Docker Hub ou GitHub disponibilizado, antes de criar seu container.
No Docker, essas variáveis são usadas através da option, no docker run, --env ou -e.
Exemplo de uso (teste esse comando no seu ambiente de estudos):
1. $ docker run --rm --env VAR1=value1 -e VAR2=value2 ubuntu env | grep VAR
2. VAR1=value1
3. VAR2=value2
Mais informações sobre variáveis de ambientes no Docker:
https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---
env---env-file
Perguntas dessa tarefa
AÇÃO - criar e iniciar, em background, container servidor PSQL na network default padrão,
mapeando a porta do host com o container na 3333, usando imagem "postgres" sugerida.
PERGUNTA - Qual sintaxe de comando completo para criação de container de servidor Postgresql
com essas características?
AÇÃO - criar banco de dados "teste" no container servidor PSQL usando um container psql cliente
de imagem "governmentpaas/psql" sugerida.
Página 21 de Docker
de imagem "governmentpaas/psql" sugerida.
$docker run --name postgres -e POSTGRES_PASSWORD=minhasenha -d -p 3333:5432 postgres
PERGUNTA - Quais os passos você usou para ter acesso ao container servidor, via outro container
cliente, e, logo em seguida, criar base de dados "teste" nele?
AÇÃO - baixar e usar cliente gráfico pgAdmin no seu host, acessar servidor container PSQL e
visualizar banco de dados "teste" criado, anteriormente.
PERGUNTA - Quais parâmetros de rede (host, port, username, password) você usou para ter
acesso e visualização dos banco criados nesse container servidor PSQL? Envie prints da tela com as
configurações de conexão feitas e listagem de bancos desse container servidor PSQL.
De <https://www.udemy.com/course/docker-introducao-a-administracao-de-
containers/learn/practice/1099882/introduction#overview>
Página 22 de Docker
4-Object: Volumes
segunda-feira, 7 de dezembro de 2020 20:21
Página 23 de Docker
Página 24 de Docker
4.1-Object: Volumes: Comandos
segunda-feira, 7 de dezembro de 2020 20:41
ls /var/lib/docker
du -sh /var/lib/docker/image/overlay2
docker info
-------------------------------------------------------------------
Subindo um container e criando arquivo dentro do container para viasualizar espaço no storage virtual
docker ps -s
----------------------------------------------------------------------------------------------------------------------------- -------------------------------------------
root@ubuntu:~# docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
101e17288c3e ubuntu:16.04 "/bin/bash" About a minute ago Up About a minute teste 0B (virtual 131MB)
----------------------------------------------------------------------------------------------------------------------------- -------------------------------------------
Inserindo conteudo
docker exec -it teste touch /tmp/arquivo_teste
docker exec -it teste bash
echo "dados" >> /tmp/arquivo_teste
exit
----------------------------------------------------------------------------------------------------------------------------- -------------------------------------------
root@ubuntu:~# docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
101e17288c3e ubuntu:16.04 "/bin/bash" 2 minutes ago Up 2 minutes teste 47B (virtual 131MB)
root@ubuntu:~#
----------------------------------------------------------------------------------------------------------------------------- -------------------------------------------
Página 25 de Docker
4.2-Object Volumes: BIND MOUNT
segunda-feira, 7 de dezembro de 2020 20:56
Mapeando diretórios
curl http://localhost:9090
--------------------------------------------------------------------------
Página 26 de Docker
4.3-Object Volume: ON RAM
segunda-feira, 7 de dezembro de 2020 21:54
--------------------------------------------------------------------------------------------------------------------------
root@ubuntu:~# docker exec tmpfs df -h
Filesystem Size Used Available Use% Mounted on
overlay 18.1G 4.2G 13.0G 24% /
tmpfs 64.0M 0 64.0M 0% /dev
tmpfs 1000.1M 0 1000.1M 0% /sys/fs/cgroup
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 1000.1M 0 1000.1M 0% /tmp
/dev/mapper/ubuntu--vg-root
18.1G 4.2G 13.0G 24% /etc/resolv.conf
/dev/mapper/ubuntu--vg-root
18.1G 4.2G 13.0G 24% /etc/hostname
/dev/mapper/ubuntu--vg-root
18.1G 4.2G 13.0G 24% /etc/hosts
tmpfs 1000.1M 0 1000.1M 0% /proc/acpi
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/keys
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 64.0M 0 64.0M 0% /proc/timer_stats
tmpfs 64.0M 0 64.0M 0% /proc/sched_debug
tmpfs 1000.1M 0 1000.1M 0% /proc/scsi
tmpfs 1000.1M 0 1000.1M 0% /sys/firmware
root@ubuntu:~#
--------------------------------------------------------------------------------------------------------------------------
Testando a criação de um arquivo em memória ram na pasta tmp de 1000k em seguida ele remove para apresentar o tempo
--------------------------------------------------------------------------------------------------------------------------
root@ubuntu:~# docker exec -it tmpfs dd if=/dev/zero of=/tmp/output bs=1k count=1000k; rm -f /tmp/output
1024000+0 records in
1024000+0 records out
1048576000 bytes (1000.0MB) copied, 9.937325 seconds, 100.6MB/s
root@ubuntu:~#
--------------------------------------------------------------------------------------------------------------------------
Página 27 de Docker
--------------------------------------------------------------------------------------------------------------------------
Testando a criação de um arquivo em Hardisk na pasta output de 1000k em seguida ele remove para apresentar o tempo
--------------------------------------------------------------------------------------------------------------------------
root@ubuntu:~# docker exec -it tmpfs dd if=/dev/zero of=/output bs=1k count=1000k; rm -f /output
1024000+0 records in
1024000+0 records out
1048576000 bytes (1000.0MB) copied, 13.604728 seconds, 73.5MB/s
root@ubuntu:~#
--------------------------------------------------------------------------------------------------------------------------
Página 28 de Docker
4.4-Object Volumes: Volume
segunda-feira, 7 de dezembro de 2020 21:25
--------------------------------------------------------------------------------
docker volume ls
----------------------------------------------------------------------------------------------------------------------------- -----------------------------------
root@ubuntu:~# curl http://localhost:9091
<html><body><h1>It works!</h1></body></html>
root@ubuntu:~#
----------------------------------------------------------------------------------------------------------------------------- -----------------------------------
----------------------------------------------------------------------------------------------------------------------------- -----------------------------------
root@ubuntu:~# curl http://localhost:9091
<h1>MEU PRIMEIRO CONTAINER<\h1>
root@ubuntu:~#
----------------------------------------------------------------------------------------------------------------------------- -----------------------------------
cd /home/root/site
docker cp apache_vol:/usr/local/apache2/htdocs .
ls
echo "<hr/> <h2> Subtitulo" >> index.html
docker cp index.html apache_vol:/usr/local/apache2/htdocs
----------------------------------------------------------------------------------------------------------------------------- -----------------------------------
root@ubuntu:/home/root/site# curl http://localhost:9091
Página 29 de Docker
root@ubuntu:/home/root/site# curl http://localhost:9091
<h1>MEU PRIMEIRO CONTAINER<\h1>
<hr/> <h2> Subtitulo
root@ubuntu:/home/root/site#
----------------------------------------------------------------------------------------------------------------------------- ----------------------------------
----------------------------------------------------------------------------------------------------------------------------- ----------------------------------
root@ubuntu:/home/root/site# cat /var/lib/docker/volumes/vol-web/_data/index.html
<h1>MEU PRIMEIRO CONTAINER<\h1>
<hr/> <h2> Subtitulo
root@ubuntu:/home/root/site#
----------------------------------------------------------------------------------------------------------------------------- ----------------------------------
Página 30 de Docker
4.5-Object Volume: Mão na massa
segunda-feira, 7 de dezembro de 2020 22:12
* Observe que o 'docker port' é utilizado para descobrir qual porta foi liberada no host automaticamente; já que foi usado o parâmetro '-P'
04 - Acessar o navegador web no endereço http://localhost:[PORTA]:
* Observe que o arquivo index.html será carregado. Fique a vontade para colocar quaisquer arquivos html, css ou js na pasta ~/docker/site. Depois, veja o
resultado atualizando a página!
05 - Para usar Docker Volume crie seu primeiro volume:
sudo docker volume create --name datastore
06 - Crie uma aplicação que use esse volume:
sudo docker run --name containervolume -v datastore:/usr/local/apache2/htdocs -p 9090:80 httpd
* Acessar o navegador web no endereço http://localhost:9090 e veja que o arquivo index.html da imagem será mantido, apresentando o texto "It works!".
Diferentemente do modo anterior, os dados com uso de volumes não são "sobrescritos"
07 - Copiar arquivo index.html para dentro do volume usando o 'docker cp':
sudo docker cp ~/docker/site/index.html containervolume:/usr/local/apache2/htdocs
* Observe que ao enviar dados para a pasta do container mapeado com o volume, consequentemente, esses dados serão preservadosno volume.
* Depois, prossiga para o browser do seu computador e acesse http://localhost:9090 novamente e veja o novo arquivo index.html sendo carregado
* Caso prefira, você poderá copiar todos os arquivos do diretório /docker/site através do uso do "." (ponto) ao final da barra invertida (/):
sudo docker cp ~/docker/site/. containervolume:/usr/local/apache2/htdocs
08 - Remover container:
sudo docker stop containervolume
sudo docker rm containervolume
* Acessar o navegador web no endereço http://localhost:9091 e veja que o arquivo index.html enviado está mantido, pois foi persistido em volume fora do
ciclo de vida do container .
10 - Listar e remover volume:
sudo docker volume ls
sudo docker stop containervolume_2
sudo docker rm containervolume_2
sudo docker volume rm datastore
* Observe que primeiro deve ser parado e removido o container de aplicação que usa esse volume. Depois, assim, remover o volumedocker
Página 31 de Docker
4.6-Tarefa: Save the data
quarta-feira, 9 de dezembro de 2020 21:37
Tarefa tem como objetivo mostrar os benefícios de se manter dados persistidos externamente ao
ciclo de vida dos containers. Aplicando em um cenário onde 3 containers acessam volume
compartilhado e rotina de backup definida.
Para um maior controle dos dados manipulados em aplicações executadas via containers Docker é
sabido que você deve primar pela persistência de dados, mantida externamente ao ciclo de vida do
container. Diante disso, você recebeu a tarefa de criar e salvaguardar todos os dados de uma
aplicação web.
A equipe de desenvolvimento ficou de enviar todos os arquivos de front (HTML, CSS, JS) para você
iniciar, por container, um web server estático. E a fim de manter salvos todos esses dados do web
site em disco/partição remota, você, também, deve definir meios para serem feitas cópias de
seguranças (backup) desses dados via formato tape (tar).
Para isso, a equipe de infraestrutura disponibilizou, no ambiente virtualizado, a ser usado, 2
partições, em LUNs distintas na rede SAN da empresa:
• uma (1) para os dados e;
• uma (1) para backup;
Sendo assim, você deve criar 1 volume de dados (docker volume) numa partição e criar 3 containers
web mapeando-os para o mesmo volume, criado anteriormente. E, logo após disponibilizar o
serviço web solicitado, você deve executar uma única rotina, manual, de backup, para formato tape
(tar) na outra partição, destinada para esse fim. Ao fim, você deverá ter 3 containers executados,
disponibilizando a mesma aplicação web, em portas de conexões distintas (80,81,82, por exemplo),
e um único volume mapeado para eles.
INFORMAÇÕES IMPORTANTES
• Sugestões de imagens para disponibilizar web site estático (livre para escolher): httpd
(consulte mais em https://hub.docker.com/_/httpd) ou nginx (consulte mais em
https://hub.docker.com/_/nginx)
• Arquivos de front enviados pela equipe de desenvolvimento: http://bit.ly/FRONT_SITE (fonte
https://startbootstrap.com/themes/stylish-portfolio/)
• Partições criadas pela equipe de infraestrutura:
1. /var/lib/docker - DADOS
2. /mnt/docker/backup - BACKUP
• Comando para rotina de backup: tar cvf /mnt/docker/backup/arquivobackup.tar
{DIR_CONTAINER_MAPEADO_VOLUME}
• Imagem para container de rotina de backup: busybox
Perguntas dessa tarefa
Página 32 de Docker
Perguntas dessa tarefa
Quais comandos usados para criar e listar o volume compartilhado, respectivamente?
Quais comandos usados para criar os 3 containers web, com execução em background, que devem
acessar o volume compartilhado?
Dado a necessidade de atualizar o volume compartilhado, com os arquivos de Front baixados, qual
comando usado para enviar esses arquivos para o volume?
Por motivo de segurança, é recomendado que execute uma rotina de backup, logo após algumas
mudanças que podem serem feitas nos dados do volume compartilhado.
Sendo assim, qual comando usado para criar um container temporário (com option --rm), imagem
busybox, responsável por mapear volume compartilhado e diretório em partição de backup no
host, e executar, dentro do container, comando para gerar arquivobackup.tar diretamente na
partição de backup, criada pela equipe de infraestrutura?
Envie os prints das telas de acesso, no browser, de cada web site estático criado, em portas
distintas (80,81,82, por exemplo)
Fazer download dos arquivos de recursos
startbootstr
ap-stylish...
startbootstr
ap-stylish...
startbootstr
ap-stylish...
RESPOSTA
Quais comandos usados para criar e listar o volume compartilhado, respectivamente?
Lembre-se do "docker volume"
Quais comandos usados para criar os 3 containers web, com execução em background, que devem
acessar o volume compartilhado?
Consulte as imagens oficiais sugeridas (https://hub.docker.com/_/nginx e https://hub.docker.com/
_/httpd) e obtenha informações, principalmente, de qual pasta do container, responsável por
manter arquvios do web site, deve ser persistida.
Dado a necessidade de atualizar o volume compartilhado, com os arquivos de Front baixados, qual
comando usado para enviar esses arquivos para o volume?
Lembre-se do "docker cp" e que, como o volume é compartilhado, é necessário enviar para diretório
mapeado de apenas um container web criado :)
DICA: para copiar diretórios, usando o docker cp, você deve usar o artifício do "." (ponto):
Ex1: copiar um arquivo - docker cp ./src/build/index.html ContainerName:/app/
Ex2: copiar todos os arquivos do diretório - docker cp ./src/build/. ContainerName:/app/
Por motivo de segurança, é recomendado que execute uma rotina de backup, logo após algumas
mudanças que podem serem feitas nos dados do volume compartilhado.
Sendo assim, qual comando usado para criar um container temporário (com option --rm), imagem
busybox, responsável por mapear volume compartilhado e diretório em partição de backup no
host, e executar, dentro do container, comando para gerar arquivobackup.tar diretamente na
partição de backup, criada pela equipe de infraestrutura?
A dica é saber que você precisa mapear dois de tipos de persistências num container temporário. Ou
seja:
1. um mapeamento, do tipo bind mount, no diretório de partição de backup do host
( /mnt/docker/backup ) com um diretório temporário do container (/tmp por exemplo)
2. um mapeamento, do tipo docker volume, com o volume compartilhado (criado,
Página 33 de Docker
2. um mapeamento, do tipo docker volume, com o volume compartilhado (criado,
anteriormente, por você) com outro diretório temporário do container (/root por exemplo)
Por fim, executar, dentro do container, em tempo de execução do container, o comando para gerar
arquivobackup.tar:
tar cvf /tmp/arquivobackup.tar /root
Envie os prints das telas de acesso, no browser, de cada web site estático criado, em portas
distintas (80,81,82, por exemplo)
No browser, capture os prints do acesso do site em cada porta de conexão estabelecida
Página 34 de Docker
5-Comunicação: Entre containers
quarta-feira, 9 de dezembro de 2020 19:44
Prezado aluno(a),
Seja bem-vindo(a) ao Módulo "Comunicação entre containers - uma abordagem para microserviços"
Página 35 de Docker
5.1-Comunicação: Containers e microserviços
quarta-feira, 9 de dezembro de 2020 19:45
Página 36 de Docker
5.2-Comunicação: User defined bridge
quarta-feira, 9 de dezembro de 2020 19:59
------------------------------------------------------------------------------------------------------
Criar uma rede propria wordpress
docker network create rede-wordpress
docker network ls
ip a
------------------------------------------------------------------------------------------------------
Criar um container DB com a rede wordpress
docker run --name wp-db -e MYSQL_ROOT_PASSWORD=mysql -d --net rede-wordpress mysql:5.4
------------------------------------------------------------------------------------------------------
Criar container wordpress para se conectar no banco de dados DB-WP
docker run --name wp -e WORDPRESS_DB_HOST=wp-db -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=mysql -p 8080:80 -d --net rede-wordpress wordpress
------------------------------------------------------------------------------------------------------
Página 37 de Docker
Página 38 de Docker
5.3-Comunicação: Container Links
quarta-feira, 9 de dezembro de 2020 21:13
EXEMPLO WORDPRESS
Subir um container de banco de dados Mysql
docker run -d --name db1 -e MYSQL_ROOT_PASSWORD=mysql mysql:5.7
------------------------------------------------------------------------
Conectar um container no bancdo de dados usando a imagem wordpress
docker run -d --name wp1 --link db1:meudb -p 8090:80 wordpress
------------------------------------------------------------------------
Página 39 de Docker
Página 40 de Docker
5.4-Mão na Massa - Mútiplos containers conectados
quarta-feira, 9 de dezembro de 2020 21:26
09 - Acesse o container de nome debian1 e teste uma conexão com o container debian2:
Página 41 de Docker
sudo docker network rm minharede
De <https://www.udemy.com/course/docker-introducao-a-administracao-de-containers/learn/lecture/14210168#overview>
Página 42 de Docker
5.5-Tarefa-Containers conectados
quarta-feira, 9 de dezembro de 2020 21:36
Essa tarefa tem como objetivo criar e administrar múltiplas redes de comunicações entre os containers para criar aplicação ba seada em microserviços.
Diante do conhecimento adquirido até aqui, você é capaz, mesmo em cenário não propício para isso (ambiente local single -host), disponibilizar um serviço simples
de balanceamento de carga (load balancer) entre duas aplicações web similares, a partir de containers interconectados por redes bridges definidas pelo usuário .
Para garantir a natureza de microserviços, você deve criar um container para cada finalidade:
• 1 container para o load balancer com nome "lb" + 1 diretório mapeado para arquivo de configuração
• 1 container web com nome "web1" + 1 volume mapeado para arquivos de FRONT do site
• 1 container web com nome "web2" + 1 volume mapeado para arquivos de FRONT do site
Onde, somente o container "load balancer" terá suas conexões na porta web 80 liberada, externamente. O restante dos container s (web1 e web2), somente,
terão acesso permitido a partir do container balanceador (vide imagem superior de exemplo).
Assim, para garantir as interconexões seguras entre os containers, você deverá criar, adicionalmente, 1 rede bridge definida pelo usuário, e criar os containers
nela:
• 1 rede bridge com nome lb-web
INFORMAÇÕES IMPORTANTES
• Imagem para uso de containers "web": httpd (consulte mais em https://hub.docker.com/_/httpd)
• Imagem para uso de container "load balancer": haproxy:1.6 (consulte mais em https://hub.docker.com/_/haproxy)
• Diretório no container de configuração do balanceador: /usr/local/etc/haproxy/
• Arquivo de configuração do balanceador: haproxy.cfg (em anexo)
• Arquivos de FRONT para container web1: em anexo (fonte modificada em https://startbootstrap.com/themes/landing-page/)
• Arquivos de FRONT para container web2: em anexo (fonte modificada em https://startbootstrap.com/themes/landing-page/)
Perguntas dessa tarefa
Qual comando usado para criar a rede bridge definida pelo usuário chamada "lb -web"?
Quais comandos usados para criar os volumes vol -web1 e vol-web2; e os containers, em background, web1 e web2, ingressantes na rede criada,
respectivamente?
Quais comandos usados para enviar os arquivos, contidos em anexo, do FRONT dos websites dos containers web1 e web2, respectiv amente?
Qual comando usado para criar e iniciar o container balanceador, de nome "lb", disponibilizado na porta 80, ingressante da re de criada e com mapeamento de
configuração no diretório /usr/local/etc/haproxy/ do container?
Envie o print da tela de acesso web de cada resposta, do container web1 e container web2:
Fazer download dos arquivos de recursos
ARQUIVOS_
TAREFA_5...
ARQUIVOS_
TAREFA_5...
ARQUIVOS_
TAREFA_5
RESPOSTA
Qual comando usado para criar a rede bridge definida pelo usuário chamada "lb -web"?
Lembre-se do "docker network create"
Quais comandos usados para criar os volumes vol -web1 e vol-web2; e os containers, em background, web1 e web2, ingressantes na rede criada,
respectivamente?
Lembre-se do "docker volume create" e mapeamento de volumes, no docker run, usando a option -'v', em cada diretório web /usr/local/apache2/htdocs dos
containers web1 e web2, respectivamente
Quais comandos usados para enviar os arquivos, contidos em anexo, do FRONT dos websites dos containers web1 e web2, respectiv amente?
Lembre-se do "docker cp".
DICA: para copiar diretórios, usando o docker cp, você deve usar o artifício do "." (ponto):
Página 43 de Docker
DICA: para copiar diretórios, usando o docker cp, você deve usar o artifício do "." (ponto):
Ex1: copiar um arquivo - docker cp ./src/build/index.html ContainerName:/app/
Ex2: copiar todos os arquivos do diretório - docker cp ./src/build/. ContainerName:/app/
Qual comando usado para criar e iniciar o container balanceador, de nome "lb", disponibilizado na porta 80, ingressante da re de criada e com mapeamento de
configuração no diretório /usr/local/etc/haproxy/ do container?
IMPORTANTE: é preciso que tenha criado os containers web primeiro. Caso contrário, terá um resultado inesperado!
A estrutura do docker run para criar esse container deve seguir esses pontos:
1. liberação da porta 80 usando '-p'
2. mapeamento de diretório, onde contém o arquivo haproxy.cfg (contido em anexo), com o diretório do container /usr/local/etc/haproxy/
3. ingresso na rede lb-web
4. imagem haproxy:1.6
Envie o print da tela de acesso web de cada resposta, do container web1 e container web2:
Enviar print das telas
Página 44 de Docker