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

3 strategie pro automatizované produkční nasazení s Dockerem

Docker je oblíbený vývojový nástroj, protože zjednodušuje spouštění izolovaných instancí vaší aplikace s reprodukovatelnou konfigurací. Může být také použit v produkčním prostředí, kde zajišťuje, že živé nasazení je totožné s vaším vývojovým prostředím.

Uvedení kontejneru do produkce není vždy tak jednoduché jako spuštění docker run na vašem místním počítači. Není skvělý nápad ručně posílat obrázky do registru, připojovat se ke vzdálenému hostiteli Dockeru a spouštět kontejnery. To závisí na lidském zásahu, takže je to časově náročné a náchylné k chybám.

V této příručce se podíváme na tři různé strategie, které můžete použít a které usnadňují automatizaci nasazení Dockeru a udržování konzistentní konfigurace. Tyto přístupy lze naskriptovat jako součást kanálu CI pro spuštění nových kontejnerů pokaždé, když se změní váš kód. Budete muset sestavit své obrazy Docker a odeslat je do registru jako první fázi ve skriptu a poté pomocí jedné z níže uvedených technik vytáhnout obraz a spustit kontejnery ve vašem produkčním prostředí.

1. Docker Compose Over SSH

Docker Compose vám umožňuje spustit více kontejnerů jediným příkazem. Kromě toho se Compose konfiguruje pomocí souboru YAML, který vám pomůže se změnami verzí a zaručí reprodukovatelné nasazení.

Možná jste již použili Compose jako nástroj místního rozvoje. Musíte vytvořit docker-compose.yml soubor ve vašem pracovním adresáři a poté přidejte jednu nebo více services které definují kontejnery pro spuštění:

version: 3
services:
  app:
    image: example.com/app:latest
    ports:
      - 80:80
  database:
    image: mysql:8.0
    expose:
      - 3306

Jakmile získáte soubor Compose, použijte docker-compose up -d příkaz ke spuštění vašich kontejnerů. Pokud soubor upravíte, zopakujte příkaz pro použití změn. Compose aktualizuje nebo nahradí kontejnery, aby dosáhl nového deklarovaného stavu.

Přidání --pull flag instruuje Compose, aby se pokusila stáhnout aktualizované obrázky před spuštěním kontejnerů. Můžete také použít --force-recreate vynutit vytvoření nových kontejnerů, i když se jejich základní konfigurace nezměnila.

Jak to vše souvisí s produkčním nasazením? Znamená to, že můžete použít Compose jako součást vašeho kanálu CI k snadnému spouštění kontejnerů, které splňují stav, který deklarujete v docker-compose.yml soubor. Spuštění docker-compose up -d --pull v každém kanálu vám poskytne sadu kontejnerů, z nichž každý spouští nejnovější verzi svého obrazu.

Existuje několik způsobů, jak můžete tuto metodu implementovat. Nejjednodušší a nejbezpečnější cestou je nainstalovat Docker a Compose na váš produkční hostitel a poté se k němu připojit přes SSH. K ukládání přihlašovacích údajů SSH jako proměnných přístupných vašemu kanálu budete muset použít nastavení poskytovatele CI. Poté byste ve svém kanálu nakonfigurovali klienta SSH, zkopírovali soubor docker-compose.yml soubor do vašeho vzdáleného hostitele a spusťte  docker-compose up příkaz.

Zde je ukázkový skript:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo $SSH_PRIVATE_KEY | ssh-add -
echo $SSH_HOST_KEY > ~/.ssh/known_hosts
scp docker-compose.yml:[email protected]:/home/ci-user/docker-compose.yml
ssh -t [email protected] docker-compose up -d

Případně můžete použít kontexty Dockeru ke spuštění binárního souboru Compose lokálně v prostředí vašeho kanálu. To by vyžadovalo, abyste odhalili zásuvku Docker na vašem vzdáleném hostiteli; protože to může představovat bezpečnostní riziko, je tento přístup obecně méně příznivý v situacích, kdy lze použít i SSH.

Podle této metody byste měli nainstalovat Docker a Compose na hostitele, který provozuje vaše kanály. V rámci skriptu kanálu byste se zaregistrovali a vybrali kontext Dockeru, který ukazuje na vašeho vzdáleného produkčního hostitele. Podrobnosti o připojení je třeba zadat jako proměnné nastavené na panelu nastavení poskytovatele CI. S vybraným kontextem byste spustili docker-compose up -d v prostředí vašeho kanálu, ale podívejte se na příkaz spuštěný na vzdáleném serveru.

2. Použití Platform-as-a-Service (PaaS)

Přijetí nabídky Platform-as-a-Service (PaaS) je dalším přístupem ke spouštění kontejnerů Docker v produkci. Můžete sami hostovat své vlastní pomocí řešení, jako je Dokku, nebo si vybrat hostovanou nabídku, jako je Amazon ECS, DigitalOcean App Platform nebo Heroku.

PaaS odstraňuje složitost vytváření obrazů, udržování podrobných konfigurací a poskytování vlastních hostitelů Docker. Buď použijete Git k přímému odeslání vašeho úložiště na platformu, nebo spustíte příkaz CLI k nahrání změn. PaaS zpracovává vytváření kontejnerů z vašich zdrojových prostředků, souborů Dockerfiles nebo konfiguračního souboru specifického pro platformu.

Řešení PaaS jsou skvělým způsobem, jak se rychle dostat online s minimální praktickou interakcí s Dockerem. Snadno se integrují do vašeho kanálu CI a většina hlavních poskytovatelů nabízí ukázkové skripty, které vám pomohou začít. Je však možné přerůst PaaS, což by mohlo znamenat, že budete muset v budoucnu přehodnotit svou infrastrukturu.

Kroky k automatizaci nasazení na vámi vybranou platformu se budou lišit podle poskytovatele. Pokud používáte Dokku nebo podobný PaaS s integrací Git, váš skript CI může být jednoduchý jako dva řádky:

git remote add dokku [email protected]:app-name
git push dokku master

Skript přidá váš server Dokku jako vzdálené Git a posune obsah úložiště nahoru. Dokku automaticky vytvoří obrázek z vašeho Dockerfile a spusťte instance kontejneru. Aby to fungovalo, musíte do Dokku přidat veřejný klíč SSH serveru CI; jinak by se váš skript CI nemohl ověřit na platformě.

3. Orchestrace s Kubernetes/Docker Swarm

Použití orchestrátoru, jako je Kubernetes nebo Docker Swarm, je pravděpodobně nejběžnějším způsobem spouštění živých instancí kontejnerů. Tyto nástroje jsou určeny k nasazení a škálování kontejnerů v produkčním prostředí.

Orchestraři odstraňují složitost správy infrastruktury a umožňují vám soustředit se na vaši aplikaci a její komponenty. Podobně jako Docker Compose používají deklarativní přístup ke konfiguraci stavu, kde definujete, jak by měl konečný stav vypadat. Orchestrátor určí správnou sekvenci akcí k dosažení tohoto stavu.

Kubernetes je nejpopulárnější orchestrátor. Jedním ze způsobů interakce s clustery Kubernetes je Kubectl, oficiální nástroj pro správu CLI. Kubectl vám umožňuje použít soubory manifestu ve formátu YAML, které definují prostředky kontejneru, které se mají vytvořit ve vašem clusteru.

Zde je jednoduchý manifest, který vytvoří jednu instanci kontejneru:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: example.com/image:latest

K použití tohoto manifestu na cluster můžete použít Kubectl:

kubectl apply -f manifest.yaml

Následné změny v souboru se použijí opakováním příkazu. Kubernetes automaticky provede potřebné akce k dosažení nového deklarovaného stavu.

Díky tomu je Kubernetes skvělou volbou pro automatizovaná produkční nasazení. Můžete použít kubectl apply ve vašich kanálech, abyste převzali manifesty ve vašem úložišti a aplikovali deklarovaný stav na váš cluster. Když vytvoříte novou značku obrázku pro každé potvrzení, Kubernetes stáhne tento obrázek a spustí nové kontejnery pro nasazení.

Chcete-li to nastavit, musíte zadat obsah konfiguračního souboru Kubeconfig jako proměnnou kanálu. To dává Kubectlovi přihlašovací údaje, které lze použít pro připojení ke clusteru. Místní binární soubor Kubectl by pak fungoval proti vašemu vzdálenému clusteru.

Docker Swarm je další možností orchestrace, která je integrována s Dockerem. Swarm stack můžete nastavit pomocí stejného docker-compose.yml soubor, jak je popsáno výše. Potom by bylo možné použít podobné přístupy k nasazení, buď připojení k hostiteli Swarm přes SSH nebo použití kontextu Dockeru k úpravě cíle místních binárních souborů Docker.

Orchestrátoři jsou mnohem složitější než použití prostého Compose nebo spravovaného PaaS. V případě Kubernetes se před nasazením kontejnerů musíte naučit nové abstrakce, terminologii a formáty konfiguračních souborů. Clustery vám však také poskytují další možnosti, které usnadňují dlouhodobou údržbu aplikací. Můžete snadno škálovat repliky na více hostitelích, zabudovat redundanci a agregovat protokoly a metriky.

Orchestrace je proto nejlepší volbou pro větší systémy provozující více kontejnerů. To neznamená, že pozornost odvětví, kterou nástroje dostávají, by vás měla přimět používat Kubernetes pro každé nasazení. Sestavení nebo PaaS bude snazší nastavit, zdůvodnit a udržovat pro menší případy použití, kde se méně zajímáte o škálovatelnost a uzamčení dodavatele.

Přehled

Podívali jsme se na tři různé způsoby provozu kontejnerů jako produkční zátěže. Podrobnosti implementace se budou lišit v závislosti na zvolené strategii, podpůrném nástrojovém řetězci a prostředí CI, takže jsme vynechali přesný popis toho, jak můžete nastavit automatizaci jako součást vašeho pracovního postupu. Všechny tři však lze snadno integrovat do kanálu CI, který se spustí pokaždé, když sloučíte nebo vložíte svůj kód.

Orchestrace pomocí nástroje jako Kubernetes se rychle stala preferovanou metodou pro škálovatelné nasazení systémů s více kontejnery. I když to může výrazně zjednodušit provoz služeb, pro které je navrženo, přináší také značnou křivku učení a režii na údržbu, takže byste neměli skákat bez zvážení alternativ.

Menší systémy vytvořené z několika komponent mohou dosáhnout lepších výsledků při použití Compose ke spuštění kontejnerů s reprodukovatelnou konfigurací na existujícím hostiteli Docker. To poskytuje některé výhody Kubernetes, jako je deklarativní konfigurace, bez další složitosti. Později můžete orchestraci „ulehčit“ přidáním podpory Docker Swarm do vašeho stávajícího souboru Compose, což vám umožní spustit více distribuovaných replik kontejnerů.

A konečně, možnosti Platform-as-a-Service urychlují nasazení aplikací, aniž byste museli přemýšlet o podrobných podrobnostech kontejneru. Tyto služby nabízejí perspektivu plné automatizace infrastruktury od minimální konfigurace. Z dlouhodobého hlediska mohou být omezující, takže než se zavážete, přemýšlejte o tom, jak bude vaše řešení časem růst.

Při nasazování jakýchkoli kontejnerů do produkce budete také muset zvážit hostování obrázků a vkládání konfigurace. Ke zpřístupnění obrázků ve vašem produkčním prostředí můžete použít službu veřejného registru. Případně můžete spustit svůj vlastní soukromý registr a poskytnout pověření jako součást vašeho kanálu CI. Hodnoty konfigurace jsou obvykle poskytovány jako proměnné prostředí, které můžete definovat na obrazovce nastavení poskytovatele CI.


Docker
  1. Co je Docker? Naučte se používat kontejnery – vysvětleno s příklady

  2. 10 snadno použitelných tipů pro správu vlastní hostované instance Nextcloud pomocí Dockeru

  3. 7 užitečných tipů pro vlastní hostování instance Ghost pomocí Dockeru

  1. Jak provádět kanárské nasazení s Istio

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

  3. Úvod do Docker Containers

  1. Docker vs. Kubernetes

  2. Monitorujte a spravujte kontejnery Docker pomocí Portainer.io (nástroj GUI) – část 2

  3. Monitorujte a spravujte kontejnery Docker pomocí Portainer.io (nástroj GUI) – Část 1