DEV Community

Felipe Oliveira for Felipe Oliveira (pt-BR)

Posted on • Updated on

Docker: Parte 1 - Introdução

Introdução

O Docker é um serviço de virtualização que isola nossa aplicação do sistema operacional do host/computador hospedeiro, evitando o erros na execução da nossa aplicação independente do sistema base (Windows, Linux, Mac, etc).

Ele utiliza o conceito de “containers”, os quais possuem tudo que a nossa aplicação precisa para executar (servidor, banco de dados, etc). Diferente de uma VM, um container não contém o Sistema Operacional dentro do mesmo, ele roda sobre o sistema do host, o que diminui e muito o seu tamanho.

Cada container roda de maneira independente e não enxerga as coisas que são executadas no host/computador hospedeiro.

Arquitetura

Client: Aplicação cliente: CLI/Terminal ou Remote API

Host/Engine: Possui um Daemon que interpreta os comandos do client e executa os mesmos, além disso o host possui os containers e as imagens.

Registry: Repositórios para imagens Docker, exemplos: Docker Hub, AWS ECS, Azure Registry, etc. Da mesma forma podemos ter públicas e privadas.

Imagem da arquitetura do Docker. A esquerda uma coluna indicando o cliente contendo o Fonte: Docker Documentação

Instalação

O Docker possui 2 formas principais de instalação, via Docker Desktop ou via Docker Engine. O primeiro possui uma interface gráfica e cria uma VM para rodar o Docker, mesmo estando em um host Linux, enquanto o segundo funciona através do terminal. Essas duas formas não são muito compatíveis devido as diferenças, e portanto devemos escolher apenas uma para o uso.

Composição

Dockerfile: Define a arquitetura da nossa aplicação como: versão do node/ferramenta vamos usar, qual a versão do banco de dados vamos usar, qual arquitetura nós vamos buildar a aplicação, etc.

Imagem: “É um template somente de leitura com instruções para criar um container. É frequentemente baseada em outra imagem com alguma customização. Eu posso ter uma imagem do Unbuntu a qual eu inseri o servidor Apache por exemplo.” - Docker Documentation

Container: É a nossa imagem instância rodando no host. Ele é “stateless”, ou seja, não persiste informações quando interrompido. Ele não persiste as informações do banco de dados!!! Para isso usamos algo chamado volume ou outras técnicas de persistência, ver documentação:

Persistência

Para que possamos persistir informações de um banco de dados mesmo após um container ser interrompido ou deletado, o Docker disponibiliza algo chamado volume.

Volume: Um volume mapeia no host um espaço que vai ser compártilhado com uma área no filesystem do Docker, vamos fazer o “mount” dessa estrutura.

Exemplo da documentação referente ao MariaDB (Seção: “Where to Store Data”):

Comandos Comuns:

# Quantos e quais containers estão em execução
# Exibe ate os containers parados
docker ps
docker ps -a

# Exibe as imagens
docker images
docker images -a

# run: Cria e inicia um novo container com base na imagem 'my-image' dando um nome
# aleatório para o container.
# --name: Atribui o nome 'my-container' para o container referente a imagem
# 'my-image'.
docker run my-image
docker run --name my-container my-image

# -d: roda o container em background
# -p: porta, no exemplo mapeamos a porta 8088 do host para a porta 80 do container
docker run -d my-image
docker run --name my-container -d -p 8088:80 my-image

# Parar um ou todos os containers
docker stop
dcoker stop containerID

# Iniciar um container
docker start containerID

# Remover um container
# Remover uma imagem
docker container rm containerID
docker image rm image-name / imageID

# Gerar a imagem / build
docker image build image-name

# Executar o bash dentro de uma imagem Ubuntu
# -it: de iterativo, esse comando te leva para dentro do container
# bash: nesse caso estamos executando o terminal bash dentro do container
docker run -it ubuntu bash
Enter fullscreen mode Exit fullscreen mode

Fontes:

Top comments (0)