読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

Figを使ってみる

Docker

概要

Figというyamlファイルを用いて複数のDockerコンテナを一元管理するツールを使ってみます。

環境

  • Ubuntu 14.04
  • Docker 1.4.1
  • Fig 1.0.1

インストール

事前準備

FigDocker 1.3以上で動作します。CoreOSや通常のaptなどでインストールできるバージョンは低いので最新版にします。

最新のDockerのインストール

を参考に最新版をインストールしてください。

Figのインストール

rootになって以下を実行します。

$ sudo su
# curl -L https://github.com/docker/fig/releases/download/1.0.1/fig-`uname -s`-`uname -m` > /usr/local/bin/fig; chmod +x /usr/local/bin/fig

確認します。

$ fig --version
fig 1.0.1

使ってみる

yamlファイルの作成

今回はNginxのコンテナを作成してみます。fig.ymlに以下を書いてください。

web:
  image: nginx
  ports:
    - '80:80'

コンテナの起動

fig.ymlのあるフォルダでコマンド実行します。fig upだとフォアグラウンドで起動してしまうので、-dをつけてバックグラウンドで起動します。

$ fig up -d

イメージのダウンロード&起動が完了したらプロセスを確認します。

$ fig ps
    Name              Command          State              Ports           
--------------------------------------------------------------------------
vagrant_web_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:80->80/tcp

動作確認します。

$ curl localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

コンテナの停止

$ fig stop
Stopping vagrant_web_1...

確認します。

$ fig ps
    Name              Command          State    Ports
-----------------------------------------------------
vagrant_web_1   nginx -g daemon off;   Exit 0 

スケールアウト

そもままだとポートがかぶるのでfig.ymlを少し修正します。

web:
  image: nginx
  ports:
    - '80'

まず1つだけ起動します。

$ fig up -d
Creating vagrant_web_1...

次にスケールアウトします。

$ fig scale web=3
Starting vagrant_web_2...
Starting vagrant_web_3...

一瞬でスケールアウトできますね。
当然ポートは自動で割り当てられるので、fig psdocker inspectで調べたりする必要があります。

$ fig ps
    Name              Command          State               Ports             
-----------------------------------------------------------------------------
vagrant_web_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:49153->80/tcp
vagrant_web_2   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:49154->80/tcp
vagrant_web_3   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:49155->80/tcp

繋がるか確認してみましょう。

$ curl localhost:49154
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

コンテナの削除

Figだとコンテナの削除も簡単です。

$ fig rm
Going to remove vagrant_web_3, vagrant_web_2, vagrant_web_1
Are you sure? [yN] y
Removing vagrant_web_3...
Removing vagrant_web_2...
Removing vagrant_web_1...

以上です。お疲れ様でした。

参考