Cheatsheet de Docker e Docker Compose

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 containers
  • host: 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áquina
  • overlay: cria uma rede para que containers em máquinas diferentes se comunicam (geralmente usado com Docker Swarm)
comments powered by Disqus