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

3 spíše neznámé příkazy dockeru, které vám pomohou v různých scénářích

Pokud používáte Docker nějakou dobu, pravděpodobně již máte jednoduchý a efektivní pracovní postup přizpůsobený vám, který zahrnuje některé z vašich oblíbených příkazů dockeru (podpříkazy, které mají být technicky správné).

Například jsem použil k odstranění kontejnerů, které neběží, pomocí dlouhého příkazu, který vypadá takto docker container rm $(docker container ps -qf status=exited) , fungovalo to, zjevně házelo chybu, kdykoli tam nebyly žádné visící kontejnery. Jednoho dne to přestalo, když jsem zjistil, že máme také prune dílčí příkaz pro kontejnery! Nyní se tedy dlouhý příkaz stáhl do jednoduchého docker container prune .

Jde o to, že i když mnoho z nás Docker nějakou dobu používá, existuje možnost, že některé věci mohly být přehlédnuty, nebo možná dokonce zapomenuty v průběhu času.

V tomto článku vám dám tři dílčí příkazy dockeru, které pro vás mohou být nové nebo je příliš nepoužíváte, ale myslím, že byste měli.

Tyto dílčí příkazy mohou také zahrnovat své vlastní dílčí příkazy.

1. Dílčí příkaz systému

Docker má system příkaz, který vám nějaké poskytne informace na úrovni systému související s dockerem. Ve skutečnosti už nějakou dobu používáte jeden z jeho dílčích příkazů. Zapamatujte si docker info ? Tento příkaz je ve skutečnosti docker system info .

Chcete-li se dozvědět více o tomto dílčím příkazu a o tom, co nabízí, spusťte --help možnost na něm.

➟ docker system --help

Usage:  docker system COMMAND

Manage Docker

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.

Pojďme si projít každý z těchto dílčích příkazů, protože si myslím, že jsou všechny velmi kritické.

Docker system df

Byli jste někdy v situaci, kdy se zdálo, že diskový prostor vašeho serveru je téměř plný? Chcete-li zkontrolovat, zda se jedná o kontejnery (běh/objemy), pravděpodobně jste použili du příkaz přímo v kořenovém adresáři dat.

Kořen dat nebo kořen dat je umístění, kam docker ukládá všechna data související s jeho stavem. To zahrnuje, ale není omezeno na obrázky (vrstvy), svazky, informace související se sítí, pluginy.

Pomocí du na datovém kořeni vyžaduje sudo přístup.

✗ du -h --max-depth=1 /var/lib/docker
du: cannot read directory '/var/lib/docker': Permission denied
4.0K    /var/lib/docker

A nejen to, abyste explicitně věděli, kolik svazků nebo obrázků přidělují, museli byste příkaz spustit několikrát.

➟ sudo du -h --max-depth=0 /var/lib/docker/volumes && \
    sudo du -h --max-depth=0 /var/lib/docker/image && \
    sudo du -h --max-depth=0 /var/lib/docker/

Mnohem lepší alternativou je zavolat docker system df příkaz. To automaticky detekuje datový kořen a podle toho vytiskne všechny informace týkající se využití disku kontejnery, obrázky a svazky Docker.

Zde je to, co ukazuje můj aktuální systém (je to nová instalace)

➟ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        1         84.17MB   84.17MB (100%)
Containers      1         1         8.219MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Prořezávání systému Docker

Pokud jste někdy chtěli odstranit (1) všechny nepoužívané sítě, (2) visící obrázky, (3) zastavené kontejnery, (4) všechny nepoužívané svazky, je velká šance, že jste použili nebo jste zvyklí používat čtyři samostatné příkazy k dosažení práce.

docker network prune && \
    docker image prune && \
    docker volume prune && \
    docker container prune

Pokud jste dříve nevěděli o container prune jako já, pak se příkaz ještě zvětší. Máme štěstí, že to vše lze provést pomocí jednoduchého příkazu, konkrétně docker system prune --volumes .

Ve výchozím nastavení docker system prune neodstraní svazky, k tomu musíte použít --volumes volba. Tento příkaz navíc také vymaže mezipaměť sestavení.

Můžete použít -f možnost vyhnout se (někdy) nepříjemné výzvě. Viz příklad níže:

➟ docker system prune --volumes -f
Deleted Containers:
672d39c1a78969887f411ce9139e74e5b21c31fccf2bcf8c1190a9e166089ede

Deleted Networks:
Example
SSHnet
Dummy

Deleted Volumes:
dummy

Total reclaimed space: 0B

Mezi další možnosti patří -a který odstraní všechny nepoužívané obrázky, nejen ty visící.

Události systému Docker

Tento příkaz nemusí být vždy užitečný, ale myslím si, že by si to měl být vědom každý.

docker system events nebo docker events ve zkratce vám poskytuje události v reálném čase přímo pro démona dockeru (dockerd ). To může pomoci sledovat určité události, jako je například odstranění obrázku.

Chcete-li tomu lépe porozumět, podívejte se na níže uvedený snímek obrazovky.

2. Dílčí příkaz context

Toto je další krásný dílčí příkaz, o kterém, pokud vím, mnoho lidí neví. Kontext pro provádění jakéhokoli příkazu dockeru je několik párů klíč-hodnota, které zahrnují, ale nejsou omezeny na koncový bod, hostitele, možná nějaký konfigurační soubor atd.

Jakmile budete mít vytvořený kontext, můžete jej později znovu použít.

Jedním z největších praktických případů použití, zejména pro mě, bylo vytváření samostatných kontextů pro jednotlivé servery, na kterých mám spuštěný docker. Protože se většina mé práce točí kolem toho, místo toho, abych se pokaždé přihlašoval na server, používám svého místního klienta se serverem remove docker přes SSH.

Jak nastavit vzdálený přístup k démonu Docker [Podrobná příručka] Nechcete používat ssh na vzdálený server a poté spouštět příkazy dockeru? Můžete nastavit vzdálený přístup do dockeru, který má i další výhody. Linux HandbookDebdut Chakraborty

Dovolte mi, abych vám ukázal, jak toho dosáhnu pomocí kontextů dockeru.

Nejprve mám server nasazený na Linode, na kterém běží docker. Pokud bych měl přistupovat k démonu vzdáleného dockeru bez kontextů, použil bych příkaz jako je následující

➟ docker --host ssh://[email protected]:7770 ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Takže pro přístup ke vzdálenému démonovi bych musel mít alias docker na docker --host ssh://[email protected]:7770 nebo použijte proměnnou prostředí DOCKER_HOST . Ty však velmi znesnadňují přechod na jiné hostitele. Jednodušší alternativou je prostě vytvořit kontext.

Následující příkaz vytvoří kontext s názvem remote , pro koncový bod dockeru s jiným hostitelem, než je místní.

docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"

Výstup vypadá takto:

➟ docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"
remote
Successfully created context "remote"

Nyní můžete buď použít -c možnost pomocí docker pokud chcete něco zkontrolovat rychle nebo pro opakované operace, změňte kontext na tento nový.

Pomocí -c možnost:

➟ docker -c remote ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

S docker context use [CONTEXT_NAME] :

➟ docker context use remote
remote
Current context is now "remote"
~ 
➟ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Chcete-li se dostat z kontextu, použijte use dílčí příkaz s default pro kontextový název:

➟ docker context use default
default
Current context is now "default"
~ 
➟ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3. Dílčí příkaz pause &unpause

Velké nasazení (aplikace) jsou nyní rozděleny do více komponent, lépe známých jako mikroslužby. Když je nasadíte pomocí něčeho jako docker-compose, někdy se stane, že se jedna komponenta spustí dříve než ta, na které závisí. To je problém, protože jeho závislost (nebo závislosti) se ještě nespustila, spuštění této komponenty se nezdaří.

Tento problém můžete zmírnit pomocí zásad restartování v Dockeru, ale nezabrání zahlcení protokolu neúspěšnými pokusy. To, co jsem na začátku dělal, bylo prostě zastavit kontejner/službu, dokud se závislost úplně nespustí.

Lepší způsob je prostě na chvíli pozastavit kontejner, a jakmile budou potřebné služby úspěšně spuštěny, můžete pozastavení kontejneru zrušit a vše se odtamtud pohne vpřed.

Přestože se kontejnery rychle otáčejí, je to ještě rychlejší způsob, jak takovému problému čelit.

Syntaxe pro pause a unpause je docela jednoduché.

docker pause [CONTAINER_NAME|ID]
docker unpause [CONTAINER_NAME|ID]

Tím tento článek prozatím končí. Pokud najdu nějaké další takové příkazy, užitečné nebo zajímavé, aktualizuji tento článek odpovídajícím způsobem.

Máte příkaz Docker, který by podle vás měl být na tomto seznamu? Dejte mi vědět v komentářích níže.


Docker
  1. 3 Linuxové příkazy pro vypnutí systému a budete to moci udělat snadno

  2. 20 Příkazy OpenSSL Příklady, které musíte znát

  3. Příkazy Dockeru Rychlý průvodce Cheat Sheet

  1. Některé příkazy DOCKER

  2. Měli byste spustit databázi v Dockeru?

  3. 10 smrtících příkazů, které byste nikdy neměli spouštět na Linuxu

  1. 12 zábavných příkazů Linuxu, které vás mohou rozesmát

  2. Jak SSH do kontejneru Docker a spouštění příkazů

  3. Nainstalujte Docker (operační systém založený na Debianu)