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

Dúvidas, comentários, sugestões?

comments