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

Jak automaticky upgradovat kontejnery Docker při aktualizaci dockerizovaných webových aplikací

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, CTO

Automatický 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:

  1. Pro kontejnery Docker založené na Debianu
  2. 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.


Docker
  1. Jak automaticky aktualizovat běžící kontejnery Docker

  2. Jak používat Docker Compose

  3. Jak připojit kontejnery Docker

  1. Jak exportovat a importovat kontejnery Docker

  2. Jak nasadit aplikace s Rancherem

  3. Jak předávat proměnné prostředí do kontejnerů Docker

  1. Jak spravovat kontejnery Docker? Osvědčené postupy

  2. Jak udržet kontejnery Docker v chodu, když se démon zastaví

  3. Jak vypsat Docker kontejnery