>> Aprentação e considerações
Hoje é dia de maldade…hehe!!!
Nessa sessão vamos brincar com alguns comandos DESTRUTIVOS do Docker, repetindo, são comandos DESTRUTIVOS, muito cuidado na sua utilização (depois não diga que não avisei…hehe)
Confira também os nossos posts anteriores da sequência Docker:
P01 – Instalação no Linux, e nosso primeiro container “hello-wolrd”!
P02 – Brincando com imagem centos e subindo um container NGINX
Pois bem, vamos ver comandos do Docker que nos ajudará a “Limpar a casa” e além disso vamos ver os comandos do Docker para remover TODOS os recursos por ele utilizados para talvez “começar do zero”.
Lets’go!
>> Docker system
Nas versões mais novas do Docker, mais precisamente à partir da versão 1.13, foi adicionado um novo subcomando simplesmente sensacional que é o “system”
Nesse tutorial vamos nos atentar a 2: df e prune
~# docker system --help Usage: docker system COMMAND Manage Docker Options: --help Print usage Commands: df Show docker disk usage events Get real time events from the server info Display system-wide information prune Remove unused data Run 'docker system COMMAND --help' for more information on a command.
Onde:
df – Utilização de disco
events – Obtém eventos em tempo real
info – Exibe informações detalhadas do sistema
prune – Remove dados não utilizados
Até então não tínhamos como saber de forma simples o quanto de recursos de disco por exemplo o nosso docker daemon estava consumindo em nosso docker host tornando um pouco difícil essa manutenção.
Pois bem, o primeiro comando que vamos conhecer irá exibir de forma sumarizada o quanto o docker está consumindo no disco do nosso host, o “docker system df”
~# docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 20 8 5.221GB 1.87GB (35%) Containers 9 1 442.4MB 47.12MB (10%) Local Volumes 15 15 848.9MB 0B (0%)
Como podemos ver com esse comando já sabemos a quantidade de “imagens”, “containers” e “volumes” que temos no TOTAL, ATIVOS e o TAMANHO em disco que está sendo utilizado de forma geral.
O comando abaixo exibe MUITAS informações e de forma detalhada exibindo o que exatamente cada recurso está consumindo do disco
~# docker system df -v
(Obs.: Não vou mostrar a saída…hehe…é MUITO GRANDE…rs)
>> docker “prune”
O “prune” tem por objetivo remover TODOS os recursos não utilizados, isso mesmo, tudo o que não está em uso vai pro beleléu!!! Muito cuidado com esse comando porque se existe um container que você deixa parado e eventualmente usa pra fazer algo, o prune o remove também, como bons “DevOpeiros” e Sysadmins vamos ao help:
~# docker system prune --help Usage: docker system prune [OPTIONS] Remove unused data Options: -a, --all Remove all unused images not just dangling ones --filter filter Provide filter values (e.g. 'until=') -f, --force Do not prompt for confirmation --help Print usage
Basicamente todos os subcomandos de docker tem o parâmetro -f ou –force que tem como característica padrão a remoção forçada ou no caso pular a fase da interatividade do comando.
Vamos manter a interatividade para ver o que será feito.
Logo na saída do comando temos um “WARNING”, que é um aviso falando que serão removidos todos os containers que estão parados, todas as redes, volumes e images pendentes e ao confirmarmos ele simplesmente remove os recursos exibindo o que foi removido e ao final exibe o quando de disco que foi liberado no docker host.
~# docker system prune WARNING! This will remove: - all stopped containers - all volumes not used by at least one container - all networks not used by at least one container - all dangling images Are you sure you want to continue? [y/N] y Deleted Containers: a92052a3608fbd4e2972ba6baec47452785fb49084180230f42528b35db15319 aac9e5d0d624fa607af59d2a8e6cf737c01dec9e2acb4308548f4720435d6c48 d5b861f9038dbc7e6f29f42c2a5db426deda6561a8c7704dfd6f48731e85e210 feb0caefd1aad27abc7390f87586592ef9aea63e357370305924023298b1466c 849f2a8a4745b960001b6189b655587026e20717359c996758497dc81d8aa642 a25394fad67f6ffeebfaa570f0661baae78f8b3d18290bb935c6fa9314fb5c8c 057e0c071b886515ddd9ab51901942158f5ba65ebd2cf80e76f39eb696bdcb7d b6decaf44c13bf324d59ecb4c687a256ae475a8324dba2547fd116da3636c01c Deleted Volumes: 897c93b168aef06483b5bd16bb946b07f451f9736b1efc3720fe129e8739c02f d85df8017d0b5536001b7c512d5ac0351c8d6fad4d911b26f00e8e0ec99ccb04 02be010002ad3e13e1bd9513decf6a4de3feb97134764de51b1a0abb34bf6da0 3c34732f4b65dc462e76d1c2b08cbc1bd8f3a340cfdd89419bfe1b1270ec6e51 5738d03abedb63492ab10e89b79ba378b4f7b87089acdc5767bdecd7620dfe1b 64b520004c2a44458955f18520afc43043e75eb5ca06366e8664d64747bfd824 9b4f4c1bc5c5137dff7062e7d7b1c70c9304e31b431222504f45296526640475 c8ed04aa5f5b051df3fd7a25398af941cc5f452b69477070b3e0e295b3db5a3f ca57d2bfe6c6202402f9702d57b32c2df04787f649d76135aaf07f2ec686de78 090ffcc1851ed454cdd15f3c0c306a709db03d3016a5f3433c8b65370a768918 b8863dc30795d16a9ccfe39d4635e529df7995a5568e19318d1f8696587c425f fe1dbf76d5a9bf1eac5cdbbc1efa782b5c6dce8980daec15313a0045ea611648 84b8804614db143e3f7a9d51c160032ed17c0171ee4c781e4012a0504050705a 93a8e9f35d956248b3dcb2e9c0c1a27a95a0ddf3bf974e4cebbce65196f6355a Deleted Networks: graylog_default docker_gwbridge Total reclaimed space: 694.2MB
O comando acima “docker system prune” já faz o trabalho de remoção para todos os recursos (pode ser que ele não funcione direito para imagens para isso use o “docker image prune -a” ).
Também podemos especificar se queremos apagar containers, imagens, volumes ou network, o que na verdade considero uma melhor opção pois muitas vezes queremos manter todos os nossos containers, volumes e rede, e apagar somente as imagens, ou enfim, da forma que você desejar, abaixo estou exibindo somente o help de cada um dos comandos para que você possa executá-los e testá-los de acordo com a necessidade
~# docker container prune --help Usage: docker container prune [OPTIONS] Remove all stopped containers Options: --filter filter Provide filter values (e.g. 'until=') -f, --force Do not prompt for confirmation --help Print usage
~# docker image prune --help Usage: docker image prune [OPTIONS] Remove unused images Options: -a, --all Remove all unused images, not just dangling ones --filter filter Provide filter values (e.g. 'until=') -f, --force Do not prompt for confirmation --help Print usage
~# docker volume prune --help Usage: docker volume prune [OPTIONS] Remove all unused volumes Options: -f, --force Do not prompt for confirmation --help Print usage
~# docker network prune --help Usage: docker network prune [OPTIONS] Remove all unused networks Options: --filter filter Provide filter values (e.g. 'until=') -f, --force Do not prompt for confirmation --help Print usage
>> E se eu quiser limpar o meu sistema todo? Dar um “reset” no meu docker
Agora vamos dar um “FATALITY” em tudo o que temos de Docker em nossa máquina, vamos utilizar o parâmetro “-q” que vai exibir somente o container_id para que possamos utilizar para as remoções.
Listando todos os containers, parando, e removendo
~# docker container ls -a -q 1a6150cd3237 rdglinux ~ # docker container stop $(docker container ls -a -q) 1a6150cd3237 rdglinux ~ # docker container rm -f $(docker container ls -a -q) 1a6150cd3237
Listando todos as imagens e removendo
~# docker image ls -a REPOSITORY TAG IMAGE ID CREATED SIZE jenkins latest 8d383af9763f 7 weeks ago 713MB ~# docker image rm -f $(docker image ls -a) Untagged: jenkins:latest Untagged: jenkins@sha256:cb24eaf4968b20bf594147fcd988ec9ffa61fe8993ed0f22532ff3dba99d8bd0 Deleted: sha256:8d383af9763fe19b8494111bbe5304fe65baf09828efc8dffdb245dd19872a4d Deleted: sha256:44a0643b1a6dbbe70e0336dc393de73882721618d68c3d50a2f3ccd0904cafe0 Deleted: sha256:461efc2527ca5191f6db5a6e7af8449914e12eeb893ebb2ee94ac11145aee9be Deleted: sha256:d23a3533b4babba7f14e234baa7b614d2c72ec28d62657fbb1121944c05e0b2a Deleted: sha256:b2d9ab9c05ae9b3f38bab3bc78d12b430615da2e5a058a6312c324c5e4b6e988 Deleted: sha256:94b91df210f2bad1afc4209477910ff4dfce23c26a52906484415a2d0daea19c Deleted: sha256:10f69df742d54e50c5795229d61667181e9f5edb76fe20c4e4a8aa9c2800bf75 Deleted: sha256:b41d46cb0983293eb7c675d69ea7df138f0bd8c51c617c48131c0923b9f0a545 Deleted: sha256:7738f2b4084ec6a1ccbf48c9642c2984612fb82e3cb8ee8db53bb4a8a9199cff Deleted: sha256:81e9c39021603f8db2075749909d71709db549fcba51a29874634b88a12362d5 Deleted: sha256:e98e2b3ea6f6daaa6a2769dad0f3441e76ac7d685f24d274fe99c891a679bd9d Deleted: sha256:4bd2a150592384c62729feeb0844bd049a39acc9957fcc693c8813f035c835ef Deleted: sha256:3ebb8e8f983a8a0f825fff175c72a51b46eb273209ab68d0aabd4d50c577db8e Deleted: sha256:69819a3bf51d024ea50db3ff1421c78e8357a48f78484e9d345fa52e57606e9d Deleted: sha256:4616c6ad44b665886f6d629d6e41ce4b2bc3092d6c6651ab0f577f5ba57413a3 Deleted: sha256:a9a1fc2e0d113f4bfdc0a8a6252a61faef8a3c6abfc58fa3e2f62ff9ec10e62e Deleted: sha256:f41abdf99ff81bea81635ba1524904d3206050d421ae0703301dbe64189065c0 Deleted: sha256:9a7dbf133ba8f100ae855b6f1f717649c9f0348a31c814a9fe51e378c9706ad1 Deleted: sha256:a749e9b46af88e7bb0882e1ded734eed407eba28a44001bd098af5b002017f6b Deleted: sha256:d17d48b2382adda1fd94284c51d725f0226bf20b07f4d29ce09596788bed7e8e
Listando todos os volumes, e removendo
~# docker volume ls DRIVER VOLUME NAME local jenkins_home ~# docker volume rm -f $(docker volume ls) DRIVER VOLUME NAME local jenkins_home
A agora para rede, NÃO recomendo fazer esse procedimento, utilize o prune mesmo, as redes exibidas abaixo são as redes “default” do Docker, nós só queremos remover os recursos que criamos, e não quebrar o funcionamento do docker
~# docker network ls NETWORK ID NAME DRIVER SCOPE 62c9d77025a7 bridge bridge local 9f975f71542e host host local c564de61d3e4 none null local
>> Conclusão
LEMBRETE: MUITO CUIDADO COM ESSES COMANDOS!!!
Eles são DESTRUTIVOS caso sejam utilizamos sem a devida prudência você pode ser o próximo com o status “Buscando Recolocação”!!! …
Espero que com esse post tenha ajudado a esclarecer o que creio que seja a dúvida de muitos nessa parte de gerenciar o docker host mantendo o sistema sempre limpo.
Dúvidas, críticas e sugestões serão sempre bem vindas, poste seu comentário, curta, compartilhe e nos ajude!!! …hehe…
Valeuuuuu!!!!!
>> Referências
https://docs.docker.com/engine/reference/commandline/system/
Recomendo fortemente o vídeo do Jeferson da LinuxTips falando justamente dessa assunto:
24/04/2017 at 9:13 pm
Opa, ótimas dicas, me ajudou mto, vlw!!
CurtirCurtido por 1 pessoa
24/04/2017 at 9:15 pm
Show Alex! …obrigado pelo feedback…tamo junto!
CurtirCurtir
12/01/2018 at 4:39 pm
Excelentes dicas! Foi uma mão na roda. Valeu!
CurtirCurtido por 1 pessoa
27/01/2018 at 12:13 pm
TOP man, que bom que ajudou!
Abraço!
CurtirCurtir