これまではSerfの基本的な使い方や,
Dockerコンテナ群をSerfで管理する方法
DockerはLinuxコンテナを簡単に起動・Dockerfile
と言う設定ファイルを使った構成管理の自動化などの利点があります。
コンテナ管理問題を解決するSerf
コンテナを多く立ちあげた時に発生するのは,docker exec
コマンドを実行することにより,
docker exec
は,docker exec
を実行するのは手間になりがちです。また,
この問題を解決するために,
そこで登場するのが,
- メンバー管理の自動化
Serfがコンテナのホスト名とIPアドレスを自動的に管理するため,
コンテナの起動・ 停止時に人手で管理する必要がありません。 - タグ機能でコンテナの役割を明確化
Serfはエージェントにタグを動的に付与でき,
コンテナの役割や管理担当者の情報を動的に付与できます。 - イベントハンドラでコンテナ内の一斉操作
コンテナにログインすることなく任意のコマンドを一斉に実行できます。開発環境やテスト環境を問わず,
有用な機能です。
いずれも手動でも行えますが,
図1は1つのホスト上で複数のコンテナを管理するイメージです。この図ではホストOS側・172.
で固定されているため,172.
にしておくと便利です。
自動的にSerfクラスタを構成するDockerfile
Dockerでコンテナを起動・bash
を実行させてみます。
前提として,serf agent
等のコマンドで起動しているものとします。この時,172.
をバインドしている必要がありますserf agent -bind=172.
として明示することもできます)。
自動的にSerfを起動するためにはDockerfile
を用います。Dockerには,Dockerfile
という名称のテキスト形式のファイルを作成し,
作業用のディレクトリを作成し,Dockerfile
を作成します。内容はcentos
のコンテナイメージの使用を明示し,wget
とunzip
パッケージの取得を行っています。それからserfのアーカイブを取得・
FROM centos
RUN yum -y install wget unzip
RUN wget -O 0.6.4_linux_amd64.zip https://dl.bintray.com/mitchellh/serf/0.6.4_linux_amd64.zip
RUN unzip 0.6.4_linux_amd64.zip
RUN cp ./serf /usr/bin/serf
ENTRYPOINT ["serf"]
CMD ["agent","-join=172.17.42.1","-event-handler=query:ssh=/bin/sh"]
※ 実際のDockerfileは,
次に,Dockerfile
を元にdocker build
コマンドを使い,serf-centos
というタグを付けていますが,<ユーザ名>/serf-centos
など,
# docker build -t serf-centos . Sending build context to Docker daemon 3.31 MB Sending build context to Docker daemon Step 0 : FROM centos ---> 9dbcac75201e Step 1 : RUN yum -y install wget unzip ---> Using cache ---> 7d35b2710d1d Step 2 : RUN wget -O 0.6.4_linux_amd64.zip https://dl.bintray.com/mitchellh/serf/0.6.4_linux_amd64.zip ---> Using cache ---> 6f943b9c59cd (省略) Successfully built 5aa497793ab2
画面上にSuccessfully
と表示されれば,serf-centos
という名称のコンテナイメージが作成できました。次は,docker run
コマンドを使い,
# docker run -d serf-centos 175dbd9034122edff3af72804c1a8cc8e968ebed5d53c25259e375f82b4b40f4
コンテナが正常に稼働しているかどうかは,docker ps
コマンドで確認することができます。ここでは自動的にSerfクラスタを形成しているか確認するためにserf members
コマンドを実行してみます。正常であれば,
# serf members dev2.pocketstudio.net 172.17.42.1:7946 alive 3f42611e8fe7 172.17.0.10:7946 alive
同時に複数台の起動も試してみましょう。先ほど同様docker run -d serf-centos
を数回実行した後,serf members
コマンドを実行します。次のように,
# serf members dev2.pocketstudio.net 172.17.42.1:7946 alive 3f42611e8fe7 172.17.0.10:7946 alive 0f8a23cdc921 172.17.0.11:7946 alive 4bbedca26a70 172.17.0.14:7946 alive 175dbd903412 172.17.0.15:7946 alive