Cheatsheet de Docker e Docker Compose
Tópicos
Nesse artigo você vai encontrar os principais comandos utilizados no Docker e no Docker Compose, bem como esqueletos de cada um deles e minhas anotações.
Docker
CLI
1docker run -it --rm -p 80:80 -d --name test -v ubuntu bash
2
3docker: nome da funcionalidade
4run: comando (ps, run, start, purge etc) que executa o container a partir da imagem construída
5 run: executa um container a partir da imagem construída
6 stop: para um container em execução
7 start: inicia um container parado
8 build: comando para construir a imagem, e.g. docker build -t usuario/imagem:latest .
9 -t <nome-do-usuario>/<nome-da-imagem>:<nome-da-tag>: cria uma tag para a imagem
10 <diretório-do-Dockerfile>: indica aonde está o Dockerfile
11 -f: define outro nome para encontrar o Dockerfile (e.g. Dockerfile.prod)
12 ps: lista os containers sendo executado
13 -a: lista os containers, mesmo parados
14 -q: lista apenas os IDs dos containers
15 rm <id>: remove um container parado a partir do ID listado em ps
16 rm <id> -f: remove um container até mesmo sendo executado
17 pull <nome-da-imagem>:<tag-da-imagem>: baixa uma imagem do cointainer registry
18 images: lista as imagens existentes na máquina
19 rmi <nome-da-imagem>:<tag-da-imagem>: remove uma imagem
20 push <nick-no-DockerHub>/<nome-da-imagem>: sobe uma imagem para o Docker Hub
21 network: comando para manipular redes para os containers
22 inspect <nome>: inspeciona uma rede criada
23 connect <nome-da-rede> <nome-do-container>: conecta um container em uma rede existente
24 logs <nome-do-container>: mostra os logs do container apontado
25 volume create <nome>: cria volumes
26 prune: limpa os volumes
27 exec: executa um comando no container, e.g. docker exec -it nginx bash
28-i: CLI roda no modo interativo para que seja possível executar comandos, trava a execução no terminal e conecta o terminal da máquina com o contêiner
29-t: TTY, para podermos digitar no terminal
30--rm: remove o container assim que ele é finalizado
31-p: redirecionamento de porta; ao acessar a porta 8080 do host (local), a porta 80 do container é acessada
32-d: faz o detach e executa o container no background
33attach: oposto ao detach
34--name <nome>: dá um nome próprio à imagem ao invés de gerar um nome aleatório
35--network <nome-da-rede>: define uma rede para o container com resolução de endereço e ping <nome-da-imagem> para outra imagem funciona
36-v <diretório-local:<diretório-do-container> ou --mount type=bind,source=<diretório-local>,target=<diretório-do-container>: cria um volume na qual arquivos podem ser salvos para não serem perdidos após o container ser finalizado. O -v cria a pasta caso ela não exista, o mount dá um erro. e.g. --mount type=bind, source="$pwd"/pasta ou --mount type=volume, source=<nome-do-volume>,target=<diretório-do-container> para volumes já criados
37ubuntu: imagem a ser executada (com :latest como padrão, ubuntu:latest)
38bash: comando a ser executado dentro da imagem quando ela é executada
Dockerfile
1FROM nginx:latest # FROM <nome-da-imagem>:<tag-da-imagem>: define imagem de base para ser alterada
2
3LABEL maintainer = "nick-da-pessoa-que-mantem-o-projeto <email@email.com>"
4
5ENV VARIAVEL_AMBIENTE 1.0.0 # ENV: define variável de ambiente dentro do container
6
7USER user # USER: define usuário já existente ao invés do root
8
9WORKDIR /the/workdir/path # WORKDIR: pasta aonde os comandos serão executados
10
11RUN apt-get update &&
12 \ apt-get install vim -y # RUN: executa comandos na construção da imagem
13
14COPY pasta /usr/share/nginx # COPY <diretório-local> <diretório-do-container>
15
16ENTRYPOINT ["echo", "Hello "] # ENTRYPOINT: comando fixo que não pode ser alterado pela CLI ou algum parâmetro
17
18EXPOSE 80 # EXPOSE: expõe as portas do container (mas não faz bind com as portas locais)
19
20CMD ["World"] # CMD: parâmetro do ENTRYPOINT, pode receber parâmetros da CLI e.g. docker run imagem Mundo > $ Hello Mundo
Docker Compose
CLI
1docker-compose up
2
3up: comando
4 up: sobe os containeres definidos no docker-compose.yml
5 -d: faz o detach do terminal
6 --build: faz a construção das imagens antes de executá-las
7 down: fecha as imagens dos containers
8 ps: mostra apenas os containers do docker-compose rodando
9 <nome-do-service> up: sobe apenas esse serviço
10 <nome-do-service> down: fecha apenas esse serviço
docker-compose.yml
1version: '3'
2
3services:
4 db: # nome do serviço
5 build: # comandos a serem executados no build da iamgem
6 context: ./mysql # define a pasta de build
7 dockerfile: Dockerfile.prod # define o nome do Dockerfile para construção
8 image: user/mysql:prod # define o nome da imagem
9 entrypoint: dockerize -wait tcp://db:3306 # parâmetro não opcional
10 command: --innodb-use-native-aio=0 # executa um comando no momento de inicialização como parâmetro opcional
11 container_name: mysql # nome do container
12 restart: always # caso dê algum problema grave reinicia o container
13 tty: true # habilita uso do terminal
14 networks: # define as redes utilizadas pelo container
15 - networkname
16 volumes: # define um volume para armazenar os dados do container
17 - ./mysql:/var/lib/mysql
18 environment: # define variáveis de ambiente para o container
19 - VARIAVEL_AMBIENTE=bla
20 ports: # faz o bind de portas entre local e do container
21 - "8000:8000"
22 depends_on: # espera os containeres abaixo subirem para então subir esse container
23 - app
24
25networks:
26 networkname
27 driver: bridge
Redes
bridge
: tipo de rede padrão em que uma nova conexão é criada para servir de ponte entre containershost
: a conexão do container é mesclada com a conexão local e o container pode acessar a rede da máquina;curl [http://host.docker.internal:8000](http://host.docker.internal:8000)
- acessa porta da rede da máquinaoverlay
: cria uma rede para que containers em máquinas diferentes se comunicam (geralmente usado com Docker Swarm)