Úvod
Docker je aplikace, která zjednodušuje proces správy aplikačních procesů v kontejnerech . Kontejnery vám umožňují spouštět vaše aplikace v procesech s izolovanými zdroji. Jsou podobné virtuálním strojům, ale kontejnery jsou přenosnější, šetrnější ke zdrojům a více závisí na hostitelském operačním systému.
Podrobný úvod k různým komponentám kontejneru Docker najdete v The Docker Ecosystem:An Introduction to Common Components.
V tomto tutoriálu nainstalujete a budete používat Docker Community Edition (CE) na Ubuntu 22.04. Nainstalujete si samotný Docker, budete pracovat s kontejnery a obrázky a vložíte obrázek do úložiště Docker.
Předpoklady
Abyste mohli postupovat podle tohoto návodu, budete potřebovat následující:
- Jeden server Ubuntu 22.04 nastaven podle průvodce počátečním nastavením serveru Ubuntu 22.04, včetně
sudo
non-root uživatele a firewall. - Účet na Docker Hub, pokud si přejete vytvořit vlastní obrázky a odeslat je do Docker Hub, jak je znázorněno v krocích 7 a 8.
Krok 1 – Instalace Dockeru
Instalační balíček Docker dostupný v oficiálním úložišti Ubuntu nemusí být nejnovější verzí. Abychom zajistili, že získáme nejnovější verzi, nainstalujeme Docker z oficiálního úložiště Docker. Za tímto účelem přidáme nový zdroj balíčku, přidáme klíč GPG z Dockeru, abychom zajistili platnost stažených souborů, a poté balíček nainstalujeme.
Nejprve aktualizujte svůj stávající seznam balíčků:
- sudo apt update
Dále nainstalujte několik nezbytných balíčků, které umožní apt
používat balíčky přes HTTPS:
- sudo apt install apt-transport-https ca-certificates curl software-properties-common
Poté do svého systému přidejte klíč GPG pro oficiální úložiště Docker:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Přidejte úložiště Docker do zdrojů APT:
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Aktualizujte svůj stávající seznam balíčků znovu, aby bylo přidání rozpoznáno:
- sudo apt update
Ujistěte se, že se chystáte nainstalovat z úložiště Docker namísto výchozího úložiště Ubuntu:
- apt-cache policy docker-ce
Uvidíte výstup takto, i když číslo verze pro Docker se může lišit:
Výstup zásady apt-cache docker-cedocker-ce:
Installed: (none)
Candidate: 5:20.10.14~3-0~ubuntu-jammy
Version table:
5:20.10.14~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
5:20.10.13~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
Všimněte si, že docker-ce
není nainstalováno, ale kandidát na instalaci pochází z úložiště Docker pro Ubuntu 22.04 (jammy
).
Nakonec nainstalujte Docker:
- sudo apt install docker-ce
Nyní by měl být nainstalován Docker, spuštěn démon a povoleno spuštění procesu při spouštění. Zkontrolujte, zda běží:
- sudo systemctl status docker
Výstup by měl být podobný následujícímu, což ukazuje, že služba je aktivní a běží:
Output● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 7854 (dockerd)
Tasks: 7
Memory: 38.3M
CPU: 340ms
CGroup: /system.slice/docker.service
└─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Instalací Dockeru nyní získáte nejen službu Docker (démon), ale také docker
nástroj příkazového řádku nebo klient Docker. Prozkoumáme, jak používat docker
příkaz dále v tomto tutoriálu.
Krok 2 – Provedení příkazu Docker bez sudo (volitelné)
Ve výchozím nastavení docker
příkaz lze spustit pouze root uživatelem nebo uživatelem v ukotvitelném panelu skupina, která se automaticky vytvoří během procesu instalace Dockeru. Pokud se pokusíte spustit docker
příkaz bez předpony sudo
nebo aniž byste byli v dockeru skupině, získáte výstup podobný tomuto:
Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
Pokud se chcete vyhnout psaní sudo
kdykoli spustíte docker
přidejte své uživatelské jméno do docker
skupina:
- sudo usermod -aG docker ${USER}
Chcete-li použít nové členství ve skupině, odhlaste se ze serveru a znovu se přihlaste nebo zadejte následující:
- su - ${USER}
Budete vyzváni k zadání hesla uživatele, abyste mohli pokračovat.
Potvrďte, že váš uživatel je nyní přidán do dockeru seskupit zadáním:
- groups
Outputsammy sudo docker
Pokud potřebujete přidat uživatele do docker
skupině, ve které nejste přihlášeni, deklarujte toto uživatelské jméno explicitně pomocí:
- sudo usermod -aG docker username
Zbytek tohoto článku předpokládá, že používáte docker
příkaz jako uživatel v dockeru skupina. Pokud nechcete, přidejte před příkazy sudo
.
Pojďme prozkoumat docker
příkaz další.
Krok 3 — Použití příkazu Docker
Pomocí docker
spočívá v předání řetězce voleb a příkazů následovaných argumenty. Syntaxe má tento tvar:
- docker [option] [command] [arguments]
Chcete-li zobrazit všechny dostupné dílčí příkazy, zadejte:
- docker
Od verze Dockeru 20.10.14 , úplný seznam dostupných dílčích příkazů obsahuje:
Output attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Chcete-li zobrazit možnosti dostupné pro konkrétní příkaz, zadejte:
- docker docker-subcommand --help
Chcete-li zobrazit systémové informace o Dockeru, použijte:
- docker info
Pojďme prozkoumat některé z těchto příkazů. Začneme prací s obrázky.
Krok 4 — Práce s obrázky Docker
Kontejnery Docker jsou vytvořeny z obrazů Docker. Ve výchozím nastavení Docker stahuje tyto obrázky z Docker Hub, registru Docker spravovaného společností Docker, která stojí za projektem Docker. Kdokoli může hostovat své obrázky Docker na Docker Hub, takže většina aplikací a distribucí Linuxu, které budete potřebovat, bude mít obrázky hostované tam.
Chcete-li zkontrolovat, zda můžete přistupovat k obrázkům a stahovat je z Docker Hub, zadejte:
- docker run hello-world
Výstup bude indikovat, že Docker funguje správně:
OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Docker zpočátku nemohl najít hello-world
image lokálně, takže obrázek stáhl z Docker Hub, což je výchozí úložiště. Jakmile se obrázek stáhne, Docker vytvořil kontejner z obrázku a aplikace v kontejneru byla spuštěna a zobrazila zprávu.
Obrázky dostupné na Docker Hub můžete vyhledávat pomocí docker
pomocí příkazu search
dílčí příkaz. Chcete-li například vyhledat obrázek Ubuntu, zadejte:
- docker search ubuntu
Skript projde Docker Hub a vrátí seznam všech obrázků, jejichž název odpovídá vyhledávacímu řetězci. V tomto případě bude výstup podobný tomuto:
OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 14048 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
neurodebian NeuroDebian provides neuroscience research s… 88 [OK]
open-liberty Open Liberty multi-architecture images based… 51 [OK]
...
V OFFICIAL OK označuje image vytvořenou a podporovanou společností, která za projektem stojí. Jakmile identifikujete obrázek, který chcete použít, můžete si jej stáhnout do počítače pomocí pull
dílčí příkaz.
Provedením následujícího příkazu stáhněte oficiální ubuntu
obrázek do počítače:
- docker pull ubuntu
Uvidíte následující výstup:
OutputUsing default tag: latest
latest: Pulling from library/ubuntu
e0b25ef51634: Pull complete
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Po stažení obrázku můžete spustit kontejner pomocí staženého obrázku pomocí příkazu run
dílčí příkaz. Jak jste viděli u hello-world
například, pokud nebyl obrázek stažen při docker
se provádí pomocí run
podpříkaz, klient Docker nejprve stáhne obraz a poté pomocí něj spustí kontejner.
Chcete-li zobrazit obrázky, které byly staženy do počítače, zadejte:
- docker images
Výstup bude vypadat podobně jako následující:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kB
Jak uvidíte dále v tomto tutoriálu, obrázky, které používáte ke spouštění kontejnerů, lze upravit a použít ke generování nových obrázků, které pak lze nahrát (posunout je technický termín) do Docker Hub nebo jiných registrů Docker.
Podívejme se podrobněji na to, jak spustit kontejnery.
Krok 5 – Spuštění kontejneru Docker
hello-world
kontejner, který jste spustili v předchozím kroku, je příkladem kontejneru, který se spustí a ukončí po odeslání testovací zprávy. Kontejnery mohou být mnohem užitečnější a mohou být interaktivní. Koneckonců, jsou podobné virtuálním strojům, jen jsou šetrnější ke zdrojům.
Jako příklad spustíme kontejner pomocí nejnovějšího obrazu Ubuntu. Kombinace -i a -t přepínače vám umožňují interaktivní shell přístup do kontejneru:
- docker run -it ubuntu
Příkazový řádek by se měl změnit tak, aby odrážel skutečnost, že nyní pracujete uvnitř kontejneru, a měl by mít tento tvar:
Outputroot@d9b100f2f636:/#
Poznamenejte si ID kontejneru v příkazovém řádku. V tomto příkladu je to d9b100f2f636
. Toto ID kontejneru budete později potřebovat k identifikaci kontejneru, až jej budete chtít odstranit.
Nyní můžete v kontejneru spustit libovolný příkaz. Například aktualizujme databázi balíčků uvnitř kontejneru. Před žádným příkazem nemusíte předponu sudo
, protože v kontejneru působíte jako kořen uživatel:
- apt update
Poté do něj nainstalujte libovolnou aplikaci. Pojďme nainstalovat Node.js:
- apt install nodejs
Tím se nainstaluje Node.js do kontejneru z oficiálního úložiště Ubuntu. Po dokončení instalace ověřte, zda je nainstalován soubor Node.js:
- node -v
Číslo verze se zobrazí ve vašem terminálu:
Outputv12.22.9
Jakékoli změny provedené uvnitř kontejneru se vztahují pouze na tento kontejner.
Chcete-li kontejner opustit, zadejte exit
na výzvu.
Dále se podíváme na správu kontejnerů v našem systému.
Krok 6 — Správa kontejnerů Docker
Po chvíli používání Dockeru budete mít v počítači mnoho aktivních (spuštěných) a neaktivních kontejnerů. Chcete-li zobrazit aktivní , použijte:
- docker ps
Uvidíte výstup podobný následujícímu:
OutputCONTAINER ID IMAGE COMMAND CREATED
V tomto tutoriálu jste spustili dva kontejnery; jeden z hello-world
obrázek a další z ubuntu
obraz. Oba kontejnery již neběží, ale stále existují ve vašem systému.
Chcete-li zobrazit všechny kontejnery – aktivní i neaktivní, spusťte docker ps
pomocí -a
přepínač:
- docker ps -a
Uvidíte výstup podobný tomuto:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" About a minute ago Exited (0) 7 seconds ago dazzling_taussig
587000e49d53 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago adoring_kowalevski
Chcete-li zobrazit nejnovější kontejner, který jste vytvořili, předejte mu -l
přepínač:
- docker ps -l
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 3 minutes ago Exited (0) 2 minutes ago dazzling_taussig
Chcete-li spustit zastavený kontejner, použijte docker start
, za kterým následuje ID kontejneru nebo název kontejneru. Začněme kontejner založený na Ubuntu s ID 1c08a7a0d0e4
:
- docker start 1c08a7a0d0e4
Kontejner se spustí a můžete použít docker ps
abyste viděli jeho stav:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 6 minutes ago Up 8 seconds dazzling_taussig
Chcete-li zastavit běžící kontejner, použijte docker stop
a za ním ID nebo název kontejneru. Tentokrát použijeme název, který Docker kontejneru přidělil, což je dazzling_taussig
:
- docker stop dazzling_taussig
Jakmile se rozhodnete, že již kontejner nepotřebujete, odeberte jej pomocí docker rm
příkaz, opět pomocí ID kontejneru nebo názvu. Použijte docker ps -a
příkaz k nalezení ID kontejneru nebo názvu kontejneru spojeného s hello-world
obrázek a odstraňte jej.
- docker rm adoring_kowalevski
Můžete založit nový kontejner a pojmenovat jej pomocí --name
přepínač. Můžete také použít --rm
přepnutím vytvoříte kontejner, který se po zastavení sám odstraní. Viz docker run help
pro více informací o těchto a dalších možnostech.
Kontejnery lze přeměnit na obrázky, které můžete použít k vytvoření nových kontejnerů. Podívejme se, jak to funguje.
Krok 7 — Odeslání změn v kontejneru do obrázku dockeru
Když spustíte obraz Dockeru, můžete vytvářet, upravovat a odstraňovat soubory stejně jako u virtuálního počítače. Změny, které provedete, se budou vztahovat pouze na tento kontejner. Můžete jej spustit a zastavit, ale jakmile jej zničíte pomocí docker rm
příkazu, budou změny navždy ztraceny.
Tato část ukazuje, jak uložit stav kontejneru jako nový obrázek Docker.
Po instalaci Node.js do kontejneru Ubuntu máte nyní kontejner spuštěný s obrazem, ale kontejner se liší od obrazu, který jste použili k jeho vytvoření. Možná však budete chtít později znovu použít tento kontejner Node.js jako základ pro nové obrázky.
Poté změny potvrďte do nové instance obrazu Docker pomocí následujícího příkazu.
- docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
-m switch je pro zprávu odevzdání, která vám i ostatním pomůže zjistit, jaké změny jste provedli, zatímco -a se používá k určení autora. container_id
je ten, který jste si poznamenali dříve ve výukovém programu, když jste spustili interaktivní relaci Docker. Pokud jste nevytvořili další úložiště na Docker Hub, repository
je obvykle vaše uživatelské jméno Docker Hub.
Například pro uživatele sammy , s ID kontejneru d9b100f2f636
, příkaz by byl:
- docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
Když se zavážete obrázek, nový obrázek se uloží lokálně ve vašem počítači. Později v tomto tutoriálu se naučíte, jak poslat obrázek do registru Dockeru, jako je Docker Hub, aby k němu měli ostatní přístup.
Opětovným zobrazením obrázků Dockeru se zobrazí nový obrázek i starý obrázek, ze kterého byl odvozen:
- docker images
Uvidíte výstup takto:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
...
V tomto příkladu ubuntu-nodejs
je nový obrázek, který byl odvozen z existujícího ubuntu
obrázek z Docker Hub. Rozdíl ve velikosti odráží provedené změny. A v tomto příkladu byla změna v tom, že byl nainstalován NodeJS. Takže až budete příště potřebovat spustit kontejner pomocí Ubuntu s předinstalovaným NodeJS, stačí použít nový obrázek.
Můžete také vytvářet obrázky z Dockerfile
, která vám umožní automatizovat instalaci softwaru do nového obrazu. To je však mimo rozsah tohoto návodu.
Nyní sdílíme nový obrázek s ostatními, aby z něj mohli vytvářet kontejnery.
Krok 8 – Odeslání obrázků Dockeru do úložiště Docker
Dalším logickým krokem po vytvoření nového obrázku z existujícího obrázku je jeho sdílení s několika vybranými přáteli, celým světem na Docker Hub nebo jiném Docker registru, ke kterému máte přístup. Chcete-li odeslat obrázek do Docker Hub nebo jiného registru Docker, musíte tam mít účet.
Chcete-li odeslat svůj obrázek, nejprve se přihlaste do Docker Hub.
- docker login -u docker-registry-username
Budete vyzváni k ověření pomocí hesla Docker Hub. Pokud jste zadali správné heslo, ověření by mělo být úspěšné.
Poznámka: Pokud se vaše uživatelské jméno v registru Docker liší od místního uživatelského jména, které jste použili k vytvoření bitové kopie, budete muset svůj obrázek označit vaším uživatelským jménem v registru. Pro příklad uvedený v posledním kroku byste napsali:
- docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
Potom můžete vložit svůj vlastní obrázek pomocí:
- docker push docker-registry-username/docker-image-name
Chcete-li odeslat ubuntu-nodejs
obrázek sammy repository, příkaz by byl:
- docker push sammy/ubuntu-nodejs
Dokončení procesu může při nahrávání obrázků nějakou dobu trvat, ale po dokončení bude výstup vypadat takto:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...
Po odeslání obrázku do registru by měl být uveden na hlavním panelu vašeho účtu, jako je obrázek níže.
Pokud pokus o push způsobí chybu tohoto druhu, pravděpodobně jste se nepřihlásili:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
Přihlaste se pomocí docker login
a opakujte pokus o zatlačení. Poté ověřte, že existuje na stránce vašeho úložiště Docker Hub.
Nyní můžete použít docker pull sammy/ubuntu-nodejs
přetáhněte obrázek do nového počítače a použijte jej ke spuštění nového kontejneru.
Závěr
V tomto kurzu jste nainstalovali Docker, pracovali s obrazy a kontejnery a poslali upravený obraz do Docker Hub. Nyní, když znáte základy, prozkoumejte další výukové programy Docker v komunitě DigitalOcean.