Když se soustředíte na nasazování svých projektů a testování věcí v kontejnerech Docker, může se to docela snadno zamotat. Zjistíte, že čas od času potřebujete uklidit pracovní prostor. Proč tedy neudržovat prostředí Dockeru bez nepořádku pomocí docker image prune a dalších užitečných příkazů?
Tento tutoriál vás naučí mnoho způsobů, jak udržet prostředí Docker čisté a spravovatelné, a také některé osvědčené postupy, jak zkrotit potenciální složitosti.
Začněme!
Předpoklady
Abyste mohli pokračovat v tomto tutoriálu, musíte mít k dispozici následující:
- Počítač s Windows 10 – Tento výukový program používá Windows 10 a bude spouštět příkazy Dockeru v PowerShellu, ale jakýkoli operační systém, na kterém bude Docker spuštěn, je v pořádku.
- Docker – Tento výukový program používá jako hostitel kontejneru Docker Desktop v3.6.0.
- Stávající kontejner Docker k vyčištění
Odebrání obrázků Docker
Prostředí Docker se skládá z mnoha různých komponent od obrázků, kontejnerů, sítí a tak dále. Najdete mnoho různých součástí k čištění. Začněme tento proces čištění nejprve oříznutím všech starých obrázků, které již nepotřebujete. Ale nebojte se, pokud odeberete obrázky a necháte si vytvořit soubor Dockerfile, který tyto smazané obrázky potřebuje, Docker je automaticky znovu stáhne.
Pokud potřebujete odstranit nepotřebné obrázky, které jste si stáhli v minulosti, rm
velení je tvůj přítel. Tento příkaz odstraní obrázky a kontejnery, ale výukový program se nejprve zaměří na obrázky.
Pokud máte jeden nebo více kontejnerů, které aktuálně používají obrázek, který chcete odstranit, musíte nejprve zastavit kontejnery používající tento obrázek pomocí
docker stop
příkaz. Další informace najdete v článku ATA Use Docker Stop Containers Without Screwing Things Up!.
Všimněte si, že obrázky Docker nelze odebrat, dokud nezastavíte kontejnery, které obrázek používají.
Chcete-li odstranit obrázek pomocí docker rm
, musíte nejprve najít ID obrázku. Chcete-li to provést, spusťte docker image ls
příkaz. docker image ls
příkaz přečte Docker a vrátí všechny obrázky, které aktuálně máte, včetně ID každého obrázku.
Můžete také spustit
docker images
příkaz k zobrazení seznamu z naposledy vytvořených obrázků.
docker image ls
Níže můžete vidět výsledek docker image ls
příkaz v seznamu tabulky se sloupci REPOSITORY , TAG , ID OBRÁZKU , VYTVOŘENO a VELIKOST .
Jakmile znáte ID obrázku, poskytněte toto ID obrázku docker image rm
příkaz, jak je znázorněno níže. Jakmile tak učiníte, Docker odstraní obrázek se zadaným ID.
# Remove only the images with the specified image ID
docker image rm image_id
Odstranění „vislých“ obrázků dockeru
Jakmile začnete vytvářet další kontejnery a stahovat další obrázky, je pravděpodobné, že budete mít různé obrázky, které nemají žádný přidružený kontejner. Tyto obrázky se nazývají „visící“ nebo „zatoulané“ obrázky a Docker je v současné době nepoužívá.
Abychom ušetřili místo na disku a udrželi pořádek, vyčistíme všechny tyto visící obrázky. Chcete-li to provést, spusťte docker image prune
. Tento příkaz prunes nebo odstraňte obrázky, které z nich nemají vytvořený kontejner.
docker image prune
Pokud chcete odstranit VŠECHNY obrázky s přidruženým kontejnerem nebo ne, nemusíte hledat konkrétní ID obrázku. spusťte
docker image prune -a
přejít na jadernou energii a všechny je odstranit.
Odebrání kontejnerů Docker
Jakmile vyčistíte obrázky Dockeru, je čas přejít na kontejnery. Naštěstí uvidíte, že úkol odstraňování kontejnerů je podobný jako odstraňování obrázků pomocí rm
příkaz.
Nejprve najděte ID kontejneru pomocí docker container ls
příkaz k odstranění kontejnerů, jak je znázorněno níže. Tento příkaz vrátí všechny kontejnery, včetně CONTAINER ID . -al
Parametr je volitelný, aby vám ukázal všechny kontejnery (spuštěné nebo ne) a pouze nejnovější verzi každého kontejneru.
docker container ls -al # List all Docker containers
Jakmile znáte ID kontejneru, spusťte docker rm
a předejte mu ID kontejneru, které chcete odstranit.
# Remove only the containers with the specified container ID
docker rm container_id
Můžete také zadat více než jedno ID kontejneru oddělením každého ID mezerou, jak je znázorněno níže. Tento příkaz odstraní (rm
) výukové kontejnery Alpine a Docker 101 s ID kontejnerů f8ec07177218
a 6fac840d9382
.
docker rm f8ec07177218 6fac840d9382
Odebrání všech zastavených kontejnerů Docker
Možná máte spoustu zastavených kontejnerů, které jen zabírají místo. Stejně jako visící obrázky ani zastavené kontejnery v tuto chvíli neslouží žádnému účelu.
Chcete-li odstranit všechny zastavené kontejnery:
1. Spusťte docker
příkaz níže k vypsání všech (ls --all
) Docker kontejnery. Všimněte si všech kontejnerů se stavem STATUS z Před (X) Y hodinami . Všechny tyto kontejnery jsou v současné době zastaveny.
docker container ls --all
2. Nyní spusťte docker container prune
příkaz k odstranění všech zastavených kontejnerů. Po spuštění tohoto příkazu uvidíte, která ID kontejnerů příkaz odstranil.
docker container prune
3. Nakonec spusťte docker container ls -a
znovu, abyste viděli, že každý zastavený kontejner byl odstraněn.
Pokud nechcete zadávat jedno nebo více ID kontejnerů ručně, můžete také vnořit příkazy Docker pomocí
$()
do obou kontejnerů seznamu a odstraňte je na jednom řádku pomocídocker container rm $(docker container ls -aq)
.docker container
příkaz používáq
přepněte, abyste nevraceli kontejnery do konzoly. Jakmile Docker shromáždí všechny kontejnery, spustídocker container rm
proti každému.
Odebrání kontejnerů Docker pomocí pravidel filtrování
Možná máte mnoho různých nádob a jejich odstranění podle ID by byla bolest. Pokud mají všechny společné vlastnosti, můžete vytvořit filtr, který odstraní pouze kontejnery odpovídající konkrétnímu dotazu.
Chcete-li odebrat více kontejnerů odpovídajících konkrétnímu dotazu, použijte filter
parametr nebo příznak filtrování na docker container prune
příkaz. Tento parametr umožňuje zadat buď until
atribut k filtrovacím kontejnerům vytvořeným před datem nebo label
argument pro přiřazení kontejnerů s/bez konkrétního štítku.
Můžete například odstranit všechny zastavené kontejnery, které byly vytvořeny déle než 10h
před spuštěním příkazu níže.
docker container prune --filter "until=10h"
Zadejte Y potvrďte odstranění kontejneru Docker, jak je znázorněno níže. Po dokončení odstranění uvidíte, které kontejnery byly odstraněny, a celkový uvolněný prostor.
Vyčištění kontejnerů pomocí vnoření příkazů Docker
Všechny předchozí příkazy vyžadovaly, abyste předem zastavili každý kontejner. Ale co když kontejnery běží? Místo toho, abyste zastavovali každý kontejner jednotlivě, můžete místo toho vnořit příkazy Docker do příkazu pro odstranění, abyste zastavili všechny kontejnery a odstranili je současně.
Při odstraňování běžících nádob dodržujte zvláštní opatření. Odstranění může ovlivnit některé aplikace nebo procesy, které závisí na daném kontejneru Docker.
Vnořený docker ($(docker container
) níže uvedený příkaz vypíše všechny kontejnery tiše (-aq
) v paměti, včetně těch, které jsou aktuálně spuštěny. Seznam kontejnerů je poté předán vnějšímu docker
příkaz k odstranění (rm
) kontejnery v seznamu.
Níže můžete vidět, že provedení vnořeného příkazu odstraní všechny kontejnery najednou, jak je znázorněno níže. Když tedy zkontrolujete seznam kontejnerů, nedostanete výstup, protože seznam je prázdný.
Automatické odstranění kontejnerů pomocí --rm
Vlajka
Předchozí příkazy se používají k odstranění kontejnerů Docker pouze poté, co byl seznam Dockeru přeplněný. Proč ale čekat, až bude seznam Dockerů přeplněný? Jste-li pracovník typu „čistý za pochodu“, preventivní čištění máte na dosah pomocí --rm
vlajka.
--rm
příznak v docker run
příkaz je užitečný, pokud věci na svém počítači jen na krátkou dobu testujete a nezpracováváte kritické soubory nebo nasazení v tomto kontejneru.
docker run
syntaxe příkazu níže přidá kontejner Docker s názvem podle vašeho výběru (container_name
) a obrázek Dockeru (organization/base_image
) z knihovny Docker Hub. Ale pak --rm
flag automaticky odstraní kontejner.
docker run --rm --name container_name organization/base_image
Vyčištění svazků dockeru
Docker se neskládá pouze z obrázků a kontejnerů. Ekosystém Docker se také skládá z úložných objemů. Stejnou obecnou metodou hledání ID a ořezávání položek můžete také vyčistit svazky úložiště.
Stejně jako u kontejnerů a obrázků spusťte docker volume ls
zobrazíte všechna ID svazků, která máte v systému.
docker volume ls
Níže můžete vidět, že v tomto tutoriálu jsou uvedeny tři svazky.
Nyní spusťte docker
příkaz níže k odstranění všech nepoužívaných svazků (volume prune
).
Chcete-li odebrat nepoužívané dockerové sítě, spusťte místo toho tento příkaz:
docker network prune
docker volume prune
Níže vidíte, že příkaz odstraní všechny místní svazky, protože nebyly v době odstranění používány. Takže když vypíšete všechny svazky Dockeru, získáte pouze prázdný seznam tabulek.
Odstranění všech nepoužitých součástí Dockeru najednou
V průběhu tohoto kurzu jste vybírali a vybírali, které součásti Dockeru chcete odebrat. Možná pracujete v testovacím prostředí a chcete jen vyčistit vše najednou. Namísto čištění každé součásti samostatně, vyčistěte vše pomocí docker system prune
!
docker system prune
příkaz odstraní neběžící kontejnery, nepoužívané sítě, nepoužívané obrázky a mezipaměť sestavení pro stroj Docker.
docker system prune
Apřidejte
-f
příznak pro vynucení nebo potlačení varovných zpráv a potvrzení smazání prvků systému Docker, jako je tento:docker system prune -f
Níže můžete vidět výzvu s dotazem, zda chcete pokračovat v odstraňování prvků systému Docker nebo ne. Pro pokračování potvrďte zadáním Y.
Závěr
V tomto tutoriálu jste prozkoumali četné způsoby, jak vyčistit obrazy Docker pomocí docker image prune
příkaz, odstranění kontejnerů pomocí docker container rm
a další.
S těmito nově získanými znalostmi, proč nevyvinout své vlastní preferované metody čištění obrázků Docker? Možná vytvoření inventáře prostředků Docker nebo dobrého systému značkování, který vám umožní správně pojmenovat vaše projekty a vyhnout se mazání důležitých obrázků nebo kontejnerů?