Docker Swarm の入手方法

Docker Swarm クラスタを作成するには、 swarm を実行可能なイメージをコンテナとして使うか、あるいは、実行可能な swarm バイナリをシステム上にインストールする方法があります。このページは2つの方法を紹介し、各々の賛否を議論します。

インタラクティブなコンテナでクラスタを作成

Docker Swarm 公式イメージを使ってクラスタを作成できます。イメージは Docker によって構築されたものであり、適切な自動構築を通して定期的に更新されています。イメージを使うには、Docker Engine の docker run コマンドを通してコンテナを実行します。Swarm を作成・管理するために、イメージには複数のオプションとサブコマンドを持っています。

イメージを初めて使う時、Docker Engine はイメージが自分の環境に既に存在しているかどうか確認します。Docker はデフォルトで swarm:latest バージョンを実行しますが、 latest 以外のタグも指定できます。イメージがローカルにダウンロード済みでも、Docker Hub 上に新しいバージョンが存在していれば Docker Engine はイメージをダウンロードします。

コンテナで Swarm イメージを実行

  1. Docker Engine を実行しているホスト上のターミナルを開きます。

Mac か Windows を使っている場合は、Docker Machine コマンドで Docker Engine ホストを起動し、ターミナルの環境を対象ホストに向ける必要があります。確証がなければ、次のようにして確認します。

$ docker-machine ls
NAME      ACTIVE   URL          STATE     URL                         SWARM   DOCKER    ERRORS
default   *       virtualbox   Running   tcp://192.168.99.100:2376           v1.9.1

これは Docker Engine ホスト上で動いている default インスタンス環境を示しています。

  1. swarm イメージを使ってコマンドを実行します。

最も簡単なのはイメージの助けを借りる方法です。次のコマンドはイメージで利用可能なオプションの全てを表示します。

$ docker run swarm --help
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
d681c900c6e3: Pull complete
188de6f24f3f: Pull complete
90b2ffb8d338: Pull complete
237af4efea94: Pull complete
3b3fc6f62107: Pull complete
7e6c9135b308: Pull complete
986340ab62f0: Pull complete
a9975e2cc0a3: Pull complete
Digest: sha256:c21fd414b0488637b1f05f13a59b032a3f9da5d818d31da1a4ca98a84c0c781b
Status: Downloaded newer image for swarm:latest
Usage: swarm [OPTIONS] COMMAND [arg...]

A Docker-native clustering system

Version: 1.0.1 (744e3a3)

Options:
  --debug           debug mode [$DEBUG]
  --log-level, -l "info"    Log level (options: debug, info, warn, error, fatal, panic)
  --help, -h            show help
  --version, -v         print the version

Commands:
  create, c Create a cluster
  list, l   List nodes in a cluster
  manage, m Manage a docker cluster
  join, j   join a docker cluster
  help, h   Shows a list of commands or help for one command

Run 'swarm COMMAND --help' for more information on a command.

この例では swarm イメージは Engine ホスト上に存在していないため、Engine はイメージをダウンロードします。ダウンロード後、イメージは help サブコマンドを実行し、ヘルプ・テキストを表示します。ヘルプを表示した後、 swarm イメージは終了し、ターミナル上のコマンドラインに戻ります。

  1. Engine ホスト上で実行しているコンテナ一覧を表示します。
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Swarm は動作していません。コマンドを実行後、 swarm イメージが終了したからです。

なぜイメージを使うのですか?

他の手法に比べ、Swarm コンテナには3つの重要な利点があります。

  • イメージを使えば、システム上にバイナリのインストールが不要。
  • docker run コマンドを実行するだけで、常に最新バージョンのイメージを毎回取得。
  • コンテナはホスト環境と Swarm を分離する。シェル上のパスや環境変数の指定・調整が不要。

Swarm イメージの実行は Swarm クラスタの作成・管理のために推奨されている方法です。こちらが Docker の全ドキュメントおよびチュートリアルで使われている手法です。

Swarm バイナリの実行

ホストのオペレーティング・システム(OS)上で直接 Swarm バイナリを実行する前に、ソースコードからバイナリをコンパイルするか、信頼できる別の場所からコピーする必要があります。そして Swarm のバイナリを実行します。

ソースコードから Swarm をコンパイルするには、 CONTRIBUTING.md の手順をご覧ください。

なぜバイナリを使うのですか?

他の手法に比べ、Swarm バイナリには1つの利点があります。もしあなたが swarm プロジェクトに貢献している開発者であれば、「コンテナ化」したバイナリを実行しなくても、コードに対する変更をテスト出来ます。

ホスト OS 上で Swarm バイナリを実行する場合は、3つの不利な点があります。

  • ソースからコンパイルする手間。
  • Docker コンテナによってもたらされる隔離などの利点は、バイナリには無い。
  • 大部分の Docker ドキュメントやチュートリアルは、バイナリで実行する方法では説明していない。

あとは、Swarm ノードは Engine を使わないので、ノード上では Docker Engine CLI のような Docker ベースのソフトウェア・ツールを使えません。