Představte si tento scénář. Hostujete několik webových služeb běžících v kontejnerech Docker. Když má webová služba novou verzi, načtete obraz Dockeru a aktualizujete kontejnery, aby se služba aktualizovala.
Již dříve jsem diskutoval o aktualizaci kontejnerů Docker bez prostojů, ale tento článek není o upgradu webových aplikací. Tento je o aktualizaci samotných kontejnerů operačního systému.
Ruční aktualizace operačního systému běžícího v kontejneru může být čas od času skličující úkol. Aby k tomu došlo, musíte příslušné příkazy pro upgrade sami spustit na běžícím kontejneru.
Co takhle eliminovat tento krok navíc a spojit aktualizaci operačního systému s aktualizací služby?
Toto je automatizační trik, který používám, když aktualizuji webovou službu, která byla nasazena s Docker Compose.
Na základě tohoto nasazení použijeme Ghost CMS jako reálný příklad.
DigitalOcean – vývojářský cloudPomáhá milionům vývojářů snadno vytvářet, testovat, spravovat a škálovat aplikace jakékoli velikosti – rychleji než kdy předtím.DigitalOcean logoRoxana Ciobanu, CTOAutomatický upgrade kontejnerů OS při aktualizaci webové služby
Stačí si přečíst tento článek, abyste pochopili, co dělám. Ale pokud to chcete sledovat, můžete to udělat také.
Ukážu dva různé příklady:
- Pro kontejnery Docker založené na Debianu
- Pro kontejnery Alpine Based Docker
Automatický upgrade kontejnerů Debian
Postup vyžaduje, abyste provedli dva kroky:
Krok 1:Poznamenejte si pokyny CMD
Poznamenejte si instrukci CMD, která je nakonec specifikována uvnitř WebApp Dockerfile.
Chcete-li to provést, musíte zkontrolovat soubor Dockerfile, se kterým byl obrázek vytvořen (v tomto příkladu duch):
Proto je zde skutečný příkaz node current/index.js
.
Krok 2:Přidejte nastavení „Automatický upgrade“
Přidejte příkazy pro upgrade a uvedenou instrukci CMD do části služby Ghost souboru Docker Compose:
command: sh -c "apt update && apt -y upgrade && node current/index.js"
Uvidíme, jak by to nakonec vypadalo. Řekněme například, že uvažujete o položkách Docker Compose pro službu Ghost z výše citovaného průvodce. Aktualizovaná verze založená na našem tutoriálu by byla:
ghost:
image: ghost:4.20.4
volumes:
- ghost:/var/lib/ghost/content
- ./config.json:/var/lib/ghost/config.production.json
command: sh -c "apt update && apt -y upgrade && node current/index.js"
env_file:
- ./ghost-mariadb.env
restart: on-failure
depends_on:
- ghostdb
networks:
- net
- ghost
Zde jsem zadal příkaz hned za volumes
sekce.
Automaticky upgradovat alpinské kontejnery
Tento postup znovu vyžaduje, abyste provedli dva podobné kroky:
Krok 1:Poznamenejte si pokyny CMD
Poznamenejte si instrukci CMD, která je nakonec specifikována uvnitř WebApp Dockerfile.
Chcete-li to provést, musíte zkontrolovat soubor Dockerfile (v tomto příkladu Ghost Alpine):
Zdá se, že příkaz je zde stejný, jako pro verzi Debianu dříve:node current/index.js
.
Krok 2:Přidejte nastavení „Automatický upgrade“
Přidejte příkazy pro upgrade a uvedenou instrukci CMD do části služby Ghost souboru Docker Compose:
command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
Reference k upgradu Alpine.
Uvidíme, jak by to nakonec vypadalo (tentokrát použiji alpský obrázek pro Ghost). Řekněme například, že uvažujete o položkách Docker Compose pro službu Ghost z výše citovaného průvodce. Aktualizovaná verze založená na našem tutoriálu by byla:
ghost:
image: ghost:4.20.4-alpine
volumes:
- ghost:/var/lib/ghost/content
- ./config.json:/var/lib/ghost/config.production.json
command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
env_file:
- ./ghost-mariadb.env
restart: on-failure
depends_on:
- ghostdb
networks:
- net
- ghost
Tak to je ono. Od tohoto okamžiku, kdykoli aktualizujete své WebApps bez prostojů, budou automaticky vyvolány příkazy pro upgrade kontejneru a poté budou spuštěny vaše webové aplikace.
Poznámka:Při aktualizaci jakékoli aplikace změnou čísla verze obrázku v souboru sestavy dockeru musíte dočasně zakázat možnost příkazu, která je zde popsána pomocí hashtagu. Po dokončení aktualizace pro webovou aplikaci znovu povolte stejný řádek, aby se aktualizoval samotný kontejner. Oba tyto kroky (aktualizace aplikace a kontejneru) jsou dosažitelné bez jakýchkoli prostojů díky škálování.
Bonusové tipy
Zde je seznam příkazů pro další populární aplikace, jako je Nextcloud a Rocket.Chat. Pamatujte, že je třeba je přidat stejně jako v příkladu Ghost.
Nextcloud
Pro Debian:
command: sh -c "apt update && apt -y upgrade && apache2-foreground"
Pro Alpine:
command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && apache2-foreground"
Rocket.Chat
command: sh -c "apt update && apt -y upgrade && node main.js"
Doufám, že vám tento článek pomůže ve vašich každodenních činnostech správce systému. Pokud máte nějaké dotazy, zpětnou vazbu nebo návrhy, zanechte prosím své myšlenky v sekci komentářů níže.