[ad_1]
As imagens suspensas do Docker são camadas não usadas e não marcadas que existem no sistema de arquivos do seu host. Você pode não estar ciente de sua presença e eles geralmente são lixo indesejado.
Neste artigo, você aprenderá como as imagens pendentes surgem e o que você pode fazer para limpá-las. É uma boa ideia verificar periodicamente quantas imagens pendentes você tem para evitar desperdiçar a capacidade do disco.
O que é uma imagem pendurada?
Uma imagem suspensa é simplesmente uma imagem não utilizada que não tem nome ou etiqueta. Você pode detectar facilmente imagens suspensas ao executar o docker images
comando porque eles aparecem como <none>:<none>
.
Neste exemplo, a primeira imagem da lista é uma imagem suspensa:
$ docker images <none> <none> 509bc96b727d 2 months ago 55.3MB mysql 5.7 f26e21ddd20d 4 months ago 450MB gcr.io/k8s-minikube/kicbase v0.0.30 1312ccd2422d 6 months ago 1.14GB hello-world latest feb5d9fea6a5 11 months ago 13.3kB
A imagem não é marcada, mas ainda permanece em seu sistema. Nesse caso, 55,3 MB de espaço em disco são consumidos.
Você pode verificar se a imagem está suspensa e não apenas não utilizada verificando se ela é referenciada por algum contêiner:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS 2aa683500ee0 gcr.io/k8s-minikube/kicbase:v0.0.30 "/usr/local/bin/entr..." 18 hours ago Exited (130) 18 hours ago
Nenhum recipiente se refere ao <none>:<none>
imagem com identificação 509bc96b727d
então está definitivamente pendurado. Observe que as imagens MySQL e Hello World Não class como pingentes – mesmo que não sejam usados por contêineres, eles estão devidamente marcados, portanto, assume-se que você desejará preservá-los.
Como as imagens suspensas são criadas?
As imagens suspensas geralmente são criadas quando uma imagem existente é substituída por uma nova compilação. Aqui está um Dockerfile simples para demonstrar o que acontece:
FROM alpine:latest COPY demo.txt /demo.txt
Crie um arquivo chamado demo.txt
em seu diretório de trabalho e adicione algum conteúdo:
$ echo 1 > demo.txt
Agora construa sua imagem com docker build
:
$ docker build -t demo:latest .
execute o docker images
Comando para ver sua nova imagem:
REPOSITORY TAG IMAGE ID CREATED SIZE demo latest 40395b6c1362 24 seconds ago 5.54MB
Agora modifique o conteúdo de demo.txt
e reconstrua sua imagem:
$ echo 2 > demo.txt $ docker build -t demo:latest .
A mesma tag de imagem é usada: demo:latest
– então esta compilação substitui a primeira. Corre docker images
para ver o efeito:
REPOSITORY TAG IMAGE ID CREATED SIZE demo latest 3d5052e52b4c 3 seconds ago 5.54MB <none> <none> 40395b6c1362 59 seconds ago 5.54MB
A nova imagem foi criada com ID 3d5052e52b4c
e ele demo:latest
etiqueta. A primeira imagem, ID 40395b6c1362
, ainda existe, mas não foi marcado. Agora mostra como <none>:<none>
. Esta imagem tornou-se uma imagem suspensa, pois nenhum contêiner a usa.
Você pode usar uma imagem pendurada?
As imagens suspensas funcionam como qualquer outra imagem. A única diferença é a tag que falta. Você pode iniciar um contêiner a partir de uma imagem suspensa referenciando diretamente o ID da imagem:
$ docker run -it 40395b6c1362 sh / #
Tecnicamente, a imagem não trava mais, porque um contêiner agora a está usando ativamente. É comum que os contêineres terminem com um none
imagem se você remover ou reconstruir a tag que eles usaram. Os contêineres com uma imagem não marcada exibirão o ID da imagem no IMAGE
coluna quando você executa docker ps
em vez da etiqueta habitual.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26d5609ba75c 40395b6c1362 "sh" 2 seconds ago Up 1 second inspiring_lederberg 91ab866b59a2 portainer/portainer-ce "/portainer" 2 weeks ago Up 2 days 8000/tcp, 9443/tcp portainer_portainer_1
Limpando imagens penduradas
Você pode remover uma única imagem suspensa usando o docker rmi
comando, como qualquer outra imagem. Como a imagem não será marcada, você precisará identificá-la por seu ID.
$ docker rmi 40395b6c1362
A melhor maneira de limpar um monte de imagens penduradas é o docker image prune
domínio. Isso removerá automaticamente todas as imagens pendentes em seu host Docker.
$ docker image prune Total reclaimed space: 5.54 MB
A saída do comando mostra a quantidade de espaço em disco que foi liberada. Verifique se suas imagens estão realmente penduradas se nada for excluído. Imagens usadas ativamente por contêineres não podem ser excluídas. Você precisará remover os recipientes com docker rm
primeiro, antes de tentar podar suas imagens.
Você pode descobrir que tem uma imagem pendente que realmente deseja reutilizar no futuro. Nessa situação, você pode rotulá-lo novamente com o docker tag
domínio. Isso tornará a imagem mais fácil de identificar e evitará futuras operações de poda.
$ docker tag 40395b6c1362 demo:latest
Imagens exibidas como <none>:<none>
eles podem não ser quadros pendurados. Confusamente, essa situação também ocorre para imagens criadas como camadas intermediárias durante uma compilação.
Cada etapa em um Dockerfile resulta na criação de uma nova camada intermediária. A imagem produzida no final da compilação recebe a tag que você especifica. As outras camadas intermediárias permanecem sem rótulo e podem ser visualizadas executando docker images -a
.
Essas camadas não são imagens suspensas porque as imagens subsequentes na cadeia de construção dependem delas. Eles são referenciados por cada camada sucessiva e não causam problemas de espaço em disco. Você pode evitar que camadas intermediárias sejam preservadas no disco incluindo o --rm
sinalizar em tempo de compilação:
$ docker build --rm -t demo:latest .
Resumo
As imagens suspensas são imagens do Docker não marcadas que não usam um contêiner ou dependem de um descendente. Eles geralmente são inúteis, mas ainda consomem espaço em disco. Ele acumulará imagens pendentes quando você substituir uma tag existente ao iniciar uma nova compilação.
Todas as imagens penduradas são mostradas como <none>:<none>
na CLI do Docker. Ter muitos deles pode ser esmagador quando você tem dezenas de imagens sem informações sobre sua verdadeira identidade. correndo regularmente docker images prune
evitará o desperdício de espaço em disco e resultará em uma lista de imagens mais curta.
[ad_2]