Docker Swarm を使用してサービスのローリング アップデートを実装するためのサンプル コード

Docker Swarm を使用してサービスのローリング アップデートを実装するためのサンプル コード

1. Docker Swarm とは何ですか?

Docker Swarm は、Docker が公式に提供するクラスター管理ツールです。その主な機能は、複数の Docker ホストを 1 つに抽象化し、これらの Docker ホスト上のさまざまな Docker リソースを統一された入口から管理することです。 Swarm は Kubernetes に似ていますが、Kubernetes よりも軽量で機能も少ないです。

Docker Swarm は、Docker Compose と同様に、Docker の公式コンテナ オーケストレーション プロジェクトです。違いは、Docker Compose が単一のサーバーまたはホスト上に複数のコンテナを作成するためのツールであるのに対し、Docker Swarm は複数のサーバーまたはホスト上にコンテナ クラスター サービスを作成できることです。マイクロサービスの展開には、明らかに Docker Swarm の方が適しています。

Docker 1.12.0 以降では、Docker エンジン (docker swarm) に Docker Swarm が組み込まれ、サービス検出ツールが組み込まれました。以前のようにサービス検出のために Etcd や Consul を設定する必要がなくなりました。

2. Docker Swarmアーキテクチャ

この図全体は、実際にはいわゆるクラスター内にあり、1 つ以上の実際のサーバーに対応する場合があります。各サーバーに Docker がインストールされ、HTTP ベースの Docker API が有効になっています。このクラスターには、クラスター内のコンテナ リソースを管理するために使用される SwarmManager マネージャーがあります。マネージャーの管理対象はサーバーレベルではなく、クラスターレベルです。つまり、マネージャーを通じてクラスターに一般的な指示を出すことはできますが、特定のサーバーで何を行うかを指定することはできません (これも Swarm の本質です)。具体的な管理の実装方法としては、Manager が HTTP インターフェースを外部に公開し、外部のユーザーがこの HTTP インターフェースを通じてクラスターを管理します。少し大きいクラスターの場合は、専用のマネージャーとして実際のサーバーを用意するのが最適です。学習目的で、マネージャーと管理対象を同じサーバーに配置することもできます。

3. Docker Swarmサービスのローリングアップデート

Docker Swarm はスムーズなサービス アップグレードを実現できます。つまり、ダウンタイムなしでサービスが更新され、クライアントはそれを認識しません。具体的な例を通してこれを説明しましょう。ここでは、ノード に nginx ベースの Web アプリケーション サービスをデプロイします。同じアプリケーションの2つのバージョン(バージョン1とバージョン2)を作成します。

Dockerfile を作成し、docker build を使用してコンパイルします。

nginxから
RUN echo '<h1>Swarm:バージョン 1 <h1>' > /usr/share/nginx/html/index.html

注: Swarm クラスター内のすべてのノードがイメージにアクセスできるようにするために、生成されたイメージを独自のイメージ リポジトリにアップロードします。

dockerログイン
ビルドは docker によって実行されます。
docker push collenzhao/mynginx:v1

Swarmサービスを作成する、つまりイメージを介してコンテナを起動する

docker サービス作成 -p 7788:80 --replicas 3 --name myswarmtest collenzhao/mynginx:v1

docker service ls を使用してデプロイされたサービスを表示します。

docker service ps myswarmtest を通じてデプロイされたサービスの詳細情報を表示します。

効果は下の図に示されています

以前のDockerfileを更新します。バージョン番号が2になることに注意してください。

nginxから
RUN echo '<h1>Swarm:バージョン 2 <h1>' > /usr/share/nginx/html/index.html

docker buildを使用してコンパイルする

ビルドは docker によって実行されます。

Docker push を使用して Docker Hub にアップロードする

docker push collenzhao/mynginx:v2

以前にSwarmにデプロイされたサービスを更新すると、バージョン番号は2になります

docker サービス更新 --image collenzhao/mynginx:v2 myswarmtest

効果は以下のとおりです

これで、Docker Swarm でサービスのローリング アップデートを実装するためのサンプル コードに関するこの記事は終了です。Docker Swarm のローリング アップデートの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker Swarmを使用してWordPressを構築する方法
  • デプロイから基本操作までDocker Swarm
  • docker swarm は指定されたノード上で指定されたコンテナをどのように実行しますか?
  • Docker Swarm のサービス検出と負荷分散の原則の詳細な説明
  • docker swarm クラスターの障害と例外の詳細な説明
  • Docker Swarmを使用してクラスターを構築する方法
  • Docker Swarm 入門例
  • Docker 1.12 を使用してマルチホスト Docker Swarm クラスターを構築する詳細な説明
  • Docker Swarmの概念と使用法の詳細な説明

<<:  MySql5.x を MySql8.x にアップグレードする方法と手順

>>:  MySQL マルチテーブル結合入門チュートリアル

推薦する

MySQL で時刻と日付の型を保存する際の選択問題を分析する

一般的なアプリケーションでは、timestamp、datetime、int 型を使用して時間形式を保...

Vue3 テーブルコンポーネントの使用

目次1. Antデザインビュー1. 公式ウェブサイトアドレス2. 使い方3.電子書籍テーブルを表示す...

mysql 8.0.20 winx64.zip 圧縮版のインストールと設定方法のグラフィックチュートリアル

mysql 8.0.20 winx64.zip圧縮版のインストールチュートリアルは以下のように記録さ...

MySQLは数百万のシミュレーションデータ操作コードを自動的に挿入します

私はデータベースツールとして Navicat を使用しています。他のものも同様です。 1. Navi...

MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci

参考: MySQL 文字セットの概要utf8mb4 は MySQL 8.0 のデフォルトの文字セット...

MySQL データベースの制約とデータ テーブルの設計原則

目次1. データベースの制約1.1 はじめに1.2 制約の種類1.3 ヌルでない1.4 ユニーク1....

MySQL の重複データの処理方法 (防止と削除)

一部の MySQL テーブルには重複レコードが含まれている場合があります。重複データが存在することを...

1行のコードでLinuxのプロセスを隠す方法を学ぶ

友人たちはいつも、Linux のプロセスを隠す方法を私に尋ねます。私は、どの程度隠したいのか、カーネ...

MySQLのデッドロックチェック処理の通常の方法

通常、デッドロックが発生すると、重みが最も小さい接続が強制終了され、ロールバックされます。ただし、最...

Linux システムによって報告される xfs_vm_releasepage 警告問題に対処する方法

問題の説明最近、いくつかのマシンで、一日のさまざまな時間に次の警告メッセージが表示されました。 3月...

MySQLの共通関数の概要

序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...

JavaScript キャンバスで動的な点と線の効果を実現

この記事では、動的な点と線の効果を実現するためのJavaScriptキャンバスの具体的なコードを参考...

メタビューポートはiPhoneでウェブページをフルスクリーン表示コントロールします

困り果てて、ふと、私がよく行くSinaのタッチスクリーン版はどうやって作られているのだろう?と考えま...

zabbix を使用して ogg プロセスを監視する (Linux プラットフォーム)

以前作成されたデータベースの ogg プロセスは、発見されるまでの約半月間ダウンしていました。起動で...

background-positionプロパティでのパーセンテージ値の使用法の検討

背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...