Docker:Úvod
Docker je otevřený nástroj pro správu platforem pro Linux Containers. Poskytuje vývojářům a systémovým administrátorům prostředky k sestavování a balení aplikací do lehkých kontejnerů. Docker se skládá z následujících součástí:
- Docker Engine – Přenosný, lehký běhový a balicí nástroj
- Docker Hub – Cloudová služba pro sdílení aplikací a automatizaci pracovních postupů
Docker se používá k vytváření kontejnerů aplikací založených na obrázcích. Kontejnery založené na obrázcích zabalí aplikaci s jednotlivými runtime zásobníky do jednoho kontejneru. Díky tomu je kontejner nezávislý na hostitelském operačním systému a verzi jádra. Díky tomu můžete stejnou aplikaci beze změny provozovat na noteboocích, virtuálních strojích datových center a jakémkoli cloudu. Tento kontejner můžete přenést na jiný počítač, na kterém běží Docker a aplikace spouští bez problémů s kompatibilitou.
Následuje seznam dalších výhod spouštění aplikací v kontejnerech Docker:
- Obrázky Dockeru obsahují pouze obsah potřebný ke spuštění aplikace, takže jsou menší než virtuální stroje, které vyžadují celý operační systém.
- Kontejner Docker běží rychleji než aplikace, která zahrnuje režii celého virtuálního počítače.
- Kontejner Docker obsahuje vlastní síťová rozhraní, souborový systém a paměť, což umožňuje aplikaci běžící v kontejneru izolovat a zabezpečit od ostatních procesů na hostitelském počítači.
Obrázky dockeru
Kontejnery Docker jsou vytvořeny z obrazů Docker. Vytvoříte kontejnery Docker pro spouštění aplikací z těchto obrazů Docker. Následující příklad vytvoří kontejner Docker s názvem „test“ z obrazu Docker s názvem centos:7“ a spustí /bin/bash.
# docker create --name test centos:7 /bin/bash Unable to find image 'centos:7' locally Trying to pull repository docker.io/library/centos ... 7: Pulling from docker.io/library/centos 469cfcc7a4b3: Pull complete Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:7 a79ce1655f2ca17c7ac8cc15f307ba0bb438fbebd4595568df3433dd5ff79b73
Obrázky jsou šablony pouze pro čtení, které mohou obsahovat celý operační systém s nainstalovanými službami a dalšími aplikacemi. Docker poskytuje možnosti pro vytváření obrázků nebo aktualizaci stávajících obrázků. Obrazy Dockeru můžete vytvořit z příkazového řádku nebo můžete uložit pokyny k vytvoření obrazu do souboru Docker. Docker přečte tento soubor Docker a provede pokyny, když zahájíte sestavení obrazu Docker.
Každý obrázek začíná základním obrázkem (například centos). Každý obraz Docker se skládá z řady vrstev, které jsou vytvořeny z těchto základních obrazů. Každá instrukce v Dockerfile vytvoří v obrázku novou vrstvu. Pokaždé, když provedete změnu obrázku Dockeru, aktualizuje se nebo přidá pouze tato vrstva. Docker používá unionfs ke spojení těchto vrstev do jednoho obrázku. Služba systému souborů unionfs umožňuje překrytí souborů a adresářů samostatných systémů souborů do jednoho systému souborů.
Po vytvoření bitové kopie Dockeru můžete obrázky sdílet tak, že je uložíte do registrů Dockeru. Tyto registry mohou být soukromé nebo veřejné. Docker Hub je veřejný registr Docker, který funguje jako platforma Software-as-a-Service pro sdílení a správu kontejnerů Docker.
Jak nainstalovat docker na CentOS / RHEL / FedoraJak nainstalovat Docker na Mac
Registr Docker Hub
Registr Docker Hub hostuje aplikace jako obrazy Dockeru a poskytuje služby, které vám umožňují vytvářet a spravovat prostředí Docker. Registr Docker Hub je vlastněn a spravován společností Docker, Inc. a nachází se na adrese https://registry.hub.docker.com/.
Docker Hub poskytuje řadu úložišť a každé úložiště může obsahovat řadu obrázků. Kromě hostování obrázků Docker poskytuje Docker Hub služby, jako je ověřování uživatelů, automatizované vytváření obrázků a nástroje pro pracovní postupy a integrace s GitHub a BitBucket. Chcete-li používat tyto služby Docker, musíte si vytvořit účet Docker Hub. Účet si můžete vytvořit na https://hub.docker.com/account/signup/. Účet můžete vytvořit také z příkazového řádku pomocí následujícího příkazu:
# docker loginJak vytvořit veřejné/soukromé úložiště v Docker Hub a připojit jej vzdáleně pomocí příkazového řádku
Můžete vyhledávat obrázky Docker a stahovat (stahovat) obrázky z Docker Hub, aniž byste měli účet. Chcete-li odeslat (nahrát) obrázky, zanechat komentáře k obrázku nebo úložišti a používat všechny dostupné služby Docker Hub, potřebujete účet Docker Hub.
Instalace a spuštění Dockeru
Instalace a spuštění služby docker je snadný úkol. K instalaci balíčku docker můžete použít následující příkaz:
# yum install docker
Pomocí příkazu systemctl povolte a spusťte službu docker.
# systemctl enable docker # systemctl start docker
Ve výchozím nastavení používá Docker jako ovladač úložiště devicemapper. S RedHat Linux 7 můžete nakonfigurovat Docker Engine tak, aby používal Btrfs. To vám umožní využít funkce snapshotu Btrfs. Následující příkaz zobrazí všechny soubory nainstalované z balíčku docker:
# rpm -ql docker /etc/docker /etc/docker/certs.d /etc/docker/certs.d/redhat.com /etc/docker/certs.d/redhat.com/redhat-ca.crt /etc/docker/certs.d/redhat.io /etc/docker/certs.d/redhat.io/redhat-ca.crt ...
Můžete vidět, že kromě binárních souborů dockeru a konfiguračních souborů je pro všechny příkazy dockeru nainstalována dokumentace a manuálové stránky. Adresář /var/lib/docker je prázdný, dokud se nespustí služba docker. Následující řada příkazů zobrazuje obsah adresáře před a po spuštění dockeru.
# ls /var/lib/docker # systemctl enable docker # systemctl start docker # ls /var/lib/docker containers graph linkgraph.db tmp volumes devicemapper init repositories-devicemapper trust
Ukotvitelný nástroj
Rozhraní příkazového řádku dockeru má více než 30 příkazů. Seznam příkazů naleznete na manuálové stránce dockeru. Příkaz docker info zobrazí systémové informace o instalaci Dockeru. Další informace najdete na manuálové stránce docker-info. Všimněte si, že výchozí ovladač úložiště je devicemapper a že data a metadata jsou uložena v zařízeních smyčky:/dev/loop0 a /dev/loop1.
# docker info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 1.13.1 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: false Native Overlay Diff: true Logging Driver: journald ...
Jiní uživatelé než root mohou spouštět příkazy dockeru, pokud je přidáte do skupiny dockerů a překonfigurujete službu dockeru.
Vyhledávání obrázků v registru Docker Hub
Pomocí příkazu docker search vyhledejte obrázky v centru Docker. Níže je uveden výstup příkazu „docker search“:
# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 52 [OK] docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK] ...
Tento příkaz vyhledá v Docker Hub obrázky „centos“. Výstup obsahuje název úložiště/obrázku, popis, počet udělených hvězdiček, zda je obrázek oficiální a zda je automatizovaný. Sloupec názvu je v následujícím tvaru a může zahrnovat obsahující úložiště pro poskytnutí jedinečné identifikace:
[repository_name]/[image_name]
Hvězdy měří popularitu obrázků. Kdokoli s účtem Docker Hub může obrázek označit hvězdičkou, pokud se mu líbí. Následující příklad vyhledává obrázky „centos“ s alespoň 3 hvězdičkami:
# docker search -s 3 centos Flag --stars has been deprecated, use --filter=stars=3 instead INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] ...
„Oficiální“ úložiště je certifikováno dodavatelem nebo přispěvatelem do Dockeru. „Automatický“ obraz je vytvořen procesem automatického sestavení Docker Hub.
Stahování obrázků z Docker Hub
Pomocí příkazu „docker pull“ stáhněte obrázek nebo úložiště z registru Docker Hub do místního systému. Následující příklad stáhne dolů centos:latest image.
# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:latest
Pomocí příkazu „docker images“ zobrazíte seznam obrázků uložených v místním úložišti Docker.
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB
Každý obrázek v úložišti je rozlišen TAG a IMAGE ID.
Následující ukazuje umístění konfiguračních souborů dockeru.
# cd /var/lib/docker/ # ll total 4 drwx------. 3 root root 77 Apr 21 07:57 containers drwx------. 3 root root 21 Apr 21 07:56 image drwxr-x---. 3 root root 18 Apr 21 07:56 network drwx------. 6 root root 4096 Apr 21 07:57 overlay2 drwx------. 4 root root 30 Apr 21 07:56 plugins drwx------. 2 root root 6 Apr 21 07:56 swarm drwx------. 2 root root 6 Apr 21 07:57 tmp drwx------. 2 root root 6 Apr 21 07:56 trust drwx------. 2 root root 24 Apr 21 07:56 volumesJak zobrazit / vyhledat / stáhnout obrázky dockeru v systému Linux
Spuštění aplikace uvnitř kontejneru
Ke spuštění aplikace v kontejneru použijte příkaz docker run. Tento příkaz spustí proces s vlastním souborovým systémem, vlastní sítí a vlastním izolovaným procesním stromem. Následující syntaxe nezahrnuje všechny dostupné možnosti příkazu:
# docker run [OPTION...] IMAGE [COMMMAND] {ARG...]
IMAGE, který spouští proces, může definovat výchozí hodnoty související s procesem, který se má spustit v kontejneru, síť a další, ale možnosti spuštění dockeru přepíší nastavení v IMAGE. Pokud není IMAGE místně dostupný, docker run natáhne obrázek stejným způsobem jako příkaz docker pull, než spustí kontejner v IMAGE.
Níže jsou uvedeny dva příklady použití docker run. První příklad používá obraz „centos“, který již existuje na místním počítači. Docker použije obrázek k vytvoření nového prostředí CentOS a poté spustí příkaz echo, aby zobrazil „Hello“.
# docker run centos /bin/echo "Hello" Hello
Druhý příklad používá obraz fedory, který není přítomen v místním systému. Docker stáhne obraz z Docker Hub a poté jej použije k vytvoření nového prostředí Fedory a spustí příkaz echo.
# docker run fedora /bin/echo "Hello" Unable to find image 'fedora:latest' locally Trying to pull repository docker.io/library/fedora ... latest: Pulling from docker.io/library/fedora 2176639d844b: Pull complete Digest: sha256:ec588fc80b05e19d3006bf2e8aa325f0a2e2ff1f609b7afb39176ca8e3e13467 Status: Downloaded newer image for docker.io/fedora:latest Hello
V obou příkladech se kontejnery Docker zastaví poté, co se na obrazovce zobrazí „Ahoj“. Pomocí příkazu docker ps vypište kontejnery a žádné kontejnery se nezobrazí:
# docker ps
Je to proto, že „docker ps“ zobrazuje pouze aktuálně spuštěné kontejnery. Chcete-li zobrazit všechny kontejnery včetně zastavených, použijte příkaz „docker ps -a“.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b772ea59c92 fedora "/bin/echo Hello" 25 seconds ago Exited (0) 23 seconds ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" About a minute ago Exited (0) About a minute ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
Příkaz docker images ukazuje, že „nejnovější“ obrázek z úložiště „fedora“ byl stažen z Docker Hub při použití příkazu docker run:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB docker.io/fedora latest 9110ae7f579f 6 weeks ago 235 MB
Spuštění interaktivního kontejneru Docker
Použijte –t a –i možnosti pomocí příkazu docker run ke spuštění interaktivního kontejneru. Tyto možnosti jsou popsány:
- -t :Přidělte pseudo-tty a připojte jej k STDIN (standardní vstup) kontejneru
- -i :Ponechejte STDIN kontejneru otevřené
Níže jsou uvedeny dva příklady použití příkazů spuštění dockeru s volbami –t a –i. V obou příkladech běží CentOS Linux 7.4 na místním systému:
# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
První příklad používá obrázek „centos:7“. Docker použije obrázek k vytvoření nového prostředí CentOS a poté spustí příkaz bash shell. Verze operačního systému tohoto obrázku je CentOS 7.
# docker run -t -i centos:7 /bin/bash [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Druhý příklad používá obraz ubuntu. Protože nebyl zadán žádný konkrétní obrázek, Docker použije „nejnovější“ obrázek Ubuntu k vytvoření nového prostředí Ubuntu a poté spustí příkaz bash shell. Verze operačního systému tohoto obrázku je Ubuntu 16.04.4. Protože obraz ubuntu není lokálně dostupný, docker si jej nejprve stáhne z úložiště a poté jej spustí.
# docker run -t -i ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu d3938036b19c: Pull complete a9b30c108bda: Pull complete 67de21feec18: Pull complete 817da545be2b: Pull complete d967c497ce23: Pull complete Digest: sha256:9ee3b83bcaa383e5e3b657f042f4034c92cdd50c03f73166c145c9ceaea9ba7c Status: Downloaded newer image for docker.io/ubuntu:latest
root@9ee24718262c:/# cat /etc/os-release NAME="Ubuntu" VERSION="16.04.4 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.4 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Interaktivní kontejner můžete opustit pomocí příkazu exit nebo stisknutím kláves CTRL + D.
Výpis kontejnerů a zobrazení protokolů kontejnerů
Pomocí příkazu docker ps vypíšete informace o kontejnerech Docker. Ve výchozím nastavení jsou uvedeny pouze spuštěné kontejnery. Zahrňte –a pomocí příkazu docker ps pro zobrazení všech kontejnerů. Výstup obsahuje jedinečné ID kontejneru a jedinečný název kontejneru, které se automaticky vygenerují při vytvoření kontejneru. Výstup příkazu docker ps také zahrnuje obrázek, který byl použit k vytvoření kontejneru, příkaz spuštěný v kontejneru a informace o stavu. Informace o stavu zahrnují, kdy byl kontejner vytvořen a jak dlouho byl kontejner spuštěn.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ee24718262c ubuntu "/bin/bash" 3 minutes ago Exited (127) 2 seconds ago modest_turing b3e1316c4653 centos:7 "/bin/bash" 6 minutes ago Exited (0) 4 minutes ago gracious_pare 7b772ea59c92 fedora "/bin/echo Hello" 18 minutes ago Exited (0) 18 minutes ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" 19 minutes ago Exited (0) 19 minutes ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
Příkaz docker logs se podívá do kontejneru a vrátí svůj standardní výstup. Jako argument příkazu můžete použít ID kontejneru nebo název kontejneru.
# docker logs b3e1316c4653 [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@b3e1316c4653 /]# exit exit
Ve výše uvedeném příkladu příkaz docker logs ukazuje, že v kontejneru byl proveden příkaz „cat /etc/redhat-release“. Příkazy docker ps a docker logs je třeba spouštět z vnějšku kontejneru, tedy z jiného okna terminálu.
Zobrazení všech informací o kontejneru nebo obrázku
Pomocí příkazu docker inspect zobrazíte všechny informace dostupné pro kontejner nebo obrázek. Následující příklad ukazuje některé zobrazené informace. Použijte –f {{.section.subsection}} možnost zobrazení konkrétní informace. Následující příklad zobrazuje pouze nastavení sítě:
# docker inspect -f {{.NetworkSettings}} modest_turing {{ 98e04ea6d68753022ae2212b06b1514323927a1ed117448bc70ea3fa9a2f4a06 false 0 map[] /var/run/docker/netns/98e04ea6d687 [] []} { 0 0 } map[bridge:0xc4200c0300]}
Následující příklad zobrazuje adresu IP:
# docker inspect -f {{.NetworkSettings.IPAddress}} modest_turing 172.17.0.10
Následující příklad zobrazuje ID procesu:
# docker inspect -f {{.State.Pid}} modest_turing 7181
Následující příklad zobrazuje příkaz spuštěný v kontejneru:
# docker inspect -f {{.Config.Cmd}} modest_turing [/bin/bash]
Pokud chcete zobrazit všechny možnosti/vlastnosti kontejneru, nepoužívejte žádnou možnost s „docker inspect“:
# docker inspect modest_turing [ { "Id": "9ee24718262c9f7ed3320019163a8b1b2bb1bccc83eb362a5512a74eaa4ad57f", "Created": "2018-04-21T12:22:21.983441857Z", "Path": "/bin/bash", "Args": [], "State": { ....
Toto bude pěkně dlouhý výstup zobrazující všechny vlastnosti kontejneru.
Vytvoření nového kontejneru
Příkaz docker run spustí proces v novém kontejneru. Můžete také použít příkaz docker create k vytvoření kontejneru, který můžete spustit později. Syntaxe a dostupné možnosti pro vytvoření dockeru jsou podobné syntaxi spuštění dockeru.
Níže uvedený příklad vytvoří nový kontejner s názvem „geeklab“ z obrazu centos:7 a po spuštění spustí příkaz bash shell. Název kontejneru se vygeneruje automaticky, pokud vynecháte možnost –name.
# docker create -t -i --name geeklab centos:7 /bin/bash 667fd40faeb69113d035f08e5a910275a8463aa2a6a0796833f590e878732e17
Výstupem příkazu je velmi dlouhé jedinečné ID kontejneru. Kontejner se nespustí okamžitě, jak ukazuje příkaz docker ps, který ve výchozím nastavení zobrazuje pouze spuštěné kontejnery:
# docker ps
Chcete-li zobrazit všechny kontejnery, musíte spustit „docker ps -a“. Příklad převádí výstup do grep a prohledává část ID kontejneru:
# docker ps -a | grep 667fd 667fd40faeb6 centos:7 "/bin/bash" About a minute ago Created geeklab
Spuštění, zastavení a odebrání kontejneru
Použijte „start dockeru ” ke spuštění existujícího kontejneru. Použijte –a a –i možnosti připojit ke kontejneru STDIN (standardní vstup), STDOUT (standardní výstup) a STDERR (standardní chyba) aktuálního shellu a také způsobit předání všech signálů do kontejneru.
# docker start -a -i geeklab [root@667fd40faeb6 /]#
Zevnitř kontejneru použijte příkaz exit nebo CTRL-d k zastavení kontejneru. Z vnějšku kontejneru, tedy z jiného okna terminálu, použijte k zastavení kontejneru příkaz docker stop.
# docker stop geeklab
Použijte „docker rm ” k odstranění kontejneru. Jedním příkazem můžete odstranit více kontejnerů. Použijte –f možnost odstranění běžícího kontejneru.
# docker rm geeklab geeklab
Všechny tři tyto příkazy dockeru přijímají jako argument buď ID kontejneru, nebo název kontejneru.
Příkaz docker rm odebere kontejner. K odstranění obrázku použijte příkaz docker rmi:
# docker rmi [IMAGE]Jak zobrazit / spustit / zastavit / odstranit kontejnery ukotvitelného panelu
Spouštění dalších příkazů ve spuštěném kontejneru
Pomocí příkazu docker exec spusťte příkaz ve spuštěném kontejneru. Podobně jako u příkazu docker run zahrňte volby –t a –i pro spuštění interaktivního příkazu. Jako argument uveďte buď ID kontejneru, nebo název kontejneru.
V následujícím příkladu spustí příkaz docker exec nový interaktivní bash shell v kontejneru „host“:
# docker exec -t -i geeklab /bin/bash [root@68b5b713c37b /]#
Následující příklad používá příkaz docker exec ke spuštění služby sshd v kontejneru „geeklab“. V kontejneru „geeklab“ běží CentOS 6.4. V tomto příkladu nejsou volby -t a -i potřeba.
# docker exec guest service sshd start Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ]
Služba sshd se spustí na kontejneru a řízení se vrátí iniciujícímu hostitelskému systému.