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

Průvodce pro začátečníky The Docker World

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 / Fedora
Jak 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 login
Jak 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 volumes
Jak 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.


Docker
  1. Průvodce linuxovým terminálem pro začátečníky

  2. Rozdíl mezi CMD a ENTRYPOINT v Docker Images

  3. Úvod do Docker Images

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

  2. Rychlý průvodce používáním Docker Compose

  3. Jak upravit obrázky Docker

  1. Průvodce LVM pro začátečníky

  2. Průvodce SELinuxem pro začátečníky

  3. Jak získat seznam závislých podřízených obrázků v Dockeru?