Docker: Manipulação de Containers

Vamos abordar o tema relacionado a manipulação de container no Docker. Além disso, utilizaremos exemplos práticos de manipulação de containers usando o Docker.  

English version: click HERE

Aqui, vamos verificar as imagens que temos e vamos rodar containers em background. 

 Além disso, verificar o consumo de recursos em um container Docker. Dessa forma, podemos verificar a eficiência de um container no consumo de recursos como memória e processamento. 

Vamos também aprender as diferentes formas de executar um container. Nesse caso, vamos executar por exemplo, um Shell em um contêiner e executar um comando em um container.   

Além disso, vamos fazer as execuções dentro do container sem necessariamente estabelecer interatividade. 

Depois vamos demonstrar como salvar as alterações de um container e 

Transforma-lo em uma imagem. Dessa forma, podemos manter o estado de tudo que instalamos e configuramos dentro de um container.

Consequentemente, isso permite que possamos replicar o container com as configurações que desejamos. 

Uma vez criada a imagem de um container, podemos passar essa imagem para outras pessoas.

Consequentemente, podemos usar como exemplo um programador que criou todo um ambiente dentro do container e que agora pode salvar a imagem do container e disponibilizá-la para seus colegas. 

Verificar as imagens Docker 

Inicialmente, vamos verificar as imagens que já temos. Dessa forma, para verificar as imagens a gente 

utiliza o comando abaixo: 

sudo docker images 

Show docker images
sudo docker images

Observamos aqui aquelas imagens que usamos no post: Aula 01. Então, com esse comando, podemos observar as imagens que temos no momento. 

Outra coisa interessante, que podemos ver é que a imagem Alpine está ocupando 5.6 MB.

Dessa forma, podemos verificar como o uso de container otimiza a utilização de recursos. 

Esse talvez seja um dos motivos que me deixa cada vez mais maravilhada em trabalhar com containers. 

Executar um container em background 

Essa forma de execução de container é interessante quando queremos usar um container sem realizar uma interatividade direta com o container.  

Para isso, vamos utilizar o comando abaixo: 

sudo docker run –td --name meu_teste alpine 

-t” Indica que vamos alocar um pseudo TTY 

-d” Indica que vamos executar o container Docker em background. 

–name” Indica que vamos passar um nome para nosso container. Nesse caso, o nome de nosso container Docker será “meu_teste”. 

alpine” Indica a imagem que usaremos no nosso container. 

Running Docker container in background
Running Docker container in background

Verificar consumo de recursos de container Docker 

Anteriormente, havíamos criado um container e podemos perceber que não entramos no modo interativo. Isso porque estamos executando o container em background. 

No entanto, poderíamos ficar com a dúvida se o container Docker está realmente funcionando. Assim, para sanar essa dúvida, podemos usar o comando abaixo: 

sudo docker ps 

Então, podemos observar que o container aparece na tela após o comando acima.  

Agora vamos supor que desejamos verificar como está o consumo de recursos de um ou mais containers Docker. Para isso, vamos usar o comando abaixo: 

sudo docker stats 
Show the use of containers resourses
docker stats show containers resources

Utilizando o comando acima podemos observar que temos uma tabela que separa cada container por seu ID e nome. Além disso, o comando nos mostra o quanto os containers estão usando de memória, CPU e largura de banda.  

Então, essa informação dada pelo comando acima nos proporciona uma visão interessante sobre os recursos disponíveis e o quanto ainda podemos usar.

Além disso, o Docker permite que limitemos a quantidade de processamento e memória.  

Dessa forma, podemos limitar a quantidade de recursos que cada container vai utilizar.

Assim, a limitação de recursos de um container pode ser útil quando temos containers sendo executados em paralelo e não desejamos que um container use recursos que seriam destinados aos outros containers.  

Futuramente vamos falar mais sobre essa limitação de recursos em containers. 

Execução em um container Docker 

Vamos apresentar como executar um Shell em um container e como executar comandos diretamente dentro do container. 

Executar Shell em container Docker 

Agora, vamos executar um Shell em um container que já havíamos criado.

Para isso vamos executar um comando que nos permite acessar o container que está sendo executado em background e executar um Shell nesse container. 

Para isso, vamos usar o comando abaixo. 

sudo docker exec -it meu_teste sh 

exec” Indica que faremos a execução de um container. 

 “-t” Indica que vamos alocar um pseudo TTY. 

-i” Indica que vamos usar interatividade com o container. 

meu_teste” Esse é o nome que demos ao container. 

sh” Indica que vamos usar o shell. 

How to run shell in a docker container
Running shell in docker container

Agora, estamos dentro do shell do container e podemos verificar o conteúdo do container usando o comando ls

ls 

Tem um ponto interessante sobre containers em background que é a pergunta abaixo. 

Como finalizar um container Docker em background? 

 Muitos acreditam que se executarem o comando exit no terminal irão finalizar o container.

No entanto, essa resposta não é verdadeira. Isso porque o comando exit apenas nos tira do terminal do container e o container continua sendo executado em background. 

Vamos fazer um teste executando o comando exit no terminal do container.  

exit 

No entanto, se executarmos o comando abaixo, vamos verificar que o container ainda continua sendo executado. 

sudo docker stats 

Portanto, para finalizar um container em background, precisamos sair do terminal usando o comando exit. E em seguida, executar o comando abaixo.  

sudo docker stop meu_containter 

stop” Indica que vamos finalizar o container. 

meu_containter” Indica o nome do nosso container. 

Vale ressaltar que o comando “sudo docker stop” também pode ser usando juntamente com o ID do container ao invés do nome do container. 

E assim, finalizamos o container. 

E se desejarmos reiniciar esse mesmo container? 

Podemos usar o comando sudo docker start e o nome do container ou ID. Como no comando abaixo. 

sudo docker start meu_container 

Executar um comando em um container Docker

Outra questão interessante é que as vezes não queremos acessar o container para executar comandos.

Nesse caso, podemos executar o comando diretamente no container sem a necessidade de acessar o container. 

Para isso, podemos usar como exemplo a necessidade de executar o comando netstat dentro de um container sem a necessidade de acessar o terminal desse container.  

O comando abaixo demonstra como executar um comando dentro de um container. Nesse caso, estamos executando o comando netstat dentro do container “meu_teste”

sudo docker exec -it meu_teste netstat -rn 

exec” Indica que faremos a execução de um container. 

 “-t” Indica que vamos alocar um pseudo TTY. 

-i” Indica que vamos usar interatividade com o container. 

meu_teste” Esse é o nome que demos ao container. 

netstat -rn” Indica que vamos usar o comando “netstat -rn”. Usamos esse comando quando desejamos verificar a tabela de rotas de um host. 

Run a command inside a docker container
Run a command inside a docker container

Utilizando o comando acima, podemos verificar a tabela de rotas do container. Essa tabela de rotas foi apresentada devido a utilização do comando “netstat -rn”. 

Salvar alterações em um container Docker 

 O Docker tem uma função muito importante que permite salvar as alterações, como instalação de programas e configurações, que forma feitas em um container.

Dessa forma, podemos gerar uma imagem do container Docker e garantir que nossas instalações e alterações estejam na imagem Docker. 

Portanto, vamos criar nossa imagem Docker. Nesse caso, vamos usar uma imagem Alpine e vamos fazer alterações no container. 

Agora, vamos a acessar o container e vamos criar um diretório dentro de “/home”. Assim, vamos criar um diretório e vamos mostrar que esse diretório foi criado.

Esse exemplo serve apenas para podermos perceber que as alterações feitas no container vão ser salvas na nova imagem que vamos criar. 

Assim, qualquer container que seja executado usando nossa imagem, vai conter o diretório que criamos. 

 Então vamos inicialmente executar o shell dentro do container com o comando que descrevemos anteriormente. 

sudo docker exec -it meu_teste sh 

 Depois disso, vamos acessar o diretório “/home”. Para isso vamos usar o comando cd descrito abaixo. 

cd home 

Em seguida, vamos criar o nosso diretório. Para isso, vamos usar o comando mkdir. Nesse caso vamos chamar o diretório de “meu_diretório”. 

mkdir meu_diretorio 

Agora, podemos verificar se o diretório que criamos está dentro do container. Para isso, podemos usar o comando ls

ls 

Finalmente, vamos sair do terminal do container usando o comando exit

exit 

Vale lembrar que o comando exit não finaliza o container que foi executado em background. 

 Agora, vamos executar o comando abaixo para salvar o container em uma imagem.  

sudo docker commit meu_teste imagem1 

commit” É o comando que faz a criação da imagem Docker.  

meu_teste” Esse é o nome que demos ao container.  

imagem1” Esse será o nome de nossa imagem do container Docker. 

Running docker commit to create a new docker image
Running docker commit

Podemos verificar que agora temos uma nova imagem. Para isso vamos usar o comando abaixo. 

sudo docker images 
The command docker images shows our new docker image
The command docker images shows our new docker image

Com o comando acima, podemos verificar que nossa recém criada imagem já está disponível. 

Executando um container com a nossa imagem Docker 

Agora vamos executar um novo container que vai usar a imagem que criamos anteriormente.

Dessa forma, poderemos verificar se as alterações que foram criadas na imagem estão dentro do novo container. 

sudo docker run -it --name novo_container imagem1 
Creating a container with our newly created image
Creating a container with our newly created image

Agora, estamos com acesso shell ao novo container e consequentemente podemos verificar se as alterações estão dentro do container.

Para isso, vamos acessar o diretório home com o comando abaixo. 

cd home 

Em seguida, vamos executar o comando ls para listar os diretórios e arquivos. 

ls 
Showing that the new container has the changes we created in the docker image
Showing that the new container has the changes we created in the docker image

Finalmente, podemos ver que o diretório que criamos anteriormente está no novo container.

Dessa forma, pudemos comprovar que criamos uma imagem nova a partir de um container modificado por nós. 

Nesse post, apresentamos um exemplo e isso pode ser replicado para diferentes experimentos com containers Docker.

Portanto, sugerimos que comece a praticar container Docker hoje mesmo.  

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer