Thab's development stack

Um jeito simples e fácil de entender o Docker

September 06, 2019

Whale

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.

different

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.

hypervisor

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.

VMvsContainer

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?

  1. 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.
  2. 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.
  3. 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.
  4. 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:

graph

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

dockerps

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

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.

postbird

Espero que tenham gostado e comecem a utilizar o docker e todo esse ecossistema lindo!

whales

Até mais!


Thabata Almeida

Written by Thabata Almeida who lives in Salvador, works at Ericsson on test automation with Ruby. Computer Science student who learn every day. You should follow her on Twitter