6.1 Imagens (Images)
Pra trabalhar de boa com Docker, é importante entender alguns termos chave: imagens, containers
e registries
. Bora analisar esses termos pra sacar pra que servem e como interagem entre si.
Imagem Docker — é um modelo a partir do qual os containers são criados. A imagem contém todos os componentes necessários pra rodar uma aplicação: sistema operacional, aplicação, bibliotecas e dependências, e também arquivos de configuração. Fazendo uma analogia com OOP: a imagem Docker é como uma classe, e o container é o objeto dessa classe. As imagens são criadas com um arquivo chamado Dockerfile — um arquivo de texto que descreve os passos pra criar a imagem.
Características principais das imagens:
- Estrutura em camadas: as imagens são compostas de várias camadas. Existe uma camada base, e cada uma das seguintes representa mudanças em relação à camada anterior. Isso economiza espaço e reduz o tempo de download.
- Reutilização: a mesma imagem pode ser usada pra criar vários containers.
- Portabilidade: as imagens podem ser transportadas entre sistemas diferentes, o que as torna ideais pra desenvolvimento, testes e deploy de aplicações em vários ambientes.
Exemplos de uso das imagens:
Criando sua própria imagem: você pode criar sua própria imagem escrevendo um Dockerfile, onde você especifica as configurações da sua aplicação e suas dependências.
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]
Usando uma imagem pronta: você pode usar as imagens disponíveis no Docker Hub pra rapidamente rodar aplicações padrão, como web servers ou bancos de dados.
docker pull nginx
Esse comando faz o download da imagem nginx do repositório público Docker Hub.
6.2 Containers
Um container Docker é uma instância em execução de uma imagem. Os containers isolam aplicativos e suas dependências em um ambiente de execução separado, o que permite executá-los independentemente do sistema host e de outros containers. Containers são leves porque usam o kernel do sistema operacional host em vez de criar um kernel separado, como fazem as máquinas virtuais.
Principais características dos containers:
- Isolamento: os containers isolam aplicativos, garantindo sua execução independente e prevenindo conflitos de dependências.
- Leveza: os containers consomem menos recursos em comparação com máquinas virtuais, pois não precisam de um sistema operacional separado.
- Inicialização rápida: os containers são iniciados e parados muito mais rápido do que máquinas virtuais, o que os torna ideais para ambientes dinâmicos e escalonamento.
Exemplos de uso de containers:
Executando um container: você pode executar um container a partir de uma imagem usando o comando docker run.
docker run -d -p 80:80 --name mynginx nginx
Gerenciamento de containers: o Docker fornece comandos para gerenciar containers: start, stop, restart, rm e exec.
docker stop mynginx
docker rm mynginx
Você aprenderá mais sobre todos os comandos e seus parâmetros em aulas futuras.
6.3 Registries
Registry do Docker — é um repositório de imagens Docker. Os registries permitem que devs e organizações armazenem, gerenciem e distribuam imagens de containers. Existem registries públicos e privados.
Características principais dos registries:
- Registries públicos: como o Docker Hub, oferecem acesso a várias imagens criadas pela comunidade e por devs oficiais.
- Registries privados: são usados pra armazenar e gerenciar imagens dentro de uma organização, garantindo controle de acesso e segurança.
- Integração com CI/CD: os registries se integram fácil com sistemas de integração e entrega contínuas, automatizando o processo de criação e deploy de imagens.
Exemplos de uso de registries:
1. Docker Hub: registry público (e o mais popular) de imagens Docker. Fornece acesso a várias imagens prontas (e muitas vezes verificadas, como indicado pelas stats de download).
docker pull nginx
docker push myusername/myimage:tag
2. Registry privado: você pode configurar e usar seu próprio registry com o Docker Registry.
docker run -d -p 5000:5000 --name registry registry:2
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
Interação entre imagens, containers e registries
Esses três componentes estão intimamente conectados e formam a base do trabalho com o Docker:
- Criação de imagem: o dev cria uma imagem usando um Dockerfile e a salva localmente.
- Envio da imagem para o registry: a imagem é enviada para o registry (por exemplo, Docker Hub ou um registry privado), onde é armazenada e fica acessível pra outros users ou sistemas.
- Execução do container: o user baixa uma imagem do registry e executa um container, que isola o app e garante sua execução.
6.4 Orquestração (Orchestration)
Orquestração — é o processo de gerenciamento de vários containers em um ambiente distribuído. Ferramentas de orquestração ajudam a automatizar a implantação, escalonamento e gerenciamento dos containers.
- Kubernetes: a plataforma de orquestração de containers mais popular que permite gerenciar um cluster de containers em diferentes nós.
- Docker Swarm: plataforma de orquestração integrada no Docker para criar e gerenciar clusters de Docker.
- Funções de orquestração: escalonamento automático, autorrecuperação, gerenciamento de redes e balanceamento de carga.
6.5 Redes (Networks)
As redes no Docker permitem que os containers interajam entre si e com o mundo externo. O Docker oferece vários tipos de redes para diferentes cenários de uso.
- Bridge: a rede padrão criada pelo Docker. Os containers na rede bridge podem interagir entre si.
- Host: o container usa as interfaces de rede da máquina host, obtendo acesso direto a elas.
- Overlay: usada para criar redes entre vários daemons Docker. Necessária para a orquestração.
- None: desativa todas as interfaces de rede do container. Útil para tarefas isoladas.
6.6 Volumes
Volumes — são um mecanismo pra armazenar dados dos containers de forma persistente. Eles permitem que os dados fiquem salvos fora do container, assim a informação não é perdida quando reiniciar ou deletar o container.
- Criar um volume: os volumes são criados com o comando docker volume create.
- Montar um volume: os volumes são conectados aos containers com a flag
-v
ao iniciar. - Vantagens: volumes garantem um jeito fácil de salvar e compartilhar dados entre containers, além de terem um desempenho melhor se comparados com diretórios vinculados (bind mounts).
Importante!
Um volume é como um disco rígido virtual que pode ser conectado a uma máquina virtual ou container. Geralmente ele é salvo no sistema operacional hospedeiro como um arquivo comum.
GO TO FULL VERSION