Como remover imagens Docker de um projeto de Docker Compose
O Docker Compose é uma ferramenta que permite definir e executar aplicativos Docker em vários contêineres. Ele usa um arquivo YAML para definir os serviços, redes e volumes necessários para o aplicativo. À medida que você adiciona ou atualiza os serviços em seu aplicativo, as imagens Docker são criadas e armazenadas em cache localmente.
No entanto, com o tempo, essas imagens podem ocupar muito espaço em seu sistema, e você pode querer remover algumas delas para economizar espaço em disco. Neste artigo, vamos mostrar como remover imagens Docker de um projeto Docker Compose e como automatizar esse processo usando scripts bash.
Passo 1: Parar os contêineres
Antes de remover as imagens, é necessário verificar se todos os contêineres associados à imagem que você deseja remover estão parados. Você pode verificar isso executando o comando docker-compose ps
no diretório raiz do projeto Docker Compose. Se algum contêiner estiver em execução, você deve pará-lo antes de continuar.
$ cd myproject/
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
myproject_db_1 docker-entrypoint.sh mysqld Up (healthy) 3306/tcp
myproject_web_1 /bin/sh -c nginx -g 'daemo ... Up 0.0.0.0:80->80/tcp
Neste exemplo, podemos ver que os contêineres myproject_db_1
e myproject_web_1
estão em execução. Para parar os contêineres, podemos usar o comando docker-compose down
.
$ docker-compose down
Stopping myproject_web_1 ... done
Stopping myproject_db_1 ... done
Removing myproject_web_1 ... done
Removing myproject_db_1 ... done
Passo 2: Remover as imagens
Para remover imagens Docker de um projeto Docker Compose, podemos usar o comando docker-compose down --rmi <tipo de imagem>
. O <tipo de imagem>
pode ser all
, local
, cache
ou none
. Aqui está o que cada um faz:
all
– Remove todas as imagens do projeto.local
– Remove apenas as imagens que foram construídas localmente (usando o comandodocker-compose build
).cache
– Remove apenas as imagens em cache que foram baixadas anteriormente.none
– Não remove nenhuma imagem.
Por exemplo, se quisermos remover todas as imagens do projeto, podemos executar o seguinte comando:
$ docker-compose down --rmi all
Para remover imagens individuais, podemos usar o comando docker rmi <nome da imagem>
para cada imagem que desejamos remover. Certifique-se de usar o nome correto da imagem, que geralmente é composto por um nome de repositório e uma tag. Você pode verificar os nomes das imagens existentes usando o comando docker images
.
Por exemplo, se quisermos remover uma imagem com o nome “myproject_web”, podemos executar o seguinte comando:
$ docker rmi myproject_web
Passo 3: Automatizar o processo
Para automatizar o processo de remoção de imagens, podemos criar um script bash que executa os comandos acima. Aqui está um exemplo de script que remove as imagens Docker em cache e locais de um projeto Docker Compose:
#!/bin/bash
# Change to the project directory
cd /path/to/myproject
# Stop all running containers
docker-compose down
# Remove all cached images
docker-compose down --rmi cache
# Remove all locally built images
docker-compose down --rmi local
Neste exemplo, o script primeiro altera o diretório para o diretório raiz do projeto Docker Compose. Em seguida, ele executa o comando docker-compose down
para parar todos os contêineres associados ao projeto. Depois, ele executa o comando docker-compose down --rmi cache
para remover todas as imagens Docker em cache. Por fim, ele executa o comando docker-compose down --rmi local
para remover todas as imagens Docker construídas localmente.
Para executar o script automaticamente em intervalos regulares, podemos usar o utilitário cron no Linux. Aqui está um exemplo de arquivo de cron que executa o script acima todos os dias às 3h da manhã:
0 3 * * * /path/to/myproject/cleanup.sh >> /path/to/myproject/cleanup.log 2>&1
Neste exemplo, o arquivo de cron executa o script /path/to/myproject/cleanup.sh todos os dias às 3h da manhã. A saída do script é redirecionada para o arquivo /path/to/myproject/cleanup.log. O 2>&1 no final redireciona também os erros para o arquivo de log.
Conclusão
A remoção regular de imagens Docker não utilizadas pode ajudar a economizar espaço em disco e melhorar o desempenho do sistema. Com o Docker Compose e scripts bash, podemos automatizar esse processo para que seja executado regularmente sem intervenção manual. Certifique-se de avaliar cuidadosamente quais imagens são seguras para remover antes de executar os comandos de remoção.