Um jeito simples e fácil de entender o Docker
September 06, 2019
Se você é um estudante de computacão, programador jr ou qualquer coisa relacionada a TI certamente já ouviu falar de Docker.
Estamos falando de uma tecnologia que permite criar, administrar, empacotar servicos de forma isolada utilizando containers. Resumidamente ao atualizar um servico não implicará no funcionamento do aplicativo como um todo.
Como funciona?
Primeiro é necessario entender a diferenca de um container e uma máquina virtual, apesar de terem o mesmo proposito: isolar a aplicacao e suas dependencias, as duas tem arquituras diferentes, logo, funcionam de forma diferente.
Maquina Virtual
Como o nome ja diz uma máquina virtual é uma maquina que executa programas como um computador normal, só que ela é “apenas” uma emulacao. Ou seja, uma VM roda em cima de um computador físico no que chamamos de hypervisor
hypervisor é uma das camadas entre a camada de software e hardware, responsavel por abstrair das máquinas virtuais para o nosso sistema operacional.
Container
Diferente da VM, que ha a “visualizacao” do hardware, os containers tem essa parte abstraida. Ou seja, o sistema operacional enxerga o container como mais um espaco na memoria utilizada pelo usuario, ao inves de indexar um SO proprimanente dito. Mas todo proposito é exatamente igual, tem seu espaco na memoria execucao, root e até seu endereco de ip e portas privados. A grande diferenca é que os containers compartilham o mesmo host no kernel do SO.
Um contêiner é um tipo especial de processo isolado de outros processos. Os contêineres recebem recursos que nenhum outro processo pode acessar e não podem acessar nenhum recurso não explicitamente atribuído a eles, ou seja, estão isolados de toda a aplicacao.
Docker
A diferenca entre VM e Containers ja foi falado, mas onde o docker entra nisso tudo:
O que é o Docker
Docker é um projeto open-source que se baseia nos containers do kernal das distribuicoes do Linux. Containers são utilizados ha anos, mas só porque de uns anos para ca se tornou tornou tão popular?
- Facilidade de utilizacao: Com o uso do docker você pode buildar sua aplicacao em seu notbook e rodar em uma nuvem publica ou privada, sem que a mesma seja modificada.
- Velocidade: Para buildar um container leva alguns segundos e isso não consumira seus recursos. Enquanto uma vm para ser inicializada precisará bootar todo o sistema operacional da maquina virtual.
- Docker Hub: a maior bibliteca e comunidade de imagens para containers, cerca de 100,000 de imagens disponiveis para serem utilizadas o que facilida demais a vida do desenvolvedor.
- Escalabilidade: Como falei no inicio do post um recurso da aplicacao estará isolada do restante da aplicacao, entao fica mais facil de escalar a mesma sem muitos problemas, uma será atualizada enquanto as outras continuaram fazendo seus devidos trabalhos.
Comunicação dos containers
Para fazer a comunicacão são atribuidas portas para os containers. A aplicacao so tem acesso fazendo um request da porta atribuida, como por exemplo no gráfico abaixo:
Principais Conceitos
É necessario entender alguns conceitos do docker antes de comecar a desenvolver com ele
Imagem
Servicos que podem ser colocados em containers da aplicacao, como ferramentas, por exemplo:
- Postgree
- Mysql
- Reggis
Container
Instancia da imagem, ou seja, poderiamos ter 3 containers rodando com o Mysql na nossa aplicacao.
Docker Hub
Registro de todas as imagens do docker, onde podemos cadastrar e encontrar as imagens para a nossa aplicacao.
Dockerfile
Onde vamos escrever as instrucoes de nossa propria imagem, define como a imagem da apliacao deverá funcionar em um ambiente do zero
# a partir de uma imagem existente
From node:10
# definir a pasta de arquivo
WORKDIR /usr/app
COPY ../
# instalacao de dependencia
RUN YARN
# porta
EXPOSE 3333
#EXECUTA APLICACAO
CMD yarn start
Da a flexibilidade criar um servidor completamente do zero com apenas um comando, seja um servidor online, ou outra máquina.
Configurando o Docker
Antes de mais nada é preciso instalar o docker em sua maquina, voce pode encontra-lo neste link
a instalacao dele é bem simples, basta baixar, arrastar e instalar. Feito isso ver se tudo deu certo rodando o comando a seguir:
docker -v
E então rodar outro comando para ver se a mesmo esta funcional:
docker help
Então será listado os comandos disponíveis do Docker.
No exemplo deste tutorial vou usar a imagem do postgree para utiliza como servico em um aplicacao.
imagem do Postgree
Primeiro vou procurar a imagem postgree do hub então baixar o comando que esta na propria documentacao, isto certificará que estarei baixando a versão mais estavel da imagem.
Existem algumas variaveis que é preciso entender antes de rodar o comando:
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
neste caso a imagem viria com todas as variaveis de ambiente default, mas não quero isso. Então vou rodar:
docker run --name database -e POSTGRES_PASSWORD=docker -p 5432:5432 -d postgres
- —name nome do banco que estou criando
- POSTGRES_PASSWORD= senha banco postgree
-
-p 5432:5432 -> Porta que será utilizada pelo postgree para receber e enviar dados.
- se ja estiver utilizando esta porta voce poderá escolher outra para acessar o postgree
Então o container será inicializado automaticamente. Para ver as informacoes dos containers ativos na maquina: docker ps
Comandos uteis
Ao reiniciar sua máquina o docker estará desligado, então todos os seus containers também. Para que tudo volte a funcionar você poderá listar os containers de sua máquina:
docker ps -a
este comando mostrará todos os containers inclusives os não ativos. E então startar o container utilizando seu nome:
docker start database
Conteúdo adicional: Cli postgree
Como utilizei o posrtgree como exemplo de imagem do docker, algo que uso muip é o Postbird Cli, uma interface visual para visualizar o banco de dados do postgree. Disponivel para toda as plataformas: post bird cli, interface visual para visualizar os dados do portgree, disponivel para todas as plataformas.
Espero que tenham gostado e comecem a utilizar o docker e todo esse ecossistema lindo!
Até mais!