PuppetとDockerで構成管理してみる

Dockerではコンテナの設定をDockerfileで行ったり、Docker Hubなどに保存された情報からコンテナを作成しますが、ターミナルでサーバに接続して操作しているのでは手間に感じられることでしょう。

そこで試してみたいのがPuppetやChefを使ったDocker操作です。設定を行えば自動的な構成管理に近づくのではないでしょうか。今回はPuppetを使ってDockerを操作してみます。

Puppet自体についてはPuppetを使ったLinuxシステムの設定自動管理を参考にしてください。

PuppetのWebサイト

さくらのクラウドでUbuntuサーバを立てる

追加をクリックします

まずはPuppetのインストール先になるUbuntuサーバを立てます。もちろんさくらのクラウドを使って行います。アーカイブ選択にてUbuntu Server 14.04 LTS 64bit(基本セット)を選択します。

Ubuntu Server 14.04 LTS 64bit (基本セット)を選択してください

後は公開鍵を登録して、サーバを起動します。数分でサーバが立ち上がるはずです。

サーバが立ち上がったらSSHでログインします。公開鍵を登録してあるので、

$ ssh ubuntu@server_ip_address

でログインできます。server_ip_addressは適宜読み替えてください。

Puppetをインストール

まずはPuppetをインストールしましょう。apt-getでインストールできます。

$ sudo apt-get update
$ sudo apt-get install puppet puppetmaster
$ sudo apt-get install docker

インストールが終わったら設定ファイルを保存する場所を作成します。

$ sudo mkdir -p /etc/puppet/manifests

これで準備は完了です。

PuppetのDockerモジュールをインストール

続いてDockerモジュールをインストールします。

$ sudo puppet module install garethr/docker

これでDockerを扱う準備ができました。

設定ファイルを書いてみる

では実際に試してみましょう。 /etc/puppet/manifests/site.pp に以下のような記述をしてみましょう。

$ sudo vi /etc/puppet/manifests/site.pp
node default {
  include 'docker'
  docker::run { 'helloworld':
    image   => 'ubuntu',
    command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
  }
}

これは

$ sudo docker run ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

を実行したのと同じことになります。

Puppet経由で実行する場合は次のようにコマンドを打ちます。

$ sudo puppet apply /etc/puppet/manifests/site.pp

きちんと立ち上がっていれば、dockerコマンドで確認できます。

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
8f91e086ad82        ubuntu:14.04        "/bin/sh -c 'while t   17 minutes ago      Up 17 minutes                           jolly_ptolemy

なお、初回の起動時は ubuntu のコンテナを取得する時点で終わってしまうようです。2回目の実行から確認できるはずです。

さらに複雑な設定であれば次のように記述できます。

docker::run { 'helloworld':
  image        => 'ubuntu',
  command      => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
  ports        => ['4444', '4555'],
  volumes      => ['/var/lib/couchdb', '/var/log'],
  volumes_from => '6446ea52fbc9',
  memory_limit => 10485760, # bytes
  username     => 'example',
  hostname     => 'example.com',
  env          => ['FOO=BAR', 'FOO2=BAR2'],
  dns          => ['8.8.8.8', '8.8.4.4'],
}

DNS、ユーザ名、マウントするボリューム、ポート、環境変数も渡せるようになっています。より複雑なDockerコンテナの設定もPuppetを使うことでシンプルに運用できるようになりそうですね。

via Using Puppet - Docker Documentation

おしらせ