Docker

Docker: COMANDOS básicos com EXEMPLOS que vão te AJUDAR no dia a dia

DevOps from Zero!💻
6 min readOct 16, 2019

--

Opa pessoal, iniciando mais um artigo hoje com foco em Docker. O objetivo é mostrar de forma básica e rápida o uso de alguns comandos do Docker que são essenciais na administração de containers e por cima, exemplificar a utilização. Sem mais delongas… 😃

Bora

Containers
-> Todo container é criado a partir de uma imagem.
-> Containers são identificados pelo ID ou NOME.
-> O comando “docker ps” mostra os containers em execução, ativos.
-> O comando “docker ps -a” mostra todos os containers, parados, em execução.

Imagens
-> É a base do container, é através dela que criamos um container.
-> Quando usamos o comando docker run, ele busca por uma imagem do container, caso não tenha localmente, ele executa um pull lá do DockerHub
-> É possível usar imagens prontas, alterá-las e criar novas a partir do zero.
-> Para verificar as imagens disponíveis locais usamos o comando docker images:

docker images
  • Criando um container:
Containers
  • Para executar um container utilize o comando docker run com o “nome da imagem”. Vamos usar a imagem do “centos”.
# docker run centos
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest

Veja algumas das opções mais usadas para containers:
-> -i = inicia interação com o container.
-> -t = inicia com o terminal de comando.
-> exit = sair do container.
-> -d = inicia o container em segundo plano.
-> -rm = remover container após término.

  • Removendo um container e adquirindo interação após o término. Eu vou ter acesso ao shell e poderei executar comando dentro desse container:
# docker run --rm -ti  ubuntu:16.04
  • Acessando um container e rotulando ele com a opção -name, e em background usando a opção “-d”
# docker run --name testemedium -tid ubuntu:18.04
  • Agora vamos executar um container para que ele mostre na saída o comando ps aux. Esse comando lista os processos do próprio container e fecha:
# docker run ubuntu:17.10 ps aux
Unable to find image 'ubuntu:17.10' locally
17.10: Pulling from library/ubuntu
4ccdce43d1e0: Already exists
c95f13c88d92: Already exists
82656eee95ad: Already exists
78ff727be57a: Already exists
448bb314afa5: Already exists
Digest: sha256:3b811ac794645dfaa47408f4333ac6e433858ff16908965c68f63d5d315acf94
Status: Downloaded newer image for ubuntu:17.10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 30520 1652 ? Rs 14:15 0:00 ps aux
  • Outro modelo, mas agora com uma saída maior do comando, onde o container será nomeado, executado em background, usando a imagem “busybox”, após a imagem será executado o comando ping com 15 interações:
# docker run --name ping -d busybox ping 127.0.0.1 -c 15

Vamos destacar alguns pontos importantes:
Dockerfile = arquivo de produção da imagem.
Imagem = imagem de um container.
Registry = pode ser considerado o Docker Hub, repositório público online das imagens.
Container = elemento fundamental para esse processo.

Parando e removendo containers.

  • Para que seja possível remover um container temos que parar ele, vamos aos exemplos:
# docker stop 419b4f6a34e8

Agora executando o comando docker ps vemos que ele não aparece como ativo:

Então vamos remover:

# docker rm 419b4f6a34e8
419b4f6a34e8
  • Removendo todos os containers que estão inativos:
# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
7d75b0ed36d5015070b745194722020ce62f097255260320561bebd569f4a10f
33c9bed76c2114dcffb4a8f55e7c9a910ee9530fd3fc25d677f216f8c6f23139
50a74a9a19fc784aac3cc5a888b614b5a267fdda1486a6a3b2e4d51f199d87c0
be55837ab14faadd0d7151eec713d9abbd9dbe57688043a34d01bd227eb33414
31e828a5bcb8fdb7cc2d48ed162a0ac7b6326ed9dfdb73cc9edcf634e0df2daa
aa75fcc715fc5462a40ff703516da1a7e9afc7327bf6da8ab03b419e11fc003b
c35db081a3e76cf0ed5635f482573ae9420246185494ef703575a3f35fc7eea0
bd54f7fd3dcea4f96daddbb086c1ffb7cffc3b6e8fe95ea62e1d2d5fd7228a3d
c4340a98c2418929074d3ee924929f606e5f0d726ac66022291830fee5b3b31a
2960e9caae7b33bc076314909973b5717e6f954ca97b8018fc2b068c51ac77d4
5df3d83d2d6a0b6a36da6a02eb2feba66921f443d6b13eb50b3996d60880e264
185f0decc130c666e0246869d5271a40570f6d49e75578df0e3f8fe19400b0cc
  • Agora um exemplo muito útil que é o comando docker logs

Primeiramente, vamos criar um container para nosso teste, em modo background usando o comando ping com 15 interações:

# docker run --name logs -d busybox ping 127.0.0.1 -c 15

Agora vamos usar o comando abaixo para analisar a saída:

# docker logs logs
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.051 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.080 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.084 ms
64 bytes from 127.0.0.1: seq=3 ttl=64 time=0.106 ms
64 bytes from 127.0.0.1: seq=4 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: seq=5 ttl=64 time=0.073 ms
64 bytes from 127.0.0.1: seq=6 ttl=64 time=0.079 ms
64 bytes from 127.0.0.1: seq=7 ttl=64 time=0.075 ms
64 bytes from 127.0.0.1: seq=8 ttl=64 time=0.079 ms
64 bytes from 127.0.0.1: seq=9 ttl=64 time=0.064 ms
64 bytes from 127.0.0.1: seq=10 ttl=64 time=0.058 ms
64 bytes from 127.0.0.1: seq=11 ttl=64 time=0.067 ms
64 bytes from 127.0.0.1: seq=12 ttl=64 time=0.059 ms
64 bytes from 127.0.0.1: seq=13 ttl=64 time=0.090 ms
64 bytes from 127.0.0.1: seq=14 ttl=64 time=0.070 ms
--- 127.0.0.1 ping statistics ---
15 packets transmitted, 15 packets received, 0% packet loss
round-trip min/avg/max = 0.041/0.071/0.106 ms

Pode ver que ele já se encontra encerrado:

Agora vamos verificar um comando bem útil que é o docker info

Esse comando mostra informações da arquitetura Docker, informações de containers que foram criados, que estão em execução, pausados.

# docker info
Client:
Debug Mode: false
Server:
Containers: 5
Running: 0
Paused: 0
Stopped: 5
Images: 5
Server Version: 19.03.3
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683

— Interação com containers

Vamos usar um comando que é bem utilizado para interação que é o docker attach. Esse comando trás o acesso ao terminal do container. Primeiro vou executar docker ps:

Agora o comando com o nome:

# docker attach nervous_lovelace

No momento que eu executar “exit” nesse container ele para de funcionar, fica com estado inativo, caso eu queria sair desse container, pará-lo, eu devo usar o comando “Ctrl+p+q”.

Existe uma forma de você executar comandos dentro de um container de forma mais fácil, usamos nesse caso o docker exec. Não é necessário entrar no shell do container, veja o exemplo abaixo:

# docker exec nervous_lovelace ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18220 3220 pts/0 Ss+ 10:38 0:00 /bin/bash
root 11 0.0 0.0 34660 2736 ? Rs 10:45 0:00 ps axu
  • Agora vou demonstrar outro exemplo, veja como fica: Eu vou executar um container em modo background e criar um arquivo no /tmp
# docker exec -d nervous_lovelace touch /tmp/teste123

Percebe-se que ele não deu interação, mas o container foi executado, onde eu criei um arquivo dentro do /tmp

# docker exec nervous_lovelace ls /tmp
teste123

Outra forma de acessar o container usando o docker exec é utilizando o bash:

# docker exec -ti nervous_lovelace bash
  • Já para copiar um determinado arquivo do container para o host local é utilizando o docker cp.
docker cp nervous_lovelace:/tmp/teste123 .

Nos próximos artigos irei abordar melhor a parte de dockerfile e falar um pouco sobre swarm. Espero que os comandos iniciais aqui passados tenham agregado muito ao seu aprendizado de Docker.

  • Troca de conhecimento

Gostou? Comenta aqui no Medium.

Acha que dá para melhorar com mais comandos legais? Fique a vontade para sugerir melhorias. #VAIIII

--

--

DevOps from Zero!💻

SRE/DevOps Engineer| Lifelong learner | Medium Creator | AWS/Azure certified☁️ | Hashicorp Ambassador | Containers | Tech | Community | Coffee