Docker Compose je nástroj, který se nativně integruje s Dockerem a díky kterému je správa vícekontejnerových aplikací hračkou.
Výhody, které Docker Compose poskytuje, jsou četné, z nichž některé zahrnují:
- Snadná správa kontejnerových sítí: Propojení dvou kontejnerů přes síť Docker je v Docker Compose velmi jednoduché, stačí definovat síť a říct kontejnerům, aby se k ní připojily. Kromě toho může Docker Compose automaticky vytvářet a ničit sítě, když vytváříte a ničíte samotné kontejnery.
- Závislosti kontejneru: Máte kontejner Docker, který potřebuje další kontejner Docker, aby byl spuštěn a spuštěn, řekněme, databáze. Docker Compose vám umožňuje definovat závislosti pro kontejner, což vyžaduje, aby byly závislosti spuštěny, než se spustí cokoliv jiného.
- Reprodukovatelná nastavení: Protože nastavení kontejneru bude definováno ještě před vytvořením čehokoli, umožňuje to reprodukovatelnost nastavení, což usnadňuje jejich přenos do jiných systémů. I když byste to teoreticky mohli udělat v něčem, jako je Bash, může to způsobit, že věci budou méně flexibilní a budou se hůře přizpůsobovat změnám.
Instalace Docker Compose v systému Linux
Docker Compose je snadno dostupný ve většině úložišť distribucí.
Docker Compose můžete nainstalovat na Ubuntu a distribuce založené na Debianu pomocí následujícího příkazu:
sudo apt install docker-compose
Na Arch a Manjaro můžete použít:
sudo pacman -S docker-compose
Na Fedoře můžete použít příkaz dnf:
sudo dnf install docker-compose
Možná budete muset vynaložit trochu více úsilí na instalaci Docker Compose na CentOS.
U všech ostatních distribucí se vždy můžete podívat do instalační dokumentace, kde najdete informace o získání potřebných balíčků.
Vytvoření našeho prvního souboru Docker Compose
Tato příručka předpokládá, že jste již obeznámeni s nástrojem CLI dockeru a jste s ním spokojeni. Pokud ne, zvažte to, protože jinak pravděpodobně narazíte na spoustu jednoduchých škytavek.
Soubory Docker Compose jsou uloženy pod názvem docker-compose.yml
a jsou automaticky nalezeny, když spustíte docker-compose
příkazy ve stejném adresáři. Jeho syntaxe má podobu, uhodli jste, YAML.
Pokud máte zájem se o tom dozvědět, máme vyhrazený tutoriál o základech YAML.
Základy YAML Každý technik DevOps musí znát Jako inženýr DevOps budete hodně pracovat se soubory YAML. Vždy je dobré porozumět základní syntaxi YAML. Linux Handbook Rakesh JainZačneme souborem, který vytvoří instanci Nextcloud, a pak si projdeme, jak to vlastně udělal.
Nejprve musíte vytvořit soubor pro psaní. Vytvořte v systému prázdný adresář a vytvořte docker-compose.yml
soubor.
Dále vyplňte soubor následujícím obsahem:
version: '3.5'
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
networks:
nextcloud:
name: nextcloud_docker_network
Nyní vše, co musíte spustit, je docker-compose up -d
a úspěšně byste nasadili Nextcloud s Dockerem.
Zde je přihlašovací stránka Nextcloud.
Pochopení našeho souboru Docker Compose File
Nyní, když jste viděli, že soubor skutečně funguje, pojďme se podívat na obsah souboru, abyste skutečně pochopili, co přesně dělá.
Značka 'version'
version: '3.5'
Za prvé, version
štítek. Toto je pouze upřesnění verze formátu souboru Docker Compose, protože různé verze budou mít různou syntaxi. Obecně si to chcete ponechat na nejnovější verzi, ale není to nutné, což může být užitečné, pokud máte nějaké starší soubory.
Značka 'services'
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
Dále uvidíte services
štítek. Tím se spustí seznam všech aplikací, které se vytvoří při docker-compose up -d
je spuštěn.
Poté spustíme výpis pro náš první kontejner, nextcloud_app
. Slouží jako identifikátor aplikace, který lze použít pro jiné příkazy Docker Compose. Upozorňujeme, že toto není samotný název kontejneru – ten je uveden v další části.
Nyní můžete začít definovat vše o vašem kontejneru. Zde je stručný popis toho, co všechna pole znamenají, i když většina z nich by měla být samozřejmá, pokud se již v Dockeru orientujete:
container_name
- Definuje název kontejneru. Ekvivalent k--name
možnost.image
– Definuje, z jakého obrázku se má pro kontejner vytáhnout.restart
- Definuje zásady restartování pro kontejner. Ekvivalent--restart
.networks
- Definuje síť, ke které se kontejner připojuje. Tato síť může být vytvořena nebo již může existovat. Tato hodnota slouží jako identifikátor prodocker-compose
a není skutečným názvem sítě (ten je definován vnetworks
sekce tagů).ports
- Definuje hostitelské porty, ke kterým se může kontejner připojit. Ekvivalent--publish
.volumes
- Definuje objemy pro kontejner. Ekvivalent--volume
.environment
- Definuje proměnné prostředí pro kontejner. Ekvivalent--env
. Tato volba podporuje dva typy syntaxe. První jevariable: value
, což je to, co se zde používá. Druhá možnost, která může být známější, pokud jste zvyklí nadocker
Syntaxe CLI je- variable=value
.depends_on
- Určuje závislosti kontejneru. To se používá k požadavku, aby se kontejner nespustil, dokud se nespustí jeho závislosti. To přijímá hodnoty z výpisů kontejneru. (Necontainer_name
!)
Značka 'networks'
networks:
nextcloud:
name: nextcloud_docker_network
Nyní se dostanete k networks
štítek. Toto se používá k definování sítí, které jsme uvedli v části networks
pro naše kontejnery.
Uvnitř networks
v sekci services
nejprve vypíšete identifikátor, který jste síti přidělili . Tady to byl nextcloud
.
Dále definujete název sítě, který lze zobrazit pomocí docker network ls
. Zde jsme to pojmenovali nextcloud_docker_network
.
Pokud byste chtěli, aby se kontejnery připojily k síti, která již existovala, použili byste následující syntaxi nahrazující network_name
s názvem sítě Docker:
networks:
nextcloud:
external: true
name: network_name
A tady to je. To shrnuje celý soubor!
Soubor yml můžete pojmenovat jakkoli, ale pak budete muset zadat název souboru při použití příkazů docker-compose. Dodržováním tradice a pojmenováním docker-compose.yml jsou příkazy krátké.Uzavření
Nyní znáte základy používání Docker Compose a výhody, které můžete jeho používáním získat. Nyní jste také na cestě k pochopení toho, co lidé dělají, když distribuují své kontejnery prostřednictvím souborů Compose.
Něco nefunguje nebo máte nějaké přetrvávající otázky? Můžete je zanechat v sekci komentářů níže.