DEV Community

Felipe Oliveira for Felipe Oliveira (pt-BR)

Posted on • Edited 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:

AWS Q Developer image

Your AI Code Assistant

Implement features, document your code, or refactor your projects.
Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay