GNU/Linux >> Linux の 問題 >  >> Linux

ダウンタイムなしでDockerコンテナを更新する方法

Docker化された環境では、複数のイメージを使用し、多くのコンテナーを操作しています。イメージからコンテナーを実行すると、Dockerイメージは自動的に更新されないため、そのバージョンの実行が続行されます。手動で更新する必要がある場合があります。最新のDockerイメージからコンテナを実行することを常にお勧めします。

このガイドでは、実行中のコンテナをダウンタイムなしで更新する方法の実践的な例を示します。

前提条件

  • Atlantic.Netクラウドプラットフォーム上の新しいUbuntu20.04サーバー
  • サーバーで構成されているrootパスワード

ステップ1-Atlantic.Netクラウドサーバーを作成する

まず、Atlantic.Netクラウドサーバーにログインします。 2GB以上のRAMを搭載したオペレーティングシステムとしてUbuntu20.04を選択して、新しいサーバーを作成します。 SSH経由でクラウドサーバーに接続し、ページの上部で強調表示されているクレデンシャルを使用してログインします。

Ubuntu 20.04サーバーにログインしたら、次のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。

apt-get update -y

ステップ2–DockerCEとDockerComposeをインストールする

まず、次のコマンドを使用して、必要なすべての依存関係をインストールします。

apt-get install git apt-transport-https ca-certificates curl software-properties-common -y

次に、次のコマンドを使用してDockerGPGキーとリポジトリを追加します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

リポジトリが追加されたら、次のコマンドを使用してDockerとDockercomposeをインストールします。

apt-get install docker-ce docker-compose -y

両方のパッケージがインストールされたら、次のステップに進むことができます。

ステップ3–Docker作成ファイルを作成する

このチュートリアルでは、Dockerネットワーク、ボリューム、およびdocker-compose.ymlファイルを作成してGhostコンテナーをデプロイします。

まず、次のコマンドを使用して、netという名前のネットワークとghostという名前のボリュームを作成します。

docker network create net
docker volume create ghost

次に、次のコマンドを使用してGhostプロジェクトのディレクトリを作成します。

mkdir Ghost

次に、ディレクトリをGhostに変更し、docker-compose.ymlファイルを作成します。

cd Ghost
nano docker-compose.yml

次の行を追加します:

version: '3.5'
services:
  ghost:
    image: ghost:3.36
    volumes:
      - ghost:/var/lib/ghost/content
    environment:
      - VIRTUAL_HOST=ghost.example.com
      - url=http://ghost.example.com
      - NODE_ENV=production
    restart: always
    networks:
      - net

volumes:
  ghost:
    external: true

networks:
  net:
    external: true

終了したら、ファイルを保存して閉じます。

上記のファイルは、Ghostイメージバージョン3.36をダウンロードし、ドメインghost.example.comのGhostコンテナを作成します。

ステップ4–ゴーストコンテナを作成する

次に、ディレクトリをGhostに変更し、次のコマンドを使用してGhostコンテナを起動します。

docker-compose up -d

次の出力が得られるはずです:

Pulling ghost (ghost:3.36)...
3.36: Pulling from library/ghost
bb79b6b2107f: Pull complete
99ce436c3449: Pull complete
f7bdc31da5f5: Pull complete
7a1300b9ff59: Pull complete
a495c68fa838: Pull complete
6e362a39ec35: Pull complete
b68b4f3c36f7: Pull complete
41f8b02d4a71: Pull complete
3ecc736ea4e5: Pull complete
Digest: sha256:595c759980cd22e99037811397012908d89efb799776db222a4be6d4d892917c
Status: Downloaded newer image for ghost:3.36
Creating ghost_ghost_1 ... done

次のコマンドでゴーストイメージを確認できます:

docker images

出力:

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ghost        3.36      455ce1645479   4 months ago   440MB

次のコマンドを使用してGhostコンテナを確認することもできます。

docker ps

出力:

CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS      NAMES
d4b51b1aafc8   ghost:3.36   "docker-entrypoint.s…"   23 seconds ago   Up 20 seconds   2368/tcp   ghost_ghost_1

ステップ5–Docker作成ファイルを更新する

このセクションでは、Docker作成ファイルを更新し、Ghostのバージョンを3.36から3.37.1に変更します。

nano docker-compose.yml

次の変更を行います:

version: '3.5'
services:
  ghost:
    image: ghost:3.37.1
    volumes:
      - ghost:/var/lib/ghost/content
    environment:
      - VIRTUAL_HOST=ghost.example.com
      - url=http://ghost.example.com
      - NODE_ENV=production
    restart: always
    networks:
      - net

volumes:
  ghost:
    external: true

networks:
  net:
    external: true

終了したら、ファイルを保存して閉じます。

ステップ6–新しいゴーストコンテナを起動する

次に、スケーリング方法を使用して、古いGhostコンテナに影響を与えずに新しいGhostコンテナを作成します。次のコマンドで実行できます:

cd Ghost
docker-compose up -d --scale ghost=2 --no-recreate

次の出力が得られるはずです:

Pulling ghost (ghost:3.37.1)...
3.37.1: Pulling from library/ghost
bb79b6b2107f: Already exists
99ce436c3449: Already exists
7f4b5e228565: Pull complete
de71eab7febf: Pull complete
29961d2eb573: Pull complete
923f84e249ab: Pull complete
dfad6f73fc3d: Pull complete
b16cf83b3022: Pull complete
387b2254843c: Pull complete
Digest: sha256:fad0c2631cbba3d6c61da6fa5ef39da201780f2ae64ce51f3d5ebb412ca2564b
Status: Downloaded newer image for ghost:3.37.1
Starting ghost_ghost_1 ... done
Creating ghost_ghost_2 ... done
の新しいイメージをダウンロードしました

次のコマンドを使用して、新しいGhostイメージを確認できます。

docker images

出力:

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ghost        3.37.1    c64d108acdfe   3 months ago   439MB
ghost        3.36      455ce1645479   4 months ago   440MB

次のコマンドを使用して、新しいGhostコンテナを確認することもできます。

docker ps

出力:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS      NAMES
c21550f39440   ghost:3.37.1   "docker-entrypoint.s…"   33 seconds ago   Up 31 seconds   2368/tcp   ghost_ghost_2
d4b51b1aafc8   ghost:3.36     "docker-entrypoint.s…"   4 minutes ago    Up 4 minutes    2368/tcp   ghost_ghost_1

ステップ7–新しいゴーストコンテナをスケーリングする

この時点で、両方のGhostコンテナは同じ構成を使用して実行されています。次に、古いGhostコンテナを停止して削除します。

docker container stop ghost_ghost_1
docker container rm ghost_ghost_1

次に、次のコマンドを実行して、構成を元の設定に縮小します。

cd Ghost
docker-compose up -d --scale ghost=1 --no-recreate

詳細については、新しいGhostコンテナログを確認することもできます。

docker logs ghost_ghost_2

出力:

[2021-03-05 04:50:13] INFO Blog is in maintenance mode.
[2021-03-05 04:50:13] INFO Ghost is running in production...
[2021-03-05 04:50:13] INFO Your site is now available on http://ghost.example.com/
[2021-03-05 04:50:13] INFO Ctrl+C to shut down
[2021-03-05 04:50:13] INFO Ghost boot 3.581s
[2021-03-05 04:50:13] INFO Creating database backup
[2021-03-05 04:50:13] INFO Database backup written to: /var/lib/ghost/content/data/ghost.ghost.2021-03-05-04-50-13.json
[2021-03-05 04:50:13] INFO Updating portal button setting to false
[2021-03-05 04:50:13] INFO Blog is out of maintenance mode.

これで、Ghostコンテナが新しいGhostイメージで更新されました。

結論

上記のガイドでは、ダウンタイムなしでDockerコンテナを更新する方法を学びました。 Atlantic.NetからVPSホスティングでDockerコンテナを更新することから始めましょう!


Linux
  1. UbuntuにDockerでWordPressをインストールする方法

  2. Dockerを使用してJenkinsをインストールする方法

  3. Dockerコンテナを終了する方法

  1. ZsyncでIsoを更新する方法は?

  2. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  3. DockerコンテナでMySQLを実行する方法

  1. 例を使用してDockerRunコマンドを使用する方法

  2. Dockerイメージとコンテナーを最新バージョンに更新する方法

  3. Dockerを使用してJenkinsコンテナをSystemdサービスとして実行する方法