DockerでPuppet Dashboardを動かす！

Puppet DashboardはCentOS6の公式イメージを利用して動かせます。
以下、イメージ作成の手順です。

**手順1)** 公式CentOS6イメージを取得

```
# docker pull centos:centos6
```

**手順2)** 公式CentOS6イメージを起動し、前回の記事のPuppet Dasboardセットアップ手順のうち“SSL証明書の生成”までを実施します。

```
# docker run -i -t centos:centos6 /bin/bash
```

前回の記事で書いた通り、Docker環境ではリゾルバの問題で動作が異常に遅くなる場合がありますので、前回の記事を参考に設定を変更してください。

**手順3)** 手順2)まで完了したイメージをコミットする

```
# docker commit [container id] denka/centos6:dashboard_template
```

**手順4)** 手順3)で作成したイメージを元に以下のDockerfileでイメージをビルドする。

```
# docker build -t denka/centos6:dashboard .

---
FROM denka/centos6:dashboard_template
MAINTAINER denka

# change timezone to Asia/Tokyo
ADD clock /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# Entrypoint
CMD echo '#' > /etc/resolv.conf ; /sbin/service mysqld start ; /sbin/service puppetmaster start ; /sbin/service puppet-dashboard start ; service puppet-dashboard-workers start ; chmod 666 /usr/share/puppet-dashboard/log/production.log ; service puppet-dashboard-workers restart ; /usr/bin/puppet agent -t ; puppet apply -e 'file{"/host_files/hosts": content=>"${ipaddress_eth0} puppet\n", ensure=>present,}' ; /usr/bin/tail -f /dev/null
---
```

**puppet-masterを同梱する例：**

```
---
FROM denka/centos6:dashboard_template
MAINTAINER denka

# change timezone to Asia/Tokyo
ADD clock /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# create yum repository files
RUN rm -f /etc/yum.repos.d/CentOS-*.repo
ADD DVD.repo /etc/yum.repos.d/DVD.repo
ADD puprepo.repo /etc/yum.repos.d/puprepo.repo

# install puppet server
RUN yum install -y puppet-server
RUN yum install -y httpd
ADD puppet.conf /etc/puppet/puppet.conf
ADD dist/ /etc/puppet/modules/dist/
ADD site/ /etc/puppet/modules/site/

# create yum repository
ADD centos65/ /var/www/html/centos65/
ADD centos66/ /var/www/html/centos66/

# Entrypoint
CMD echo '#' > /etc/resolv.conf ; /sbin/service httpd start ; /sbin/service mysqld start ; /sbin/service puppetmaster start ; /sbin/service puppet-dashboard start ; service puppet-dashboard-workers start ; chmod 666 /usr/share/puppet-dashboard/log/production.log ; service puppet-dashboard-workers restart ; /usr/bin/puppet agent -t ; puppet apply -e 'file{"/host_files/hosts": content=>"${ipaddress_eth0} puppet\n", ensure=>present,}' ; /usr/bin/tail -f /dev/null
---
```

**手順5)** hostsファイル同期用のディレクトリを作成する

手順4)のEntrypointでは/root/container_filesにhostsファイル同期用のファイルを作成するようになっているので、対象ディレクトリを作成します。
※ディレクトリを変更する場合は該当箇所を置換します

```
# mkdir /root/container_files
```


**手順6)** Puppet Dashboardコンテナの起動

以下のコマンドラインで起動します。必須の指定オプションは以下の通りです。

**-h:** コンテナのホスト名。“puppet”と指定すること。
**-p:** ポートフォワード。“3000:3000”“8140:8140”を指定すること。
**-v:** ディレクトリのマウント。“/root/container_files:/host_file”を指定すること。

```
# docker run -i -t -h puppet -p 3000:3000 -p 8410:8140  -v /root/container_files:/host_files -d denka/centos6:dashboard
```

コンテナでコンソールを開くには以下のようにします。

```
# nsenter -t `docker inspect \`docker ps | grep dashboard | awk '{print $1}'\` | grep "Pid" | awk '{print $2}' | awk 'gsub(/,/,"")'` -m -u -i -p /bin/bash
```

**手順7)** agent用コンテナのビルド

以下のようなDockerfileを利用して作成します。

```
---
FROM centos:centos6
MAINTAINER denka

# change timezone to Asia/Tokyo
ADD clock /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# create yum repository files（必要に応じて追加すること）
RUN rm -f /etc/yum.repos.d/CentOS-*.repo
ADD DVD.repo /etc/yum.repos.d/DVD.repo

# install puppet
RUN yum install -y puppet
ADD puppet.conf /etc/puppet/puppet.conf

# Entrypoint
CMD cat /host_files/hosts >> /etc/hosts ; /bin/bash
---

# docker build -t denka/centos6:puppet .
```


**手順8)** agent用コンテナの起動

以下のコマンドラインで起動します。必須の指定オプションは以下の通りです。

**-v:** ディレクトリのマウント。“/root/container_files:/host_file”を指定すること。

```
# docker run -i -t -v /root/container_files:/host_files --rm denka/centos6:puppet
```

この環境ですが、Puppet Dashboardのお試し用としてはもちろんですが、Puppetマニフェストの開発環境としてもなかなか重宝します。何しろシステムに変更加えてもコンテナ起動し直せばリセットできるんで、VMイメージをコピーし直したりするよりは全然速い便利ですよ(ﾟ∀ﾟ)