Salve, Deus, beleza? Continuando essa saga aqui do nosso módulo de Docker, agora nós vamos aprender aqui uma série de comandos ali para poder administrar os containers e também as imagens, que são interessantes para a gente poder saber quando remover container, parar container, remover imagem, e determinadas opções ali que vão nos ajudar a ser produtivos com o Docker. Então, bora lá pro terminal. Vamos pegar aqui o caso do próprio Nginx que a gente já rodou aqui no curso. Eu tô pegando aqui uma imagem que já tem na minha máquina. Se eu rodar o Nginx, a gente sabe que ele vai rodar ali o servidor web e vai ficar preso aqui no meu terminal. E eu sei que se eu fizer um control C, eu consigo parar. Ele vai parar o meu container. Vamos rodar aqui novamente. Isso aqui é muito ruim, porque você quer rodar o container e você quer continuar executando comandos no seu terminal. Então tem uma opção que a gente pode passar aqui, que é o "-d", que é o detest. Ele vai desbloquear o terminal para eu continuar executando os comandos. Então, ele retorna o id do container que está executando, porque aí eu consigo administrar através desse ID aqui. Então, se eu fizer um Docker PS ou um container LS, eu consigo ver os containers que estão rodando. Inclusive, eu tenho um aqui, Node, que eu não sei... Ah, ele está preso aqui, deixa eu parar esse... nem tinha visto. Agora eu tenho um só. Então, eu tenho aqui o meu Nginx Agora que vem o problema Porque está rodando ali Eu quero parar esse container Como que eu faço? A gente usa o comando docker stop Eu posso passar aqui Tanto o id do container Quanto o nome Que é esse nice morse aqui eu posso passar aqui tanto o ID do container, quanto o nome, que é esse nice-morse aqui. Na verdade, eu não preciso passar esse ID inteiro. Isso até é uma dica importante. Se eu passar 703, os três primeiros ali já está bom. Então, se eu fizer um docker ps, ele não existe mais. Então, olha que legal isso, né? Aí ele já parou o container. Se eu fizer um docker ps menos a com grep no nginx, na verdade, eu fui criando aqui vários, né? Esse último aqui, criado a 17 segundos, que foi parado, que é o 703 ali. A gente consegue ver pelo próprio ID. E aqui começa a ter agora um outro problema, né? Por quê? Estou executando, executando, executando esses containers que estão dentro da minha máquina, eles acabam ocupando certo espaço em disco, como que eu posso, na verdade, remover, excluir um container mesmo? Porque você vai usando as coisas aqui. Uma primeira, a gente vai falar disso depois, vou relembrando vocês, mas primeira lição de ouro. Container, Docker ou container, é algo efêmero. A gente não tem que ter medo de excluir. Sem dó nem piedade, a gente tem que excluir. Por vários motivos. O container é uma aplicação que está rodando. Se você tem dados, você deveria usar volumes, que a gente vai aprender depois. Então, para a gente poder excluir um container, a gente usa rm de remove, aí eu posso passar o id inteiro, ou o nome, ou os três primeiros. Então, se eu colocar 703, ele vai excluir esse container. Agora, se eu executar de novo, vou ver que eles foram removidos. Então, ótimo, a gente consegue excluir dessa forma. Se eu pegar o nome também, consigo fazer a remoção pelo nome. Ele sempre mostra uma saída do comando para poder mostrar que deu certo. A gente pode também... Vamos supor que eu tenha várias... Às vezes a gente vai fazendo assim. Eu estou executando vários Nginx. Tem quatro Nginx rodando aqui agora. Para poder parar cada um deles, eu posso fazer um stop aqui passando a sequência de IDs, eu consigo passar vários, mas, poxa, eu tenho que fazer PS, copiar o nome de todos os IDs, isso aqui é muito ruim. Então, a gente tem um comando que vai facilitar a nossa vida. Um docker ps-q vai retornar a lista, o menos-q ele vai abstrair todas as todas as tabelas que ele retorna ali mostrando apenas os IDs. Então como eu tenho os IDs dos containers, eu posso fazer um docker stop e aí eu passo o docker stop e aí eu passo o docker ps-q isso aqui só resolve, cuida para não passar o menos a não tem necessidade aqui, ele vai remover ou melhor, ele vai parar todos os containers para mim, agora com um docker ps eu não tenho mais nenhum container rodando. Então você pode pegar esse comando e colocar ele dentro de um alias. Você pode fazer em um alias, coloca aí nos seus ishells, no seu bash. Eu tenho um Docker stop, que eu já executo, porque ficar digitando isso aqui também não é nada produtivo. Você também pode fazer o comando rm usando o mesmo princípio aqui, mas aí se você quer remover tudo, aí você pode passar um docker ps-q-a, porque ele vai pegar os containers que estão parados também. Então, você pode remover tudo. Mas tem um comando mais produtivo aqui nesse caso. Você pode fazer um container prune. A gente vai aprender depois a trabalhar com volumes, com networks. Sempre você vai ter um prune que limpa tudo. Você consegue passar um comando, uma opção filter, para poder colocar ali um... Ah, eu só quero remover daqui para trás, baseado no número de horas existentes ali daquele recurso. Você consegue. Mas se você fizer dessa forma aqui, ele remove todos os seus containers também, então se torna mais eficiente. Então, vamos agora para a questão das imagens. A imagem, eu não executo a imagem, a imagem só serve como mod, mas eu consigo fazer a remoção dela também. Vamos fazer o comando docker ps-a com o grep enginex. Eu tenho várias aqui que eu não removi, né? Tenho vários containers que eu não removi. Para poder remover essa imagem do enginex, eu uso o rmi, ou remove image. E aí eu passo exatamente, eu posso passar o id da imagem ou o nome dela, né? Então, se eu fizer isso aqui, ele vai dar um erro característico. Ele está falando, olha, você tem vários containers que estão utilizando essa imagem. Então, eu não posso remover. Quando você tem um container baseado ali na imagem, ele não deixa fazer a remoção porque tem uma linkagem dos objetos. Nesse caso aqui, eu posso fazer com menos F, que é o force, que ele está dando a dica aqui. Aí ele vai acabar removendo a imagem e todos os containers associados. Se eu fizer agora um docker-compose px- ginex, acabou tudo. Então, você pode remover assim, se não, com o menos f. Também você consegue fazer a remoção das suas imagens fazendo um... Eu acho que é menos a menos q. A gente consegue o mesmo resultado lá dos containers. Ele vai mostrar que é menos A menos Q que a gente consegue o mesmo resultado lá dos containers ele vai mostrar aqui apenas os IDs, então se você passar RMI com o docker image ls menos A menos Q, ele só mostra os IDs você remove tudo ou você pode fazer... Na verdade, o comando prune, ele só remove... Ele não remove tudo, então você tem que fazer esse comando que eu mostrei antes. Ele só remove o que a gente chama de dangling images, que são layers intermediários para poder construir a imagem. Isso aqui tende também a liberar recursos. A remoção de containers em imagens é muito bom justamente porque a gente vai liberando os recursos da máquina, vai liberando disco. Porque isso aqui vai utilizando o disco cada vez mais, dependendo do tamanho das suas imagens, você vai utilizando isso. Se você quiser fazer uma limpeza geral do seu Docker, você pode usar o System Prim. Ele exclui network, volume e outras coisas. Imagem, ele não acaba excluindo. Imagem, você tem que fazer aquele comando conforme eu fiz, porque a imagem, às vezes vezes ele está pensando assim imagem é algo que você tem ali na sua máquina pode ter alguns dados importantes aí que você não quer baixar de novo então ele deixa pra você poder fazer a exclusão manual tá Vamos fazer aqui um outro comando que é o seguinte. Ficar executando container e excluindo sempre é muito ruim. Então, se eu fizer um docker run menos menos rm, e aí eu vou colocar, por exemplo, o hello world aqui, isso significa que quando o container, quando você sair, o container terminar de executar, ele já vai excluir o container automaticamente. Então, o hello world executa e sai, então o container não existe. Se eu fizer aqui com o Nginx, deixa eu pegar o Nginx aqui, e eu posso acrescentar o "-rm". Então, agora ele vai baixar o Nginx de volta, porque eu excluí ele da minha máquina pronto, então se eu fizer um Ctrl C aqui a instância do container não existe mais ali, ela foi totalmente destruída a mesma história se eu fizer com "-d". Ele executou ali e tal. Aí eu posso passar um stop 6d. Na hora que ele parou aqui, ele não vai existir mais. A gente pode fazer novamente aqui. Se eu fizer um docker ps-a-coindnex, docker ps-a com o nginx, a gente vai ver que o 612. Então, se eu fizer somente um stop 612, ele não existe mais. Então, ele é automaticamente removido. Também é comum que a gente faça um docker run com o "-name", eu posso colocar assim, o Nginx1. Esse nome, lembrando, é um nome único. Se eu fizer dessa forma aqui, eu nomeei agora esse container, olha que interessante se a gente fizer o ps-a, o Nginx. Então, ele vai ter o nome de nginx1. Então, se eu quiser fazer o remove dele, se eu tentar fazer o remove com ele rodando, vai dar erro, né? Ele vai falar, opa, tá rodando. Se quiser fazer com o "-f", você pode. Aí, se eu quiser fazer o stop, eu posso passar o nome. Então, fica mais fácil também pra poder administrar. E como a gente rodou o container com o "-d", com o detest, meio que a gente não sabe ali o que está rodando por detrás do container. Tem um comando para a gente poder ver os logs, o que está acontecendo com o container. Então, a gente passa ali o nome ou o ID. Como eu tenho agora controle sobre o nome, não preciso ficar pegando ali o ID. Se eu fizer o log, eu tenho aquele mesmo resultado a estar parado aqui porque não tem nenhuma novidade. Então aqui a gente viu uma série de comandos úteis para poder facilitar a sua vida na questão do Docker. Então eu lembro do system.premium que eu posso executar ele aqui, mas olha o que ele vai falar. Eu vou matar, eu vou parar todos os containers. Ele vai remover todos os containers parados. Todas as networks, depois a gente vai ver isso aqui. As dangling images. Então, ele não remove ali as imagens e ele remove o cache de building. Isso aqui também costuma, muitas vezes, ocupar bastante espaço em disco. Porque quando ele vai... Uma imagem, depois a gente vai ver, ela é separada em camadas. E ele vai armazenando essas camadas locais e isso ocupa espaço em disco também. Então, só isso aqui já é interessante. As imagens você vai removendo. Você vê ali que eu tenho muitas imagens, porque eu estou preocupado com as outras coisas. Se eu rodar aqui o Docker container, com esse filter 200 aqui, você vai ver que vai... Vamos ver se ele acha mais alguma coisa. Já pegou aqui 2 GB da minha máquina. Enfim, o build é o que, se você quiser realmente fazer a limpeza, isso aqui se você ficou usando o Docker durante um mês, dois meses, provavelmente vai limpar bastante, bem alto, não tem como a gente falar. Então, aprendemos aqui a fazer várias manipulações, leve essas lições aí para o dia a dia na hora que você for trabalhar com o Docker. Então, vamos evoluir nossa saga, é