Manipulando containers Docker
Tags: webdev, beginners, tutorial, docker
Published: 2022-02-15 15:51:22

Neste artigo vou abordar o que eu aprendi sobre Containers Docker, de uma forma pratica.
Para utilização do Docker é necessário conhecer alguns comandos e entender de forma clara e direta para que servem, assim como alguns exemplos de uso.

## Como executar um container

Para iniciar um container é necessário saber a partir de qual imagem será executado. Para listar as imagens que seu Docker host tem localmente, execute o comando abaixo:

**Atenção:** se a imagem não estiver em sua maquina local, o Docker irá baixar automaticamente.

```bash
docker container run <parâmetros> <imagem:tag> <CMD> <argumentos>
#ou
docker run <parâmetros> <imagem> <CMD> <argumentos>
```

Os parâmetros mais utilizados na execução de containers são:

Parâmetro | Explicação
:--------- | :------ |
-d | Execução do container em background
-i | Modo interativo. Mantém o STDIN aberto mesmo sem console anexado
-t | Aloca uma pseudo TTY
--rm | Remove automaticamente o container após finalização, pode ser chamado de modo **cleanup** (Não funciona com -d)
--name | Nomear o container
-v | Mapeamento de volume
-p | Mapeamento de porta
-m | Limitar o uso de memória RAM
-c | Balancear o uso de CPU

Segue um exemplo simples do seguinte comando:

```Bash
docker run -it --rm --name meu_python python bash
```

De acordo com o comando acima, será iniciado um container com o nome meu_python, criado a partir da imagem python e o processo executado nesse container será o bash.

Vale lembrar que, caso o CMD não seja especificado no comando docker container run, é utilizado o valor padrão definido no Dockerfile da imagem utilizada. No nosso caso é python e seu comando padrão executa o binário python, ou seja, se não fosse especificado o bash, no final do comando de exemplo acima, ao invés de um shell bash do GNU/Linux, seria exibido um shell do python.

## Como renomear um container

```bash
docker rename CONTAINER NEW_NAME
```

## Como listar containers

Esse comando é responsável por mostrar todos os containers, mesmo aqueles não mais em execução.

```bash
docker container ls <parâmetros>
#ou 
docker ps 
```

Parâmetro | Explicação
:--------- | :------ |
-a | Lista todos os containers, inclusive os desligados
-l | Lista os últimos containers, inclusive os desligados
-n | Lista os últimos N containers, inclusive os desligados
-q | Lista apenas os ids dos containers, ótimo para utilização em scripts

### Gerenciar containers

Para iniciar, reiniciar, pausar, resumir e parar um container execute o comando abaixo

```bash
docker container <COMANDO> <CONTAINER ID || NAME>
#ou  
docker <COMANDO> <CONTAINER ID || NAME>
```

Comandos | Explicação
:--------- | :------ |
restart | Reinicia um container
pause | Pausa a execução do container
unpause | Tira o container do modo pausa
stop | Encerra a execução do container
rm | Apaga um container
rm -f | Apaga um container ativo

## Como retomar o acesso a um container interativo rodando em segundo plano

Entrar no modo interativo com container ativo 

```bash
docker container attach <CONTAINER ID || NAMES>
#ou  
docker attach <CONTAINER ID || NAMES>
```

Para sair do modo interativo, digite `exit`

Para sair do container mas mante-lo em execução tecle `ctrl + pq`

## Como apagar containers que não estão sendo utilizados

Remove todos os containers inativos do seu computador

```bash
docker container prune
```

Vale ressaltar que a ideia dos **containers** é a de **serem descartáveis**. Caso você use o mesmo container por muito tempo sem descartá-lo, provavelmente está usando o Docker incorretamente. O Docker não é uma máquina, é um processo em execução. E, como todo processo, deve ser descartado para que outro possa tomar seu lugar na reinicialização do mesmo.

## Como motirar os processos dentro de um container

O comando `top`, assim como nos terminais linux, traz as informações sobre os processos que estão sendo rodados, mas dentro do container, o que não inclui, por exemplo, serviços que são compartilhados com o sistema hospedeiro. Ele é útil para quando estamos rodando containers em segundo plano

```bash
docker container top <CONTAINER ID || NAMES>
```

## Dica para monitorar containers

Instale o **[ctop](https://ctop.sh/)** para monitorar e manipular todos os containers em sua maquina


![ctop](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eha3u2g2ik1dvj8gfvl4.png)

Para utilizar basta digitar `ctop` em seu terminal.