Nota: O seguinte artigo irá ajudá-lo com: 15 comandos do Docker para gerenciar contêineres [List, Stop, Start, Remove and More]
O Docker é uma ferramenta popular para criar e executar aplicativos em contêiner. Ele está disponível para várias plataformas e é usado como uma das tecnologias de contêiner de back-end no Kubernetes.
No Docker, você cria suas próprias imagens para executar seu aplicativo como um contêiner ou pode extrair e usar milhares de imagens públicas do repositório do Docker e usá-las em seu projeto. Quando sua imagem estiver pronta, você poderá iniciar seus contêineres usando essas imagens. Um contêiner é uma instância em execução de uma imagem do Docker.
O gerenciamento de contêineres do Docker é um dos aspectos mais importantes a serem observados como administrador de sistema que gerencia hosts/contêineres do Docker.
Neste artigo, vamos nos concentrar no gerenciamento de contêineres usando o comando docker.
comando de execução
O comando docker run é usado para executar um contêiner a partir de uma imagem especificando o ID da imagem ou o nome do repositório e/ou da tag.
$ docker run {image}
Exemplo:
$ docker run nginx
O comando acima executa uma instância do aplicativo nginx em um host do docker, se ele já existir. Se não existir no host do Docker, ele vai para o hub do docker (por padrão) e puxa a imagem para baixo. Mas isso é feito apenas pela primeira vez. Para vezes subsequentes, a mesma imagem é reutilizada.
Se você deseja executar uma versão específica de uma imagem, especifique sua versão separada por dois pontos. Isso é conhecido como Tag. Caso você não especifique nenhuma tag, o docker a considerará por padrão como a mais recente.
Além disso, se você quiser executar o contêiner em segundo plano em um modo desanexado para voltar ao prompt após o Docker iniciar o contêiner, use o sinalizador -d.
Exemplo:
$ docker run nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 33847f680f63: Pull complete dbb907d5159d: Pull complete 8a268f30c42a: Pull complete b10cf527a02d: Pull complete c90b090c213b: Pull complete 1f41b2f2bf94: Pull complete Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90 Status: Downloaded newer image for nginx:latest /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/15 12:13:23 [notice] 1#1: using the "epoll" event method 2021/08/15 12:13:23 [notice] 1#1: nginx/1.21.1 2021/08/15 12:13:23 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/08/15 12:13:23 [notice] 1#1: OS: Linux 5.8.0-1039-azure 2021/08/15 12:13:23 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/08/15 12:13:23 [notice] 1#1: start worker processes 2021/08/15 12:13:23 [notice] 1#1: start worker process 33 2021/08/15 12:13:23 [notice] 1#1: start worker process 34
Comando ps
O comando docker ps lista todos os contêineres em execução e algumas informações básicas sobre eles. Como ID do contêiner, nome da imagem, horário de criação do contêiner, status atual e nome do contêiner. Cada contêiner recebe um nome aleatório (se não for especificado explicitamente) e ID.
Exemplo:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 80/tcp jolly_elion
Para listar todos os contêineres em execução e não em execução/saída de uma só vez, você pode usar:
$ docker ps -a
Exemplo:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fcec129f0eb4 nginx "/docker-entrypoint.…" 46 hours ago Exited (0) 46 hours ago interesting_ishizaka 6e8b1e441aa6 hello-world "/hello" 2 days ago Exited (0) 2 days ago keen_shirley
Comando ls
Assim como o comando ps, ls também pode ser usado para listar contêineres. -um sinalizador pode ser usado para listar todos os contêineres (não apenas os em execução).
$ docker container ls
Exemplo:
$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15796e91c30b redis "docker-entrypoint.s…" 2 seconds ago Up 1 second 6379/tcp flamboyant_neumann 904390b65d45 nginx "/docker-entrypoint.…" 14 minutes ago Up 14 minutes 80/tcp nginx_new $
comando de parada
O comando docker stop é usado para interromper um contêiner em execução. Aqui precisamos colocar o nome ou ID do contêiner junto com isso.
$ docker stop {container-id}
Em caso de sucesso, ele retornaria o nome ou ID do docker.
Exemplo:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 50 seconds ago Up 49 seconds 80/tcp jolly_elion
Isso retornará o ID DO CONTAINER que você pode usar para parar o contêiner.
$ docker stop 133f5 133f5
Para este exemplo e os próximos, observe que você não precisa especificar um valor completo de CONTAINER ID. Ele aceitará até a parte, o que o torna único entre outros contêineres em execução, pois o Docker sabe qual contêiner parar.
Comando rm
O comando docker rm remove um contêiner parado ou encerrado.
$ docker rm {CONTAINER NAME or ID}
Exemplo:
$ docker rm 133f5 133f5 $
Comando exec
Podemos usar o comando exec para entrar em um contêiner em execução. Isso é útil para depurar contêineres em execução ou fazer algumas coisas dentro de um contêiner.
$ docker exec –it {container} {command}
Exemplo:
Suponha que você queira iniciar o shell bash (supondo que a imagem tenha o Bash disponível, você também pode usar outros shells disponíveis) dentro de um contêiner chamado unruffled_meninsky no modo interativo, use:
$ docker exec –it unruffled_meninsky /bin/bash
Isso deve colocá-lo dentro do contêiner em um shell bash. Aqui o sinalizador -i representa o modo interativo e -t o terminal. Se você deseja apenas executar um ou mais comandos e sair do contêiner, você pode usar:
$ docker exec unruffled_meninsky cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 cd2eed4acf34
Comando logs
Caso um container seja lançado no modo desanexado e queiramos ver seus logs, podemos usar o comando logs para revisar seus logs:
$ docker logs {CONTAINER NAME or ID}
Exemplo:
$ docker logs 7da6dcebaf9c /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/15 12:14:09 [notice] 1#1: using the "epoll" event method 2021/08/15 12:14:09 [notice] 1#1: nginx/1.21.1 2021/08/15 12:14:09 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/08/15 12:14:09 [notice] 1#1: OS: Linux 5.8.0-1039-azure 2021/08/15 12:14:09 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/08/15 12:14:09 [notice] 1#1: start worker processes 2021/08/15 12:14:09 [notice] 1#1: start worker process 31 2021/08/15 12:14:09 [notice] 1#1: start worker process 32 $
Comando cp
Para copiar arquivos entre um contêiner e um sistema de arquivos localhost, você pode usar o comando cp.
$ docker container cp {CONTAINER NAME or ID:SRC_PATH} {DEST_PATH}|-
Exemplo:
$ docker container cp quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp
Comando de exportação
O comando Docker container oferece uma opção para exportar o sistema de arquivos de um container como um arquivo TAR.
$ docker container export {CONTAINER NAME or ID}
comando inspecionar
Podemos verificar informações detalhadas sobre um contêiner usando o comando inspecionar como:
$ docker inspect {CONTAINER NAME or ID}
OU
$ docker container inspecionar {CONTAINER NAME or ID}
Comando matar
Um contêiner em execução pode ser eliminado usando o comando kill com um sinalizador opcional –signal ou -s. Vários contêineres podem ser especificados para matá-los de uma só vez.
$ docker kill {CONTAINER NAME or ID} [--signal VAL]
Exemplo:
$ docker kill cd9005a0b5d2 -s 9 cd9005a0b5d2 $
Comando de estatísticas
Para exibir uma transmissão ao vivo do uso de recursos de um contêiner, você pode usar o comando stats:
$ docker container stats {CONTAINER NAME or ID}
Exemplo:
$ docker container stats thirsty_volhard CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 904390b65d45 thirsty_volhard 0.00% 3.406MiB / 7.775GiB 0.04% 1.02kB / 0B 0B / 8.19kB 3
comando superior
Como o comando top no Linux, podemos usá-lo com o Docker para obter uma lista de processos em execução.
$ docker container top {CONTAINER NAME or ID}
Exemplo:
$ docker container top thirsty_volhard UID PID PPID C STIME TTY TIME CMD root 2603 2582 0 12:34 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 2659 2603 0 12:34 ? 00:00:00 nginx: worker process systemd+ 2660 2603 0 12:34 ? 00:00:00 nginx: worker process $
Renomear Comando
Para renomear um contêiner existente, use o comando rename.
$ docker container rename {OLD CONTAINER NAME} {NEW CONTAINER NAME}
Exemplo:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 904390b65d45 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp nginx_container $ docker container rename nginx_container nginx_new $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 904390b65d45 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp nginx_new $
Comando diff
Podemos inspecionar alterações em arquivos ou diretórios no sistema de arquivos de um contêiner com o comando diff.
$ docker container diff {CONTAINER NAME or ID}
Exemplo:
$ docker container diff nginx_new C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/uwsgi_temp A /var/cache/nginx/client_temp A /var/cache/nginx/fastcgi_temp A /var/cache/nginx/proxy_temp A /var/cache/nginx/scgi_temp C /etc C /etc/nginx C /etc/nginx/conf.d C /etc/nginx/conf.d/default.conf C /run A /run/nginx.pid $
Resumo
Para concluir, o Doker oferece um extenso conjunto de comandos para gerenciar contêineres desde sua criação até a destruição. Cobrimos alguns dos comandos importantes e seu uso neste artigo, que deve fornecer uma boa ideia sobre o gerenciamento de contêineres do Docker.
Em seguida, conheça alguns dos recursos para aprender DevOps.