Escolar Documentos
Profissional Documentos
Cultura Documentos
o Docker
nata.house - info.produtos - Desvendando oDocker - 2022
Introdução
quatro ventos pelos seus utilizadores O que faz com que mais e
desenvolvedor.
Vamos lá?
nata.house - info.produtos - Desvendando oDocker - 2022
O que é um container?
manipulação de containers.
A principal diferença entre VM’s e containers pode ser resumida na complexidade. Toda VM necessita de um sistema operacional
completo para funcionar, ou seja, além do sistema operacional hospedeiro, outro sistema operacional com outro kernel deverá ser
carregado para que a aplicação.
Na maioria das vezes, utiliza somente uma parcela dos recursos carregados, gerando uma sobrecarga no hospedeiro.
Então nos perguntamos: porque não podemos utilizar o sistema operacional do hospedeiro e assim acabar com esta sobrecarga?
Contêineres não necessitam de outro sistema operacional para que possam funcionar e isso é dado através do container runtime do
Docker, a Docker Engine.
A Docker Engine fica encarregada de todo isolamento de recursos que cada container necessita, eliminando toda a sobrecarga
existente no uso de máquinas virtuais.
INFRASTRUCTURE
nata.house - info.produtos - Desvendando oDocker - 2022
Imagens de Container
Agora que já sabemos o que é um container, vamos falar sobre imagens.
Uma imagem é um template com instruções para criação de um container, ou seja, uma imagem só se torna um container após sua
execução.
Uma imagem funciona em camadas, na primeira, é necessário definir em qual tipo de sistema sua imagem será baseada, como por
exemplo, debian, ubuntu ou em outra imagem já existente.
“Mas no capítulo anterior não havíamos dito que não eram necessários outros sistemas
operacionais para utilizar o docker?”
Sim, e isso continua sendo verdade. Essas imagens não carregam o kernel e todo aquele overhead e sim os
utilitários e ferramentas do sistema especificado.
É por isso que podemos ter imagens baseadas em linguagens, como por exemplo, uma imagem Python.
Imagens de Container
Na segunda camada podemos instalar utilitários ou programas que serão necessários para rodar nossa aplicação, como o nginx e
outras ferramentas.
Já na terceira camada é onde iremos realizar a cópia de nossa aplicação para imagem.
E na quarta e última camada, algo interessante ocorre. Até então, as camadas anteriores são somente leitura e no momento que
criamos um container a partir desta imagem, uma última camada que possibilita a leitura e escrita é adicionada.
A camada de leitura e escrita serve para armazenamento de quaisquer dados gerados em tempo de execução do container, qualquer
log gerado ou arquivo movido a informação criada.
Entretanto, atenção! Nesta camada existe somente o tempo de vida do container, ou seja, caso o container ‘morra’, toda essa camada
desaparece junto com qualquer arquivo que lá esteja salvo. Não existe persistência.
Para salvar os arquivos gerados, vamos usar volumes que iremos falar sobre já já. Continue a leitura!
Até agora, você já consegue dizer o que é um container, o que é o docker, o que são
imagens e também acabou de aprender que qualquer dado importante gerado
durante o tempo de vida do container, não poderá ser salvo dentro do mesmo.
Você já sabe a base, e com esse contexto já estabelecido, vamos voltar e falar um
pouco sobre as tecnologias que foram necessárias para que hoje pudéssemos ter o
Docker.
Namespaces e Cgroups
Falando um pouco sobre história, no início dos anos 2000 uma feature chamada namespaces foi adicionada ao Linux. Essa feature
fornece workspaces que basicamente isolam recursos da máquina.
Quando você executa um contêiner, o Docker cria um conjunto de namespaces para esse contêiner. Esses namespaces fornecem uma
camada de isolamento e cada aspecto de um contêiner é executado em um namespace separado com seu acesso limitado a esse
namespace.
Namespaces e Cgroups
Host
O cgroup também é responsável por isolar recursos, mas recursos
Container 1
Container 2
Container 3
relacionados à CPU e memória, enquanto namespaces são
(namespaces) (namespaces) (namespaces) responsáveis pelo isolamento da parte de network, usuários, discos,
processos e etc.
Kernel
Instalando e primeiros passos no Docker
nata.house - info.produtos - Desvendando oDocker - 2022
A instalação do Docker é bastante simples. Basta acessar o site Get Docker e escolher sua distribuição para download.
Caso você esteja no Linux e necessite realizar alguns ajustes na instalação, só acessar este link.
Para que possamos subir nosso primeiro container, iremos executar o seguinte comando em nosso terminal:
nata.house - info.produtos - Desvendando oDocker - 2022
Que a porta 80 do container seja mapeada para a porta 80 do computador host ( -p 80:80 )
Executando o comando acima o docker irá fazer o download da imagem e criar um container em sua máquina, mapeando a porta do
Abra seu navegador em “http://localhost:80”, você encontrará a documentação do Docker vindo direto de um container executando
em sua máquina!
Quando existir contêineres executando, este comando reunirá informações sobre todos nesta
container
container
iniciar o container
Iremos parar o container, ele desaparecerá da listagem e o site da documentação não estará mais disponível.
nata.house - info.produtos - Desvendando oDocker - 2022
O Dockerfile
Para que possamos criar imagens a partir de nossas aplicações, devemos primeiramente saber o que é o Dockerfile.
O Dockerfile é um documento de texto que contém todos os comandos que um usuário pode chamar para montar uma imagem.
É nele que vamos definir as camadas anteriormente citadas, instalando as dependências de nosso projeto, copiando os arquivos
necessários e definindo os comandos para que nosso projeto seja executado.
Para criarmos nosso primeiro Dockerfile, vamos primeiramente realizar um clone de um projeto.
Após criar uma pasta em seu computador, execute o seguinte comando dentro da mesma:
Navegue até a pasta ‘app’. Nela você encontrará dois arquivos: o ‘package.json’ e ‘yarn.lock’ e as pastas ‘spec’ e ‘src’.
Neste local, você criará um arquivo chamado ‘Dockerfile’ e em seguida iremos montá-lo.
Antes de iniciarmos a montagem, vamos comentar sobre alguns comandos utilizados no Dockerfile, são eles:
FROM: Especifica qual imagem base iremos utilizar, exemplo: Ubuntu, Debian..
RUN: Comandos que queremos que sejam executados durante a construção da imagem.
COPY: Comando utilizado para copiar arquivos para dentro da imagem criada.
EXPOSE: Comando que expõe uma porta do container para o mundo exterior, utilizado para acessarmos a aplicação
ENTRYPOINT: Assim como o ‘CMD’, o entrypoint define comando para execução da aplicação.
Agora que sabemos o básico sobre os comandos, crie seu arquivo ‘Dockerfile’ na pasta ‘app’ e cole o seguinte conteúdo:
Na primeira linha, estamos definindo qual será a imagem base. Essa em específico, é uma imagem que já possui o ‘node’ configurado
em uma distribuição linux chamada ‘alpine’, que é conhecida por ser bastante leve.
nata.house - info.produtos - Desvendando oDocker - 2022
Na segunda e terceira linhas, estamos adicionando algumas bibliotecas que serão utilizadas no projeto e definindo o diretório principal
da aplicação, como o ‘/app’.
Na quarta linha estamos copiando os conteúdos localizados na pasta onde o Dockerfile se encontra, para o diretório definido na linha
anterior, o ‘/app’.
Durante a quinta e sexta linha estamos instalando os pacotes necessários para aplicação e definindo o comando de execução.
Chegando na última linha, expomos a porta 3000 do container para o host, tornando possível acessar a aplicação.
Aqui estamos pedindo para o docker ‘buildar’, definindo a imagem com o nome ‘getting-started’ ( -t ), o Dockerfile localizado onde o
terminal está rodando, ou seja, na pasta atual (representado pelo ponto ‘.’).
O Docker se encarregará da construção da imagem, executando os comandos definidos e então nossa imagem estará criada.
E ao entrarmos em ‘http://localhost:3000/’ iremos nos deparar com a aplicação que acabamos de conteinerizar!
nata.house - info.produtos - Desvendando oDocker - 2022
Lá no início deste material, falamos que tudo que é criado pelo container durante seu
tempo de vida e não é salvo fora do mesmo, é perdido, ele não possui persistência.
Como o próprio nome já diz, trata-se de um volume criado para persistir os arquivos
Para proceder com sua criação é bastante simples. Basta executar o seguinte comando:
Em seguida, se executarmos o comando ‘docker volume inspect todo-volume’, podemos ver algumas especificações do volume criado,
Podemos observar inclusive, que é possível ver onde nosso volume está sendo guardado, caminho designado pelo ‘Mountpoint’.
Agora com nosso volume criado, basta configurar nosso container para utilizar o volume criado.
(Caso o container esteja rodando, pare-o para que possamos reiniciá-lo. Utilize ‘docker container ps’ para listar os containers ativos e
‘docker stop <container>’ para pará-lo.)
A configuração se dará com um comando a mais no ‘docker run’. Este comando irá comunicar para nosso container que existe um
volume criado para ele, e iremos dizer de qual pasta dentro do container o conteúdo deverá ser salvo no volume.
Em adendo ao comando inserido anteriormente, adicionamos a seguinte linha “-v todo-volume: /etc/todos/ ”, em que:
“todo-volume: /etc/todos/ ” define que o volume a ser utilizado será o ‘todo-volume’ e os arquivos a serem salvos nele serão provenientes
Para testarmos o uso do container, execute o comando acima (se não executou ainda), adicione um item na lista da aplicação, derrube
Você poderá ver que o item inserido ainda se encontra na listagem. Isso porque ao iniciar o container, os arquivos salvos no volume
Conclusão
Ao longo deste material, pudemos ter um pouco de contexto sobre a evolução das tecnologias necessárias para chegarmos até aqui.
Vimos sobre o que é um container, o que é o Docker e como realizar operações básicas com ele.
Criamos nosso primeiro volume e adicionamos persistência a um container que criamos a partir de um Dockerfile.
Estamos no início da era da conteinerização, muitas aplicações e diversas empresas utilizam tecnologias
semelhantes para administrar e visualizar suas aplicações conteinerizadas.
Então, se você trabalha com desenvolvimento e quer se destacar no mercado, é importante que entenda
e saiba usar essa ferramenta a seu favor.
Compartilhar experiências e
Chegamos ao final da nossa jornada e esperamos que você tenha gostado e aprendido com esse conhecimentos faz parte do
conteúdo.
DNA da moçada aqui na
nata.house!
nata.house - info.produtos - Desvendando oDocker - 2022
Autor
Rodolfo Moreira - Desenvolvedor na nata.house
Conheça a nata.house
Somos uma empresa de criação de soluções que tem como objetivo resolver problemas por meio da tecnologia. Trabalhamos com
Com um time altamente especializado, nosso foco é escalar seu produto e negócio.
Unimos expertise técnica, tecnologias modernas e comunicação proativa para criar softwares que cumprem seus objetivos dentro
A nata.house maximiza resultados para clientes ao focar em um conjunto de tecnologias sólidas usadas por grandes empresas
(React, NodeJS e o ecossistema ao seu redor). Nossos serviços ficam ainda mais eficazes com o acompanhamento, de engenheiros
sênior e de um arquiteto especialista, que ajudam a chegar na solução ideal para cada projeto.
Como não somos apenas desenvolvedores, com uma raíz forte em negócios, abraçamos a evolução e inovação constantes nos
processos internos em prol da melhora dos serviços. Não queremos ser uma fábrica de software qualquer, mas sim chegar num
Fontes: