Docker をちゃんとやる Part2


Dcokerをちゃんとやる Part2

MLOpsを仕事で扱っていきたいので、その周辺の技術を学んでいくシリーズです。
本記事は、Dockerの2つ目の記事です。
今回は、Swarmを中心にまとめみました。

 

Docker Swarmって?

クラスタ管理機能、オーケストレーション機能の機能を使用することができます。
他にもこれから学ぶKubernetesも上記機能を実現できるものとして有名です。

クラスタ

クラスタとは、複数のサーバーを連携させて、一つのサーバであるかのように動作させることをいいます。
なぜ、クラスタ構成にするかというと、様々なメリットが有るためです。
例えば、可用性が挙げられます。
複数のサーバーのうち、仮に一つのサーバーがダウンしてもサービス自体は運用を継続することができます。

ノード

Docker Engine インスタンスのことを指しています。
manager node と worker nodeがあります。
manager nodeがworker nodeに指示(タスク)を出していきます。

サービス

アプリケーションを作り上げるための様々なタスクを、どのように実行するかという定義です。
どのイメージからどのコンテナをいくつ起動させるかなどを定義したものです。

Ingress オーバーレイネットワーク

Swarmでは、一つ一つのDokerホストマシンを一つのまとまりにしています。
その役割を担っているのが、Ingress オーバーレイネットワークです。
下記の図を見ればイメージしやすいと思います。
Image from Gyazo
下記記事より引用
【図解】Dockerの全体像を理解する -後編-

 

Docker Swarmを使ってみる

では、実際にDocker Swarmを使ってみたいと思います。

まず何もしていない状態の場合、Swarmがどうなっているか確認します。
下記のコマンドでswarmが使用されているか確認することができます。

swarmを初期化する

IPコマンド確認します。

初期化コマンドを実行します。

クラスタにノードを追加する

まず現在のnodeの数を確認します。

worker追加用のコマンドを打ちます。
これを実行すると、コマンドを教えてくれるので、それをそのままうちます。

上記のコマンドを2つのmachineに対して行った結果が下記になります。
worker nodeが2つ追加されていることがわかります。

 

Serviceについて

nodeを実行するためには、まずServiceを作成する必要があります。

よく使用されるコマンド

サービスの作成
docker service create –replicas [数] [イメージ名]

サービスのアップデート
docker service update

一つ前の状態に戻す
docker service rollback [サービス名]

サービスのスケール
docker service scale scale [サービス名]

スケジューリング

サービスによって作成されたタスクを各ノードに振り分ける機能のこといいます。

ローリングアップデート

サービスのアップデートを遅延時間を儲けて実行できる機能のことをいいます。
実行中のコンテナのリクエストを受けつつ、順番に他のコンテナをアップデートしていくことができます。

 

参考にした記事

Swarm
【図解】Dockerの全体像を理解する -後編-