Skip to content

Instantly share code, notes, and snippets.

@flaviochess
Last active April 24, 2024 18:04
Show Gist options
  • Save flaviochess/90383c9d18fd805bf8862252c72609c2 to your computer and use it in GitHub Desktop.
Save flaviochess/90383c9d18fd805bf8862252c72609c2 to your computer and use it in GitHub Desktop.
Comandos do Docker

Docker - Comandos

Comandos básicos de containers

# Exibe todos os containers que estão em execução no host
$ docker ps

A saída deste comando trás uma tabela com 7 colunas sendo:

  • CONTAINER ID: id do container
  • IMAGE: imagem do container
  • COMMAND: comando em execução pelo container
  • CREATED: data que o container foi criado
  • STATUS: status do container (up, created, exited paused, ...)
  • PORTS: portas que o container se comunica
  • NAMES: nome do container
# Exibe todos os containers que estão em execução, parados ou finalizados
$ docker ps -a
# Cria e executa um container
$ docker run [container_name]
# (o Daemon verifica se a imagem do container já está em seu host, caso não esteja o Docker faz o download dela)

# Exemplo:
$ docker run hello-world

# É possível passar comandos para serem executados dentro do container no momento que ele for instânciado:
$ docker run [container_name] [comandos]

# Exemplo:
$ docker run alpine ls -l
# Executa o container como um processo
$ docker run -d [created_image_name]
# (útil quando construímos uma imagem e vamos executar o container este fica com o processo preso ao terminal,
#  com o -d deixamos o container executando em segundo plano)
# Executa o container em modo interativo
$ docker run -ti [container_name] /bin/sh
# (o parametro t disponibiliza um terminal e o parametro i mantén a entrada aberta)
# (o /bin/sh ao final é o comando que queremos executar no caso o shell para que já entre no container na linha de comando, 
#  pode ser que tenha variações como /bin/bash ou outros, depende da distribuição do linux da imagem do container)

# Exemplo:
ex: docker run -it alpine /bin/sh

# Sai de um container em modo interetivo e o mantém rodando
crtl + p + q
# (quando executamos um container em modo interativo já entrando no shell, este será o comando em execução no container.
#  ao sairmos do container com exit, matamos o shel e por consequencia o container, para que isso não ocorra devemos usar
#  o comando acima)

# Volta para um container executado em modo interativo do qual saimos
$ docker attach [container_id]

# Entrar no modo interativo em um container já existente
$ docker start -a -i [container_id]
# (o -a significa attach e o -i interactive)
# Criar um container sem executar-lo
$ docker create [imagem_name]
# (este container pode ser visto com o comando docker ps -a)
# parar a execução de um container
$ docker stop [id_container]

# Inicia um container parado
$ docker start [id_container]

# Reinicia um container
$ docker restart [id_container]

# Para pausar um container
$ docker pause [id_container]

# Para "despausar" um container
$ docker unpause [id_container]
# apagar um container
$ docker rm [id_container]
# (mesmo os containers que não estão sendo mais executados continuam ocupando espaço no host.
#  Os containers parados ocupando espaço podem ser vistos com docker ps -a)

# força a remoção do container
$ docker rm -f [id_container]
# (existem alguns casos que o docker não permite apagar o container, como quando ele ainda está em execução.
#  com o parametro f (force) não importa o caso, ele será removido)

A estrutura do docker run é:

$ docker run [parametros] [container_name]

Onde temos algumas outras opções de parametros além dos vistos acima como:

  • -P - escolhe uma porta aleatória para o container
  • -p [porta_externa:porta_interna] - mapeia a porta interna X do container para ser acessada de fora pela porta Y do host
  • -e [variavel="valor"] - passa uma variável e seu respectivo valor para ser capturada dentro do container
  • -v [path_host:path_dentro_container] - define um volume a ser utilizado pelo container , fazendo um link de um path interno do container a um path do host. (É possível passar apenas o path do container e deixar com que o Docker escolha um local apropriado no host para colocar o volume)
  • --name [nome] - define um nome para a instância Quando não definimos um nome para a instância o Docker se encarrega de fazer isso com um nome legal aleatório!
  • -w [path_de_inicio] - define em que paht o container deve iniciar, muito últil quando queremos executar algum comando em um diretório específico. O w é de work directory.

Um exemplo usando alguns destes parametros seria:

$ docker run -d -p 80:80 -e value="abc" -v "/users/myuser/documents:/opt/data" --name container-1 search-panel

Comandos básicos de imagens

# Exibe todas as imagens do seu host
$ docker images

A saída deste comando trás uma tabela com 5 colunas sendo:

  • REPOSITORY: nome da imagem
  • TAG: versão da imagem
  • IMAGE ID: id da imagem
  • CREATED: data que a imagem foi criada
  • SIZE: tamanho da imagem
# Exclui uma imagem do seu host
$ docker rmi [image_id]
# Faz o build de uma nova imagem
$ docker build -t [image_name][:tag] [path_dockerfile]
# (o parametro -t serve para especificar o nome da imagem e tag que queremos)
# (para imagens públicas normalmente o nome da imagem possui o nome de usário e o nome da imagem em si: [username]/[app_name])
# (a tag é a versão da imagem, se ocultar essa informação a versão ficará como latest)

# Exemplo:
$ docker build -t flaviochess/myfirstapp .
# Faz o push da imagem para o docker hub, por exemplo
$ docker push [username]/[app_name]

# Exemplo:
docker push flaviochess/myfirstapp
# Baixa uma imagem
$ docker pull [imagem_name][:tag]

# Exemplos:
$ docker pull alpine
$ docker pull ubuntu:12.04
# (Quando não especificada a tag a versão baixada será a lastet)

Estatísticas de containers

# Exibe o consumo de recursos pelo container como CPU, memória, I/O, processos
$ docker stats [container_id]
# Exibe os processos em execução no container
$ docker top [container_id]
# Exibe as últimas mensagens da saída padrão do container
$ docker logs [container_id]
# exibe as portas utilizadas/mapeadas pelo container
$ docker port [container_id]
# exibe muitas informações sobre o container como imagem, capacidade de hardware, cpu, rede e etc
$ docker inspect [container_id]

# uma dica é usar este comando em conjunto com um grep para visualizar apenas o que você quer.
$ docker inspect [container_id] | grep -i [termo_da_busca]
  • Não adianta entrar em um container e rodar algum comando para verificar a memória no lugar do inspect, por exemplo, pois será retornado os valores do host e não do container.

  • Normalmente quando os valores do inspect estão zerados, como Memory ou CpuShares, significa que não existe um limite de consumo para aquele container, podendo este consumir o máximo que conseguir.

# exemplo para verificar a capacidade de memória:
$ docker inspect 421f6c299805 | grep -i memo
# (este comando trará apenas as informações relativas a memória (memory), ou a tudo que começe com memo)

Definindo o "hardware" do container

# define que o container terá 512 megas de memória
$ docker run -d --memory 512M [container_name]
# (no lugar de --memory pode ser usado apenas -m)
# define porção de CPUs que o container terá
$ docker run -d --cpu-shares 512 [container_name]

Diferente da memória onde especificamos o valor exato de hardware que o container irá utilizar, com as CPUs informamos uma proporção com números que definimos na hora. Logo, se subirmos apenas um container com o valor de cpu-shares de 500, isso não limita o container em nada, ele poderá ainda assim utilizar todo o recurso de CPU disponível, pois é como dizer que 500 é a proporção total de CPUs.

Agora se subirmos mais dois container com o valor de 250 de cpu-share, estamos dizendo ao docker que o primeiro container terá o dobro de CPU que cada um dos dois seguintes. Logo o primeiro container teria 50% das CPUs e o segundo e o terceiro 25% cada.

Em outro cenário também de 3 containers podemos dizer que cada container possui 100 de cpu-shares, então é como dizer que cada container possui 33,33% de CPU.

# altera os valores de CPU e/ou memória de um container em execução:
$ docker update --memory 256M --cpu-shares 256 [container_id]
# (na sintaxe acima está passando um parametro para alterar a memória e outro a CPU)
# (se pode tanto aumentar quanto diminuir os valores)

Dica: para validar os comandos acima, utilize o inspect

Apêndice

Glossário

  • Imagens: file system, estrutura para criar containers
  • Containers: instâncias de uma imagem
  • Daemon: serviço que gerencia os containers do inicio ao fim de suas vidas

Dicas

@flaviochess
Copy link
Author

Gist em construção ainda... faltam alguns comandos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment