Para uma melhor experiência com caixas de código, experimente ver o site em um Desktop.
No post anterior, instalamos o Docker CE no Oracle Linux 9 e testamos com um container nginx. E agora, quais comandos você vai usar no dia a dia para baixar imagens, subir containers, ver o que está rodando e descobrir por que algo parou?
É a situação de quase todo mundo que está começando: o Docker funciona, mas cada tarefa vira uma busca no Google. Este guia reúne os 14 comandos básicos do Docker que resolvem a maior parte do trabalho, de docker pull e docker run até docker logs, docker exec, volumes e redes, cada um com uma descrição curta do que faz.
No fim, juntamos tudo em dois exemplos de Docker Compose: um simples, com uma imagem, e outro com duas imagens trabalhando juntas. Os comandos foram escritos para o Oracle Linux 9 e funcionam do mesmo jeito no Rocky Linux 9 e em qualquer distribuição com o Docker CE instalado. No próximo post da trilha, o Portainer mostra tudo isso em uma interface web.
Descrição: Verifica a versão instalada do Docker.
Exemplo:
docker --version
Saída esperada:
Docker version 20.10.7, build f0df350
Descrição: Baixa uma imagem do repositório Docker Hub.
Sintaxe:
docker pull <nome-da-imagem>
Exemplo:
docker pull nginx
Explicação: Este comando baixa a última versão da imagem do Nginx do Docker Hub.
Descrição: Lista todas as imagens disponíveis localmente.
Exemplo:
docker images
Saída esperada:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4bb46517cac3 2 weeks ago 133MB
Descrição: Cria e inicia um contêiner a partir de uma imagem.
Sintaxe:
docker run [opções] <nome-da-imagem>
Exemplo:
docker run -d -p 80:80 nginx
Explicação: Este comando inicia um contêiner em modo destacado (background) e mapeia a porta 80 do host para a porta 80 do contêiner usando a imagem do Nginx.
Descrição: Lista todos os contêineres em execução.
Exemplo:
docker ps
Saída esperada:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4f3c9fa871e nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp serene_lewin
Descrição: Lista todos os contêineres, incluindo os que estão parados.
Exemplo:
docker ps -a
Saída esperada:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4f3c9fa871e nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp serene_lewin
9b1c8f931d6a ubuntu "bash" 5 minutes ago Exited (0) 4 minutes ago quizzical_swartz
Descrição: Para um contêiner em execução.
Sintaxe:
docker stop <id-do-contêiner>
Exemplo:
docker stop e4f3c9fa871e
Descrição: Remove um contêiner parado.
Sintaxe:
docker rm <id-do-contêiner>
Exemplo:
docker rm 9b1c8f931d6a
Descrição: Remove uma imagem.
Sintaxe:
docker rmi <id-da-imagem>
Exemplo:
docker rmi 4bb46517cac3
Descrição: Executa um comando em um contêiner em execução.
Sintaxe:
docker exec [opções] <id-do-contêiner> <comando>
Exemplo:
docker exec -it e4f3c9fa871e /bin/bash
Explicação: Este comando abre um terminal interativo dentro do contêiner Nginx em execução.
Descrição: Exibe os logs de um contêiner.
Sintaxe:
docker logs <id-do-contêiner>
Exemplo:
docker logs e4f3c9fa871e
Descrição: Exibe informações detalhadas sobre um contêiner ou uma imagem.
Sintaxe:
docker inspect <id-do-contêiner | id-da-imagem>
Exemplo:
docker inspect e4f3c9fa871e
Descrição: Lista todas as redes Docker.
Exemplo:
docker network ls
Saída esperada:
NETWORK ID NAME DRIVER SCOPE
0eab0dfdd1ef bridge bridge local
9b1b7c85d0df host host local
eebc46a8b448 none null local
Descrição: Lista todos os volumes Docker.
Exemplo:
docker volume ls
Saída esperada:
DRIVER VOLUME NAME
local my_volume
Estrutura do Projeto
my_app/
├── docker-compose.yml
└── index.html
Arquivo docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./index.html:/usr/share/nginx/html/index.html
Conteúdo do index.html
<!DOCTYPE html>
<html>
<head>
<title>My Dockerized App</title>
</head>
<body>
<h1>Hello, Docker!</h1>
</body>
</html>
Explicação
Estrutura do Projeto: O projeto consiste em um arquivo docker-compose.yml e uma página HTML simples index.html.
docker-compose.yml:
services: Define os serviços a serem executados.
web: O serviço baseado na imagem oficial do Nginx.
ports: Mapeia a porta 8080 do host para a porta 80 do contêiner.
volumes: Monta o arquivo local index.html dentro do contêiner para substituir a página padrão do Nginx.
Estrutura do Projeto
my_app/
├── docker-compose.yml
├── db_data/
└── web/
├── Dockerfile
├── app.py
└── requirements.txt
Arquivo docker-compose.yml
version: '3.8'
services:
db:
image: postgres:latest
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydatabase
volumes:
- ./db_data:/var/lib/postgresql/data
web:
build: ./web
ports:
- "5000:5000"
environment:
DATABASE_URL: postgres://myuser:mypassword@db:5432/mydatabase
depends_on:
- db
volumes:
- ./web:/usr/src/app
Conteúdo do Dockerfile (dentro da pasta web/)
FROM python:3.9-slim
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Conteúdo do requirements.txt (dentro da pasta web/)
flask
psycopg2-binary
Conteúdo do app.py (dentro da pasta web/)
from flask import Flask
import psycopg2
import os
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Dockerized World!"
@app.route('/db')
def db_test():
try:
conn = psycopg2.connect(
dbname=os.environ['POSTGRES_DB'],
user=os.environ['POSTGRES_USER'],
password=os.environ['POSTGRES_PASSWORD'],
host='db'
)
return "Connected to the database!"
except:
return "Failed to connect to the database."
if __name__ == '__main__':
app.run(host='0.0.0.0')
Explicação
Estrutura do Projeto: O projeto consiste em um arquivo docker-compose.yml, uma pasta db_data/ para dados do banco de dados e uma pasta web/ com o código da aplicação web.
docker-compose.yml:
services: Define dois serviços: db e web.
db: Serviço baseado na imagem oficial do Postgres, configurado com variáveis de ambiente e um volume para persistência dos dados.
web: Serviço que constrói a imagem a partir do Dockerfile na pasta web/, mapeia a porta 5000 do host para a porta 5000 do contêiner e define a variável de ambiente DATABASE_URL para conectar ao banco de dados Postgres. O serviço web depende do serviço db.
volumes: Monta a pasta local web/ dentro do contêiner para desenvolvimento.
1. Exemplo 1:
Navegue até a pasta my_app.
Execute: docker-compose up.
2. Exemplo 2:
Navegue até a pasta my_app.
Execute: docker-compose up --build.
Esta série tem quatro posts. Siga na ordem para ir da instalação do Docker até aplicações rodando em containers.