Você está na página 1de 24

Docker – Solução de Container

Índice

• Imagem e Container
• Processo de criação de Container
• Executando Container
• Interagindo com Container
• Iniciando e Parando Containers
• Ciclo do Containers
• Removendo Imagens
• Listando e removendo imagens
• Camadas de Containers
O que vimos até agora

• Comandos básicos do Docker para podermos baixar imagens e


interagir com o container.
• Imagens do Docker possuem um sistema de arquivos em
camadas (Layered File System) e os benefícios dessa abordagem
principalmente para o download de novas imagens.
• Imagens são Read-Only sempre (apenas para leitura)
• Containers representam uma instância de uma imagem
• Como imagens são Read-Only os containers criam nova camada
(layer) para guardar as alterações
• O comando Docker run e as possibilidades de execução de um
container
• OSegue
que vimos
também atélista
uma breve agora
dos comandos utilizados:

• docker ps - exibe todos os containers em execução no


momento.
• docker ps -a - exibe todos os containers, independente de
estarem em execução ou não.
• docker run -it NOME_DA_IMAGEM - conecta o terminal que
estamos utilizando com o do container.
• docker start ID_CONTAINER - inicia o container com id em
questão.
• docker stop ID_CONTAINER - interrompe o container com id em
questão.
• docker start -a -i ID_CONTAINER - inicia o container com id em
questão e integra os terminais, além de permitir interação entre
ambos.
• docker rm ID_CONTAINER - remove o container com id em
questão.
O que vimos até agora
• docker container prune - remove todos os containers que estão
parados.
• docker rmi NOME_DA_IMAGEM - remove a imagem passada
como parâmetro.
• docker run -d -P --name NOME dockersamples/static-site - ao
executar, dá um nome ao container.
• docker run -d -p 12345:80 dockersamples/static-site - define
uma porta específica para ser atribuída à porta 80 do container,
neste caso 12345.
• docker run -d -e AUTHOR="Fulano" dockersamples/static-site -
define uma variável de ambiente AUTHOR com o valor Fulano no
container criado.
Containers
Na aula anterior, vimos que os containers nada mais são do
que uma pequena camada de leitura e escrita, que
funcionam em cima das imagens, que não podem ser
modificadas, pois são somente para leitura.
Containers
Quando removemos um container (comando docker rm), a camada
de leitura e escrita também é removida, o que faz com que os
nossos dados também sejam removidos, o que é muito ruim, já
que esses dados podem ser importantes, como por exemplo um
banco de dados, então toda vez que o container for removido,
tudo o que escrevemos nele será jogado fora? Não é isso que
queremos, então temos que ver um jeito de persistir esses
dados, mas também trabalhando com containers.
Volumes

Quando escrevemos em um container, assim que ele for removido,


os dados também serão. Mas podemos criar um local especial
dentro dele, e especificamos que esse local será o nosso volume
de dados.
Quando criamos um volume de dados, o que estamos fazendo é
apontá-lo para uma pequena pasta no Docker Host. Então,
quando criamos um volume, criamos uma pasta dentro do
container, e o que escrevermos dentro dessa pasta na verdade
estaremos escrevendo do Docker Host.
Volumes
Isso faz com que não percamos os nossos dados, pois o container
até pode ser removido, mas a pasta no Docker Host ficará intacta.
Trabalhando com volumes
Sabendo disso, vamos ver como trabalhar com o Docker Host. No
Terminal, criamos um container com o docker run, mas dessa vez
utilizando a flag -v para criar um volume, seguido do nome do
mesmo:
Trabalhando com volumes
No exemplo anterior, criamos o volume /var/www, mas a que pasta
no Docker Host ele faz referência? Para descobrir, podemos
inspecionar o container, executando o comando docker inspect,
passando o seu id para o mesmo:
Trabalhando com volumes

Temos uma saída com diversas informações, mas a que nos


interessa é o "Mounts":

Nele, podemos ver que o /var/www será escrito na nossa máquina


no diretório
"/var/lib/docker/volumes/0b49051b2daed8e2b9987120f0419c5e8df6193f0f5f40cfcef
a7ad31b9f7a33/_data", endereço que foi gerado automaticamente pelo
Docker. Ou seja, tudo que escrevermos na pasta /var/www do
container, na verdade estaremos escrevendo na pasta
"/var/lib/docker/volumes/0b49051b2daed8e2b9987120f0419c5e8df6193f0f5f40cfcef
a7ad31b9f7a33/_data" da nossa máquina.
Trabalhando com volumes
É possível usar uma sintaxe passando mais informações de forma
que traga somente o que necessitamos.

Docker inspect –f {{.Mounts}} [CONTAINER ID]


Trabalhando com volumes
Ou seja, quando escrevermos na pasta /var/www do container,
estaremos escrevendo em /var/docker/ubuntu da nossa máquina.
Para provar isso, na pasta /var/www, vamos criar um arquivo e
escrever nele uma mensagem:
Trabalhando com volumes

É possível usar uma sintaxe mais simples


Montando volume somente leitura
É possível montar um volume co container somente leitura
(read only). Para isso no momento que passarmos a informação do
volume no container devemos adicionar “:ro” após o nome do
volume, veja exemplo abaixo:

docker run –it –v “/var/docker/ubuntu:/var/www:ro” ubuntu


Montando arquivos

É possível além de montar diretórios através de volumes,


montarmos arquivos. Da mesma forma que visto anteriormente, ao
invés de informarmos um diretório, informamos apenas o nome do
arquivo e o nome do volume.

docker run –v /root/arquivo.txt:/arquivo ubuntu


Data-Only Container

O Docker foi feito para ter uma boa portabilidade. Um container


criado no seu laptop deve ser portátil a ponto de rodar em qualquer
outro ambiente que utilize o Docker.
Quando criamos um ambiente Docker e informamos para o
container montar um diretório no Host Local, primeiramente uma
série de fatores devem ser verificados, como: existência, permissão,
espaço. O que faz com que o Docker não seja tão portatil , fugindo
da sua principal caracteristicas.
Uma opção bastante interessante em relação aos volumes é o Data-
Only Container, onde temos uma instância que irá compartilhar o
volume com outras instâncias, através comando --volume-from.
Data-Only Container
Esse processo se dá montando apenas um volume real, e todas as
máquinas utilizam-se do mesmo volume. Facilitando dessa forma o
gerenciamento de diretórios no Host Local.
Em nosso exemplo iremos criar um diretório data para montar os
volumes para o banco de dados postgresql.
1. Criamos a instância principal : docker create –v
“var/docker/data:/data” –name dbdados centos
2. Criamos 2 instâncias postgres:
docker run -d -p 5432:5432 --name pgsqll --volumes-from
dbdados \
-e POSTGRESQL_USER=docker -e POSTGKESQL_PASS=docker \
-e POSTGKESQL_DB=docker kamui/postgresql

docker run -d -p 5432:5432 --name pgsql2 --volumes-from


dbdados \
-e POSTGRESQL_USER=docker -e POSTGKESQL_PASS=docker \
-e POSTGKESQL_DB=docker kamui/postgresql
Data-Only Container

Esse processo se dá montando apenas um volume real, e todas as máquinas


utilizam-se do mesmo volume. Facilitando dessa forma o gerenciamento de
diretórios no Host Local.
Em nosso exemplo iremos criar um diretório data para montar os volumes
para o banco de dados postgresql.
Data-Only Container

1. Criamos a instância principal :

docker create –v “var/docker/data:/data” –-name dbdados centos


Data-Only Container

2. Criamos 2 instâncias postgres:

docker run -d -p 5432:5432 --name pgsqll --volumes-from dbdados -e


POSTGRESQL_USER=docker -e POSTGKESQL_PASS=docker -e
POSTGKESQL_DB=docker kamui/postgresql

docker run -d -p 5432:5432 --name pgsql2 --volumes-from dbdados -e


POSTGRESQL_USER=docker -e POSTGKESQL_PASS=docker -e
POSTGKESQL_DB=docker kamui/postgresql
Data-Only Container
Backup
A forma de backup também é bem interessante, podemos
obviamente copiar diretamente do volume /var/docker/data, ou
ainda para não termos problemas de arquivos corrompido, gerar
uma nova instância mapeando também o diretório data e copiando
para um diretório no Host Local, também mapeado via volume. Veja
abaixo, a criação de uma instância debian, que executa o comando
de backup com tar para o volume no Host Local.

Você também pode gostar