O Docker possui diversos comandos para criar e administrar containers. Nesse post aprenderemos sobre alguns comandos/scripts que serão utilizados no dia a dia.
O primeiro que eu apresento é o script ps, que vai listar os containers em execução, similar ao comando ps no linux, utilizado para ver os processos em andamento. Ele também nos permite ver que o docker está rodando.
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
O script images nos permite listar as imagens de containers existentes no nosso host. Que similar ao anterior não trás nenhum resultado, pois não temos nenhum container em execução e existente no nosso host.
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
Vamos criar um container do CentOS, na versão 8 e iniciar o processo “/bin/bash”
# docker run -i -t centos:8 /bin/bash Unable to find image 'centos:8' locally 8: Pulling from library/centos 7a0437f04f83: Pull complete Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:8 [root@15ce33905536 /]#
O que percebemos é que o docker não encontrou uma imagem localmente, então é baixada a imagem mais recente do repositório de imagens, e em seguida já estamos acessando o container do centos através do “/bin/bash”
[root@15ce33905536 /]#
Isso mesmo! Ao executar o container, já estamos logados nele e essa sequência de caracteres identificando o container, é o seu ID.
Vamos confirmar através do comando cat no arquivo “/etc/redhat-release” ou “/etc/issue” para outras distribuições
[root@15ce33905536 /]# cat /etc/redhat-release CentOS Linux release 8.3.2011
Agora confirmamos! Estamos executando um container do CentOS na versão 8.3. Lembro a vocês que o host que está rodando o docker é um debian 10.
Outra forma é executar o comando ps -ef e veremos que somente está executando dois processos, o próprio ps -ef e o /bin/bash.
[root@15ce33905536 /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:46 pts/0 00:00:00 /bin/bash root 18 1 0 20:00 pts/0 00:00:00 ps -ef
Agora vamos sair do nosso container, mantendo em execução e retornar para o nosso host utilizando as teclas Ctrl + P + Q.
E vamos executar novamente o script ps do docker e acompanhar o resultado.
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15ce33905536 centos:8 "/bin/bash" 26 minutes ago Up 26 minutes zealous_hoover
Podemos utilizar o ID do nosso container para retornar para ele através do comando docker attach
# docker attach 15ce33905536 [root@15ce33905536 /]#
Agora vamos sair do nosso container e desligá-lo utilizando as teclas Ctrl + D.
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Lembro que a imagem do CentOS continua disponível em nosso host.
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 8 300e315adb2f 7 months ago 209MB
Vamos avançar um pouco agora e criar um container com um servidor web, buscando trazer algo mais próximo da realidade.
Vamos executar um novo container
# docker run -i -t -p 8080:80 ubuntu:15.04 /bin/bash
Desta vez, estamos realizando um mapeamento de portas com o parâmetro -p 8080:80. Dessa forma a porta 80 do container com o CentOS 8 estará mapeada para a porta 8080 do nosso host com o Debian 10.
Vamos agora instalar o servidor apache
[root@10c39efb515a /]# dnf install httpd
Vamos iniciar o serviço através do comando abaixo
[root@10c39efb515a /]# httpd -kstart
Vamos executar novamente o comando ps -ef para listarmos os processos em execução no nosso container
[root@10c39efb515a /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 20:51 pts/0 00:00:00 /bin/bash root 375 1 0 20:58 ? 00:00:00 httpd -kstart apache 376 375 0 20:58 ? 00:00:00 httpd -kstart apache 377 375 0 20:58 ? 00:00:00 httpd -kstart apache 378 375 0 20:58 ? 00:00:00 httpd -kstart apache 379 375 0 20:58 ? 00:00:00 httpd -kstart root 593 1 0 21:00 pts/0 00:00:00 ps -ef
O serviço está em execução. Caso você esteja utilizando o navegador do próprio host do docker, basta acessar “http://localhost:8080” e você terá a tela abaixo confirmando que o apache está rodando.
Ao contrário do uso das teclas Ctrl + D, para sair do seu container sem perder nada, mantendo todas configurações e serviços nele, precisamos usar as teclas Ctrl + P + Q.
Agora podemos utilizar essas configurações para próximos containers que desejarmos criar, basta realizar um docker commit.
Deverá ser utilizada a ID do container ainda em execução em seguida do nome que você fornecerá para a instalação e imagem.
Para verificar a ID do container, vamos utilizar novamente o docker ps
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 10c39efb515a centos:8 "/bin/bash" 22 minutes ago Up 22 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp modest_lehmann
E agora vamos criar a nova imagem
# docker commit 10c39efb515a web01/centos-httpd:1.0 sha256:bf646aa23dbca248a441768dc565b8a3a275ed2f7f436b3b20da5f53535b1590
Para organizar melhor as versões, utilizei 1.0 ao final do nome da imagem, vamos listar novamente as imagens do nosso host para acompanhar:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE web01/centos-httpd 1.0 bf646aa23dbc 1 minutes ago 523MB centos 8 300e315adb2f 7 months ago 209MB
Caso eu queira parar o container sem precisar estar conectado nele, basta utilizar o script stop. Vamos precisar listar os containers em execução com o ps e em seguida executar o stop com o seu ID.
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 10c39efb515a centos:8 "/bin/bash" 58 minutes ago Up 58 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp modest_lehmann
# docker stop 10c39efb515a 10c39efb515a
Pronto! Nosso container 10c39efb515a foi parado com sucesso.
Lembro que para salvar qualquer alteração realizada no container, é necessário executar docker commit
Para verificarmos as alterações no container desde sua criação, utilizamos o diff
# docker diff 10c39efb515a ... A /usr/sbin/grub2-reboot C /usr/sbin/arpd C /usr/sbin/blkzone C /usr/sbin/ctrlaltdel A /usr/sbin/grub2-get-kernel-settings C /usr/sbin/agetty C /usr/sbin/routel C /usr/sbin/tracepath C /usr/sbin/dmfilemapd C /usr/sbin/cfdisk C /usr/sbin/dhclient-script C /usr/sbin/faillock C /usr/sbin/kexec C /usr/sbin/mkswap C /usr/sbin/udevadm C /usr/sbin/blockdev C /usr/sbin/useradd C /root A /root/.bash_history
O resultado foi cortado por ser muito extenso, mas todo diff do conteúdo alterado será exibido na tela.
Site oficial Docker: https://www.docker.com/
Endereço dos repositórios com as imagens: https://hub.docker.com
Deixe um comentário