PuppetとDockerで構成管理してみる
Dockerではコンテナの設定をDockerfileで行ったり、Docker Hubなどに保存された情報からコンテナを作成しますが、ターミナルでサーバに接続して操作しているのでは手間に感じられることでしょう。
そこで試してみたいのがPuppetやChefを使ったDocker操作です。設定を行えば自動的な構成管理に近づくのではないでしょうか。今回はPuppetを使ってDockerを操作してみます。
Puppet自体についてはPuppetを使ったLinuxシステムの設定自動管理を参考にしてください。
さくらのクラウドでUbuntuサーバを立てる
まずはPuppetのインストール先になるUbuntuサーバを立てます。もちろんさくらのクラウドを使って行います。アーカイブ選択にて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