GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Docker化されたWebアプリを更新するときにDockerコンテナを自動的にアップグレードする方法

このシナリオを想像してみてください。 Dockerコンテナで実行されているいくつかのWebサービスをホストします。 Webサービスに新しいバージョンのリリースがある場合は、Dockerイメージをフェッチし、コンテナーを更新してサービスを更新します。

ダウンタイムなしでDockerコンテナーを更新することについては前に説明しましたが、この記事はWebアプリのアップグレードに関するものではありません。これは、オペレーティングシステムコンテナ自体の更新に関するものです。

コンテナで実行されているOSを手動でアップグレードすることは、困難な作業になることがあります。これを実現するには、実行中のコンテナで関連するアップグレードコマンドを個別に実行する必要があります。

この余分な手順を削除し、OSの更新とサービスの更新を組み合わせてみませんか?

これは、DockerComposeでデプロイされたWebサービスを更新するときに使用する自動化のトリックです。

この展開に基づく実際の例として、GhostCMSを使用します。

DigitalOcean –開発者クラウド何百万もの開発者があらゆるサイズのアプリケーションを簡単に構築、テスト、管理、スケーリングできるように支援します–これまでになく高速に。DigitalOceanlogoRoxanaCiobanu、CTO

Webサービスの更新中にOSコンテナを自動的にアップグレードする

この記事を読んで、私が何をしているのかを理解することができます。しかし、それをフォローしたい場合は、それも可能です。

2つの異なる例を示します:

  1. DebianベースのDockerコンテナの場合
  2. アルパインベースのDockerコンテナの場合
Debianコンテナの自動アップグレード

この手順では、次の2つの手順を実行する必要があります。

ステップ1:CMD命令に注意してください

WebAppDockerfile内で最終的に指定されたCMD命令をメモします。

これを行うには、イメージが構築されたDockerfile(この例ではGhost)を確認する必要があります:

したがって、ここでの実際のコマンドはnode current/index.jsです。 。

ステップ2:「自動アップグレード」設定を追加する

DockerComposeファイルのGhostサービスセクション内にアップグレードコマンドと注記されたCMD命令を追加します。

command: sh -c "apt update && apt -y upgrade && node current/index.js"

それが最終的にどのようになるか見てみましょう。たとえば、上記のガイドのGhostサービスのDockerComposeエントリを検討するとします。チュートリアルに基づく更新バージョンは次のようになります:

    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

ここでは、volumesの直後にコマンドを指定しました セクション。

アルパインコンテナの自動アップグレード

この手順でも、2つの同様の手順を実行する必要があります。

ステップ1:CMD命令に注意してください

WebAppDockerfile内で最終的に指定されたCMD命令をメモします。

これを行うには、Dockerfile(この例ではGhost Alpine)を確認する必要があります:

明らかに、ここでのコマンドは以前のDebianバージョンで見られたものと同じです:node current/index.js

ステップ2:「自動アップグレード」設定を追加する

DockerComposeファイルのGhostサービスセクション内にアップグレードコマンドと注記されたCMD命令を追加します。

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"

アルパインアップグレードリファレンス。

最終的にどのようになるか見てみましょう(今回はGhostに高山の画像を使用することに注意してください)。たとえば、上記のガイドのGhostサービスのDockerComposeエントリを検討するとします。チュートリアルに基づく更新バージョンは次のようになります:

    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

それでおしまいです。この時点から、ダウンタイムなしでWebAppを更新するたびに、コンテナーのアップグレードコマンドが自動的に呼び出され、Webアプリが実行されます。

注:docker composeファイルのイメージのバージョン番号を変更してアプリを更新する場合は、ここでハッシュタグを使用して説明しているコマンドオプションを一時的に無効にする必要があります。 Webアプリの更新が完了したら、同じ行を再度有効にして、コンテナー自体を更新します。これらの手順(アプリとコンテナーの更新)はどちらも、スケーリングによるダウンタイムなしで実現できます。

ボーナスのヒント

NextcloudやRocket.Chatなどの他の人気のあるアプリのコマンドのリストは次のとおりです。これらは、Ghostの例で見たのと同じように追加されることを忘れないでください。

ネクストクラウド

Debianの場合:

command: sh -c "apt update && apt -y upgrade && apache2-foreground"

アルパインの場合:

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"

この記事が日常のシステム管理者の活動に役立つことを願っています。ご質問、ご意見、ご提案がございましたら、下のコメント欄にご意見をお寄せください。


Docker
  1. 実行中のDockerコンテナを自動的に更新する方法

  2. DockerComposeの使用方法

  3. Dockerコンテナを接続する方法

  1. ランチャーでアプリをデプロイする方法

  2. 環境変数をDockerコンテナに渡す方法

  3. Dockerコンテナを一覧表示する方法

  1. Dockerコンテナを管理する方法は?ベストプラクティス

  2. Dockerコンテナをエクスポートおよびインポートする方法

  3. デーモンが停止したときにDockerコンテナを実行し続ける方法