===== Gerenciamento do Docker - Nível Básico =====
==== Nível Básico ====
* **Verificar a versão do Docker instalada:**
- docker --version
- Exibe a versão do **Docker** instalada no sistema.
* **Listar os containers em execução:**
- docker ps
- Mostra uma lista dos containers que estão atualmente em execução.
* **Listar todos os containers (em execução e parados):**
- docker ps -a
- Exibe todos os containers, incluindo os que já foram executados e pararam.
* **Listar as imagens Docker disponíveis:**
- docker images
- Exibe uma lista de todas as imagens disponíveis localmente no sistema.
* **Iniciar um container baseado em uma imagem:**
- docker run -d nginx
- Inicia um container da imagem **nginx** em segundo plano (`-d` para **detached mode**).
* **Executar um container interativamente:**
- docker run -it ubuntu /bin/bash
- Inicia um container **Ubuntu** interativo (`-it` para modo interativo) e abre um shell **bash** no container.
* **Parar um container em execução:**
- docker stop nome_do_container
- Para um container em execução, identificando-o pelo nome ou ID.
* **Remover um container parado:**
- docker rm nome_do_container
- Remove um container que não está mais em execução.
* **Remover uma imagem Docker:**
- docker rmi nome_da_imagem
- Remove uma imagem Docker do sistema local.
* **Obter logs de um container em execução:**
- docker logs nome_do_container
- Exibe os logs do container especificado, permitindo visualizar a saída do processo dentro do container.
* **Inspecionar um container para obter detalhes:**
- docker inspect nome_do_container
- Exibe informações detalhadas sobre um container, incluindo configurações de rede, volumes e variáveis de ambiente.
* **Iniciar um container parado:**
- docker start nome_do_container
- Inicia um container que foi previamente parado.
* **Acessar um container em execução:**
- docker exec -it nome_do_container /bin/bash
- Abre um shell **bash** interativo dentro de um container que já está em execução.
* **Remover todos os containers parados de uma vez:**
- docker container prune
- Remove todos os containers parados do sistema, liberando espaço.
* **Obter ajuda sobre os comandos do Docker:**
- docker --help
- Exibe o menu de ajuda com a lista de comandos disponíveis do **Docker**.
===== Gerenciamento do Docker - Nível Intermediário =====
==== Nível Intermediário ====
* **Criar e utilizar volumes Docker para persistência de dados:**
- docker volume create meu_volume
- Cria um volume persistente chamado **meu_volume**, que pode ser usado por containers.
* **Montar um volume em um container:**
- docker run -d -v meu_volume:/var/www/html nginx
- Inicia um container **nginx** e monta o volume **meu_volume** no diretório `/var/www/html` do container, permitindo que dados persistam mesmo após a remoção do container.
* **Listar todos os volumes criados:**
- docker volume ls
- Exibe uma lista de todos os volumes Docker disponíveis.
* **Remover volumes não utilizados:**
- docker volume prune
- Remove todos os volumes que não estão sendo usados por nenhum container, liberando espaço no sistema.
* **Criar uma rede personalizada no Docker:**
- docker network create minha_rede
- Cria uma rede **bridge** chamada **minha_rede** que pode ser usada para conectar containers.
* **Conectar um container a uma rede específica:**
- docker run -d --network minha_rede nginx
- Inicia um container **nginx** e conecta-o à rede **minha_rede**, permitindo que ele interaja com outros containers na mesma rede.
* **Listar todas as redes Docker disponíveis:**
- docker network ls
- Exibe uma lista de todas as redes Docker criadas.
* **Inspecionar uma rede Docker para obter detalhes:**
- docker network inspect minha_rede
- Exibe informações detalhadas sobre a rede **minha_rede**, incluindo containers conectados, configuração de IP e outras propriedades.
* **Desconectar um container de uma rede:**
- docker network disconnect minha_rede nome_do_container
- Remove o container **nome_do_container** da rede **minha_rede**, mantendo o container em execução.
* **Limitar o uso de CPU e memória de um container:**
- **Limitar a CPU a 50%**:
docker run -d --cpus="0.5" nginx
- **Limitar a memória a 256MB**:
docker run -d --memory="256m" nginx
- Esses comandos iniciam containers **nginx** limitando o uso de **CPU** e **memória**, ajudando a controlar os recursos consumidos.
* **Executar um container com prioridade de CPU (shares):**
- docker run -d --cpu-shares 512 nginx
- Executa um container **nginx** com prioridade de **CPU** ajustada, onde **512** indica que o container receberá mais CPU que um container com **shares** padrão (1024 é o padrão).
* **Limitar o uso de I/O no disco de um container:**
- docker run -d --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb nginx
- Limita a taxa de leitura e gravação no dispositivo `/dev/sda` a **1MB/s**, controlando o uso de I/O do container.
* **Renomear um container existente:**
- docker rename container_antigo container_novo
- Renomeia o container **container_antigo** para **container_novo**, mantendo o container em execução.
* **Verificar o uso de recursos (CPU, memória, rede, I/O) de containers:**
- docker stats
- Mostra em tempo real o uso de **CPU**, **memória**, **rede** e **I/O** de todos os containers em execução.
* **Verificar o histórico de uma imagem Docker:**
- docker history nome_da_imagem
- Exibe o histórico de camadas de uma imagem Docker, incluindo comandos utilizados para a construção da imagem.
* **Efetuar login no Docker Hub para baixar imagens privadas:**
- docker login
- Realiza o login no Docker Hub (ou em outro registro Docker) para permitir o download de imagens privadas.
* **Fazer o pull de uma imagem privada de um repositório:**
- docker pull nome_do_usuario/imagem_privada
- Baixa uma imagem privada de um repositório após efetuar o login no Docker Hub.
===== Gerenciamento do Docker - Nível Avançado =====
==== Nível Avançado ====
* **Construir uma imagem Docker personalizada com um Dockerfile:**
- **Criar um Dockerfile básico:**
```
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y nginx
COPY ./meu_arquivo.html /var/www/html/index.html
CMD ["nginx", "-g", "daemon off;"]
```
- **Construir a imagem:**
docker build -t minha_imagem_customizada .
- Cria uma imagem personalizada chamada **minha_imagem_customizada** com base em um **Dockerfile**, que instala o **nginx** e copia um arquivo HTML.
* **Listar as camadas de uma imagem Docker:**
- docker history minha_imagem_customizada
- Exibe todas as camadas de uma imagem, mostrando quais comandos foram utilizados para construí-la.
* **Executar uma imagem com variáveis de ambiente personalizadas:**
- docker run -d -e VAR1=valor1 -e VAR2=valor2 minha_imagem_customizada
- Inicia um container da imagem **minha_imagem_customizada** com as variáveis de ambiente **VAR1** e **VAR2** definidas.
* **Criar e usar um arquivo `.env` para variáveis de ambiente:**
- **Exemplo de arquivo `.env`:**
```
MYSQL_USER=user
MYSQL_PASSWORD=secret
```
- **Executar o container utilizando o `.env`:**
docker run --env-file .env mysql
- Utiliza um arquivo **`.env`** para definir variáveis de ambiente no container **MySQL**.
* **Criar uma rede Docker entre múltiplos containers (Docker Compose):**
- **Criar um arquivo `docker-compose.yml`:**
```
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: exemplo
```
- **Iniciar múltiplos containers com Docker Compose:**
docker-compose up -d
- Utiliza o **Docker Compose** para orquestrar e iniciar múltiplos containers (um **nginx** e um **MySQL**) com uma única configuração.
* **Parar e remover containers criados com Docker Compose:**
- docker-compose down
- Para e remove todos os containers, redes e volumes criados pelo comando **`docker-compose up`**.
* **Construir imagens com Docker Compose (build):**
- **Adicionar a seção build no `docker-compose.yml`:**
```
version: '3'
services:
web:
build: .
ports:
- "80:80"
```
- **Construir e iniciar os containers:**
docker-compose up --build
- Utiliza o **Docker Compose** para construir uma imagem personalizada com base em um **Dockerfile** no diretório atual.
* **Limitar o uso de CPU e memória em Docker Compose:**
- **Adicionar limites no `docker-compose.yml`:**
```
version: '3'
services:
web:
image: nginx
deploy:
resources:
limits:
cpus: "0.5"
memory: "512M"
```
- Limita o uso de **CPU** e **memória** para o serviço **nginx** utilizando **Docker Compose**.
* **Inspecionar a rede criada pelo Docker Compose:**
- docker network inspect nome_da_rede
- Exibe detalhes sobre a rede **Docker Compose**, incluindo os containers conectados e os IPs atribuídos.
* **Iniciar um container de forma temporária para testes:**
- docker run --rm -it ubuntu /bin/bash
- Inicia um container **Ubuntu** de forma temporária com o **`--rm`**, garantindo que ele seja removido automaticamente após o término da execução.
* **Usar volumes com Docker Compose:**
- **Adicionar volumes no `docker-compose.yml`:**
```
version: '3'
services:
web:
image: nginx
volumes:
- meu_volume:/var/www/html
volumes:
meu_volume:
```
- Utiliza **volumes Docker** com **Docker Compose**, criando um volume chamado **meu_volume** e montando-o no diretório `/var/www/html` do **nginx**.
* **Remover imagens antigas de containers não utilizados:**
- docker image prune
- Remove todas as imagens não utilizadas no sistema, liberando espaço.
* **Remover containers, volumes e redes de forma automática:**
- docker system prune
- Remove todos os containers, volumes, e redes que não estão em uso, liberando espaço e limpando o ambiente Docker.
* **Verificar logs de múltiplos containers com Docker Compose:**
- docker-compose logs
- Exibe os logs de todos os containers gerenciados pelo **Docker Compose**.