GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Kompletní průvodce pro odstranění obrázků Docker

Pokud budete pokračovat ve vytváření obrázků dockerů, brzy vám začne docházet místo. Smazáním starých a nepoužívaných bitových kopií dockeru uvolníte spoustu místa na disku.

V tomto článku proberu různé scénáře odstranění obrázků dockeru z vašeho systému.

Způsoby odstranění obrázků dockeru

Nejprve zkontrolujte obrázky dockeru ve vašem systému pomocí tohoto příkazu:

docker images

Výstup zobrazí všechny obrázky dockeru a jejich ID obrázku. Tento název obrázku (ve sloupci úložiště) nebo ID obrázku potřebujete k odstranění obrázku dockeru ze systému.

[email protected]:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              67e34c1c9477        2 weeks ago         114MB
ubuntu              latest              775349758637        6 weeks ago         64.2MB

Pomocí ID obrázku můžete odebrat obrázek dockeru následujícím způsobem:

docker rmi image_name_or_id

Můžete také použít tento příkaz, protože oba jsou stejné:

docker image rm image_id

Takto může výstup vypadat:

[email protected]:~$ docker rmi 67e34c1c9477
Untagged: debian:latest
Untagged: [email protected]:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
Deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
Deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb

Pokud použijete ID obrázku, odstraní se všechny obrázky spojené s tímto ID.

Odstranění obrázku dockeru spojeného s kontejnerem

Život by byl mnohem jednodušší, kdybyste mohli takto odstranit obrázky dockerů. Ale to se nestává často.

Pokud máte kontejnery spojené s bitovou kopií dockeru, při pokusu o odstranění bitové kopie narazíte na některé chyby.

[email protected]:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (cannot be forced) - image is being used by running container 13dc0f4226dc

Nejprve musíte zastavit kontejner:

[email protected]:~$ docker stop 13dc0f4226dc
13dc0f4226dc

Problém je v tom, že i když kontejner zastavíte, bude si stále stěžovat, pokud se pokusíte obrázek odstranit:

[email protected]:~$ docker rmi 67e34c1c9477
Error response from daemon: conflict: unable to delete 67e34c1c9477 (must be forced) - image is being used by stopped container 5ced86b1fcee

Zde máte dvě možnosti:

  • Vynutit odstranění obrazu dockeru (přidružený kontejner zůstane v systému)
  • Odstraňte přidružený kontejner a poté odeberte obrázek dockeru

Chcete-li vynutit odstranění obrazu dockeru, můžete použít volbu -f:

docker rmi -f image_id

Chcete-li odstranit kontejner a poté odstranit obrázek, můžete použít něco takového:

docker rm container_id
docker rmi image_id

Odstranění obrázku dockeru spojeného s více kontejnery

Život by byl stále o něco jednodušší, kdyby byl obrázek dockeru spojen pouze s jedním kontejnerem. K obrázku však může být přidruženo více kontejnerů a odstranění tohoto typu obrázku dockeru se stává bolestí.

Zobrazí se tato chyba:

[email protected]:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (must be forced) - image is referenced in multiple repositories

Nejprve musíte najít všechny kontejnery spojené s názvem obrázku (nikoli ID).

docker ps -a -q --filter ancestor=docker_image_name
  • -volba zobrazí všechny spuštěné a zastavené kontejnery.
  • Volba -q zobrazí pouze ID kontejneru.

A pak je musíte všechny zastavit. Můžete použít ID kontejneru jedno po druhém, ale to bude příliš časově náročné. Můžete použít kouzlo potrubí a xargs k zastavení všech kontejnerů spojených s obrázkem:

docker ps -a -q --filter ancestor=ubuntu | xargs docker stop

A pak můžete buď odstranit zastavené kontejnery, nebo vynutit odstranění obrázku (jak jste viděli v předchozí části).

Pokud chcete odstranit všechny kontejnery spojené s obrázkem, spusťte tento příkaz:

docker ps -a -q --filter ancestor=ubuntu | xargs docker rm

A nyní můžete odstranit obrázek dockeru pomocí příkazu uvedeného dříve v tomto tutoriálu.

Odebrání více obrázků dockeru najednou

Jedním příkazem můžete také odebrat více obrázků ukotvitelného panelu. Je to stejné jako předchozí příkaz. Stačí zadat ID obrázku nebo názvy obrázků.

docker rmi image_id_1 image_id_2 image_id_3

Samozřejmě budete muset zastavit všechny spuštěné kontejnery spojené s obrázky.

Odstranění všech nepoužívaných a visících obrázků dockeru najednou

Než to uvidíte, dovolte mi vysvětlit, co jsou nepoužívané a visící obrázky:

Jakýkoli obrázek dockeru, ke kterému je přidružen jakýkoli druh kontejnerů (zastaven nebo spuštěn), je použitý obrázek. Pokud k obrazu dockeru nejsou přidruženy žádné kontejnery, stane se nepoužitým obrazem dockeru.

Visící obrázek dockeru „znamená, že jste vytvořili nové sestavení obrázku, ale nedostalo nové jméno. Takže staré obrazy, které máte, se stanou visícími obrazy. Tyto staré obrázky jsou ty, které nejsou označeny a u jejich názvu se při spuštění příkazu ‚docker images‘ zobrazuje .“

Pokud chcete odstranit visící obrázky, můžete použít možnost prořezat:

docker image prune

Pokud chcete odstranit nepoužívané i visící obrázky najednou, můžete použít prune s volbou -a:

docker image prune -a

Měli byste vidět prostor, který uvolňuje na konci výstupu:

[email protected]:~$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: ubuntu:latest
untagged: [email protected]:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
untagged: debian:latest
untagged: [email protected]:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb
untagged: fedora:latest
untagged: [email protected]:d4f7df6b691d61af6cee7328f82f1d8afdef63bc38f58516858ae3045083924a
deleted: sha256:f0858ad3febdf45bb2e5501cb459affffacef081f79eaa436085c3b6d9bd46ca
deleted: sha256:2ae3cee18c8ef9e0d448649747dab81c4f1ca2714a8c4550eff49574cab262c9

Total reclaimed space: 308.3MB

S příkazem prune můžete být trochu chytří a odstranit pouze staré nepoužívané a visící obrázky. Pokud tedy chcete odstranit ty starší než 24 hodin, použijte to takto:

docker image prune -a --filter "until=24h"

Odstranění všech obrázků dockeru ze systému

Možná se nacházíte v testovacím prostředí a chcete začít znovu odstraněním všech obrázků dockeru.

Chcete-li odstranit všechny obrázky dockeru, musíte nejprve zastavit všechny běžící kontejnery.

docker ps -a -q | xargs docker rm

Nyní můžete smazat všechny obrázky tímto způsobem:

docker images -a -q | xargs docker rmi -f

A je to. Myslím, že to je dostatečný referenční materiál pro odstranění obrázků dockerů a měli byste tomuto tématu nyní lépe porozumět. Můžete se také podívat na výukový program pro odstranění kontejnerů dockeru.

Pokud máte nějaké dotazy nebo návrhy, zanechte prosím níže komentář.


Docker
  1. Co je Docker Container:Úvodní příručka pro začátečníky

  2. Kompletní průvodce pro začátečníky k protokolování dockeru

  3. Jak upravit obrázky Docker

  1. Jak přesunout obrazy Dockeru mezi hostiteli

  2. Jak sdílet obrázky Docker s ostatními

  3. Úvod do Docker Images

  1. Docker Část 4:Vytváření a publikování vlastních obrázků dockeru

  2. Začínáme s předpřipravenými obrázky Docker

  3. imagemagick pro optimalizaci obrazu