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 ベースのソフトウェア・ツールで扱えません。