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

Jak používat Docker Compose

<šablona x-if=visible><šablona x-if=$isMobile()>

Co je Docker Compose?

Pokud vaše aplikace Docker obsahuje více než jeden kontejner (například webový server a databáze běžící v samostatných kontejnerech), je vytváření, spouštění a připojování kontejnerů ze samostatných souborů Dockerfiles těžkopádné a časově náročné. Docker Compose tento problém řeší tím, že vám umožňuje použít soubor YAML k definování aplikací pro více kontejnerů. Můžete nakonfigurovat tolik kontejnerů, kolik chcete, jak by měly být sestaveny a propojeny a kde by se měla ukládat data. Po dokončení souboru YAML můžete spustit jediný příkaz k vytvoření, spuštění a konfiguraci všech kontejnerů.

Tato příručka vysvětlí, jak docker-compose.yml soubor je uspořádán a ukazuje, jak jej používat k vytvoření několika základních konfigurací aplikace.

Poznámka Obecně všechny kontejnery v aplikaci vytvořené pomocí Docker Compose poběží na stejném hostiteli. Správa kontejnerů běžících na různých hostitelích obvykle vyžaduje další nástroj, jako je Docker Swarm nebo Kubernetes.

Než začnete

Instalovat Docker CE

Abyste mohli postupovat podle kroků v této příručce, budete potřebovat Linode s nainstalovaným Docker CE.

Chcete-li nainstalovat Docker CE (Community Edition), postupujte podle pokynů v jedné z níže uvedených příruček:

  • Instalace a používání Dockeru na Ubuntu a Debian

  • Instalace a používání Dockeru na CentOS a Fedoře

Úplné pokyny pro ještě více distribucí Linuxu naleznete v části Instalace Docker Engine v oficiální dokumentaci Dockeru.

Instalovat Docker Compose

  1. Stáhněte si nejnovější verzi Docker Compose. Zkontrolujte stránku s vydáními a nahraďte 1.25.4 v příkazu níže s verzí označenou jako Poslední vydání :

     sudo curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  2. Nastavit oprávnění souboru:

     sudo chmod +x /usr/local/bin/docker-compose
    

Základní použití

V této části se podíváme na ukázkový soubor Docker Compose převzatý z oficiální dokumentace Docker.

  1. Otevřete docker-compose.yml v textovém editoru a přidejte následující obsah:

    Soubor:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    version: '3'
    
    services:
       db:
         image: mysql:5.7
         volumes:
           - db_data:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: somewordpress
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
    
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         ports:
           - "8000:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
    volumes:
        db_data:
  2. Uložte soubor a spusťte Docker Compose ze stejného adresáře:

    docker-compose up -d
    

    Tím se vytvoří a spustí db a wordpress kontejnery. Stejně jako při spuštění jednoho kontejneru pomocí docker run , -d flag spustí kontejnery v odděleném režimu.

  3. Nyní máte na svém hostiteli spuštěný kontejner WordPress a kontejner MySQL. Přejděte na 192.0.8.1:8000/wordpress ve webovém prohlížeči, abyste viděli svou nově nainstalovanou aplikaci WordPress. Můžete také použít docker ps k dalšímu prozkoumání výsledné konfigurace:

    docker ps
    
  4. Zastavte a vyjměte nádoby:

    docker-compose down
    

Syntaxe nového souboru

docker-compose.yml soubor je uspořádán do čtyř sekcí:

Směrnice Použít
verze Určuje verzi syntaxe souboru Compose. Tato příručka bude používat verzi 3.
služby V Dockeru je služba názvem pro „Kontejner ve výrobě“. Tato část definuje kontejnery, které budou spuštěny jako součást instance Docker Compose.
sítě Tato část se používá ke konfiguraci sítě pro vaši aplikaci. Můžete změnit nastavení výchozí sítě, připojit se k externí síti nebo definovat sítě pro konkrétní aplikace.
svazky Připojí k hostitelskému počítači propojenou cestu, kterou může kontejner použít.

Většina této příručky se zaměří na nastavení kontejnerů pomocí services sekce. Zde jsou některé z běžných direktiv používaných k nastavení a konfiguraci kontejnerů:

Směrnice Použít
obrázek Nastaví obrázek, který bude použit k sestavení kontejneru. Použití této direktivy předpokládá, že zadaný obrázek již existuje buď na hostiteli nebo na onDocker Hub.
sestavit Tuto direktivu lze použít místo image . Určuje umístění souboru Dockerfile, který bude použit k vytvoření tohoto kontejneru.
db V případě příkladu souboru Dockercompose db je proměnná pro kontejner, který se chystáte definovat.
restartovat Říká kontejneru, aby se restartoval, pokud se systém restartuje.
svazky Připojí propojenou cestu na hostitelský počítač, kterou může kontejner použít
životní prostředí Definujte proměnné prostředí, které mají být předány příkazu Docker run.
závisí_na Nastaví službu jako závislost pro aktuální kontejner definovaný blokem
port Mapuje port z kontejneru na hostitele následujícím způsobem:host:container
odkazy Propojte tuto službu s dalšími službami v souboru Docker Compose zadáním jejich názvů zde.

K dispozici je mnoho dalších konfiguračních direktiv. Podrobnosti naleznete v odkazu na vytvoření souboru.

Pozor Příklad docker-compose.yml výše používá environment direktiva k ukládání uživatelských hesel MySQL přímo do souboru YAML, který se má importovat do kontejneru jako proměnné prostředí. Toto se nedoporučuje pro citlivé informace v produkčním prostředí. Místo toho mohou být citlivé informace uloženy v samostatném .env soubor (který není zkontrolován ve správě verzí ani zveřejněn) a přístupný z docker-compose.yml pomocí env_file směrnice.

Vytvoření aplikace od nuly

Vytvořte docker-compose.yml soubor jednu sekci po druhé pro ilustraci kroků vytváření multi-kontejnerové aplikace.

Definujte jednoduchou službu:

  1. Vytvořte nový docker-compose.yml v textovém editoru a přidejte následující obsah:

    Soubor:docker -compose.yml
    1
    2
    3
    4
    5
    6
    7
    8
    
    version: '3'
    
    services:
      distro:
        image: alpine
        restart: always
        container_name: Alpine_Distro
        entrypoint: tail -f /dev/null

    Každý záznam v services sekce vytvoří samostatný kontejner při docker-compose je spuštěn. V tomto okamžiku sekce obsahuje jediný kontejner založený na oficiální distribuci Alpine:

    • restart direktiva se používá k označení, že kontejner by se měl vždy restartovat (například po havárii nebo restartu systému).
    • container_name Direktiva se používá k přepsání náhodně vygenerovaného názvu kontejneru a jeho nahrazení názvem, který se snáze zapamatuje a lépe se s ním pracuje.
    • Pokud na nich neběží žádný proces, ve výchozím nastavení se kontejnery Docker ukončí. tail -f je probíhající proces, takže poběží neomezeně dlouho a zabrání zastavení kontejneru. Výchozí entrypoint je přepsáno, aby kontejner zůstal v chodu.
  2. Otevřete svůj kontejner:

    docker-compose up -d
    
  3. Zkontrolujte stav svého kontejneru:

     docker ps
    

    Výstup by měl vypadat takto:

    CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS               NAMES
    967013c36a27        alpine              "tail -f /dev/null"   3 seconds ago       Up 2 seconds                            Alpine_Distro
  4. Spusťte kontejner:

     docker-compose down
    

Přidat další služby

Odtud můžete začít budovat ekosystém kontejnerů. Můžete definovat, jak spolu spolupracují a komunikují.

  1. Znovu otevřete docker-compos.yml a přidejte database níže:

    Soubor:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - ../dumps:/tmp/
        ports:
          - "5432:5432"

    Nyní jsou definovány dvě služby:

    • Distro
    • Databáze

    Služba Distro je stejná jako dříve. Databázový server obsahuje instrukce pro postgres kontejner a direktivy:volumes: - ../dumps:/tmp a ports:-"5432:5432" , první direktiva mapuje kontejner /dumps složku do našeho místního /tmp složka. Druhá direktiva mapuje porty kontejnerů na porty místního hostitele.

  2. Zkontrolujte běžící kontejnery:

    docker ps
    

    Tento příkaz zobrazuje stav kontejnerů, mapování portů, názvy a poslední příkaz spuštěný na nich. Je důležité si uvědomit, že kontejner postgres zní „docker-entrypoint…“ pod příkazy. Skript PostgresDocker Entrypoint je poslední věcí, která se spustí při spuštění kontejneru.

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
    ecc37246f6ef        postgres:latest     "docker-entrypoint..."   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp   postgres_db
    35dab3e712d6        alpine              "tail -f /dev/null"      About a minute ago   Up About a minute                            Alpine_Distro
  3. Sundejte oba kontejnery:

     docker-compose down
    

Přidat službu nginx

  1. Přidejte kontejner nginx, aby vaše aplikace mohla obsluhovat webové stránky:

    Soubor:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - ../dumps:/tmp/
        ports:
          - "5432:5432"
      web:
        image: nginx:latest
        container_name: nginx
        volumes:
          - ./mysite.template:/etc/nginx/conf.d/mysite.template
        ports:
          - "8080:80"
        environment:
          - NGINX_HOST=example.com
          - NGINX_port=80
        links:
          - database:db
          - distro

    Toto docker-compose soubor obsahuje několik nových direktiv:environment a odkazy . První direktiva nastavuje možnosti úrovně běhu v kontejneru. links vytváří závislostní síť mezi kontejnery. Spuštění kontejneru nginx závisí na dalších dvou. Kromě toho budou odpovídající kontejnery dosažitelné pod názvem hostitele označeným aliasem. V tomto případě ping na db z web kontejner se dostane do database servis. I když nepotřebujete links direktiva pro kontejnery, aby spolu mluvily, links může sloužit jako zabezpečení proti selhání při spouštění aplikace docker-compose.

  2. Spusťte Docker Compose a zkontrolujte stav kontejneru:

     docker-compose up -d
     docker ps
    

    Výstup by měl být podobný:

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    55d573674e49        nginx:latest        "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes        0.0.0.0:8080->80/tcp     nginx
    ad9e48b2b82a        alpine              "tail -f /dev/null"      3 minutes ago       Up 3 minutes                                 Alpine_Distro
    736cf2f2239e        postgres:latest     "docker-entrypoint..."   3 minutes ago       Up 3 minutes        0.0.0.0:5432->5432/tcp   postgres_db
  3. Otestujte nginx tak, že přejdete na veřejnou IP adresu vašeho Linode, port 8080 v prohlížeči (například 192.0.2.0:8080 ). Měla by se zobrazit výchozí vstupní stránka nginx.

Trvalé úložiště dat

Ukládání dat PostgreSQL přímo do kontejneru se nedoporučuje. Kontejnery Docker jsou určeny k tomu, aby se s nimi zacházelo jako s pomíjivými:kontejnery vaší aplikace se při spuštění docker-compose up sestavují od začátku. a zničeny při spuštění docker-compose down . Kromě toho jakékoli neočekávané selhání nebo restart vašeho systému způsobí ztrátu všech dat uložených v kontejneru.

Z těchto důvodů je důležité nastavit na hostiteli trvalý svazek, který budou databázové kontejnery používat k ukládání dat.

  1. Přidejte volumes sekce na docker-compose.yml a upravte database služby odkazovat na svazek:

    Soubor:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - data:/var/lib/postgresql
        ports:
          - "5432:5432"
      web:
        image: nginx:latest
        container_name: nginx
        volumes:
          - ./mysite.template:/etc/nginx/conf.d/mysite.template
        ports:
          - "8080:80"
        environment:
          - NGINX_HOST=example.com
          - NGINX_port=80
        links:
          - database:db
          - distro
    volumes:
      data:
        external: true
  2. external: true říká Docker Compose, aby použil již existující externí datový objem. Pokud není žádný svazek s názvem data je přítomen, spuštění aplikace způsobí chybu. Vytvořte svazek:

    docker volume create --name=data
    
  3. Spusťte aplikaci jako dříve:

    docker-compose up -d
    

Další kroky

Docker Compose je výkonný nástroj pro orchestraci sad kontejnerů, které mohou spolupracovat. Věci jako aplikace nebo vývojové prostředí mohou využívat Docker-compose. Výsledkem je modulární a konfigurovatelné prostředí, které lze nasadit kdekoli.


Docker
  1. Jak připojit kontejnery Docker

  2. Jak používat profily služeb ke zjednodušení zásobníků v Docker Compose

  3. Jak používat příkaz Docker Inspect

  1. Jak používat obrázky, kontejnery a soubory Docker do hloubky

  2. Jak vypsat Docker kontejnery

  3. Jak nainstalovat a používat Docker Compose na CentOS

  1. Jak nainstalovat a používat Docker Compose na Ubuntu 18.04

  2. Jak nainstalovat a používat Docker Compose na CentOS 7

  3. Jak nakonfigurovat docker pro použití proxy