docker imageを作る際に"cd"できなかった


下記ドキュメント通りにNagios core&pluginをインストールする手順を
そのままdocker imageに落とし込んでみようとして少しハマった話。
http://assets.nagios.com/downloads/nagioscore/docs/Installing_Nagios_Core_From_Source.pdf


内容はここに書いてある通りのことです
http://stackoverflow.com/questions/17891981/docker-run-cd-does-not-work-as-expected

## 環境
| 使用環境 | バージョン |
|:-----------|------------:|
| Mac OS X   |   10.9.2   |
| docker     | 0.8.1 |

## cdが効かない
#### image例
```docker

RUN cd /tmp
RUN wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.4.tar.gz
RUN tar zxvf nagios-4.0.4.tar.gz
RUN cd /tmp/nagios-4.0.4
RUN ./configure --with-command-group=nagcmd
```
よくあるtarballをダウンロード➡️解凍➡️configure➡️makeする流れ。

今回は/tmpにダウンロードして解凍、フォルダへ移動しconfigureすると考えていた。

しかし、docker buildでimageを作成する際、一命令毎にコンテナが作成される。
次の命令は前の命令のコンテナを基にした新しいコンテナで実行されるため、
カレントディレクトリは常に"/"となる。

この状態でbuildすると下記のようになる。

| コマンド |コンテナの挙動|
|:-----------|:------------|
| RUN cd /tmp   |   "cd /tmp"を実行   |
| RUN wget http://~/nagios-4.0.4.tar.gz     | nagios-4.0.4.tar.gzを"/"へダウンロード |
| RUN tar zxvf nagios-4.0.4.tar.gz     |"/nagios-4.0.4.tar.gz"を解凍 |
| RUN cd /tmp/nagios-4.0.4   |   "cd /tmp/nagios-4.0.4"を実行しようとしたが、指定場所にフォルダがないためエラー　⬅️ここでビルド失敗   |
| RUN ./configure --with-command-group=nagcmd   |      |

## 解決策
###&&でつないで一命令で処理する

```docker
RUN cd /tmp     && \
    wget http://~/nagios-4.0.4.tar.gz		&& \
    tar zxvf nagios-4.0.4.tar.gz			&& \
    cd /tmp/nagios-4.0.4					&& \
    ./configure --with-command-group=nagcmd
```

## まとめ
dockerでRUNできる回数は127回まで（version0.7.2以降）なので、
細かく分けるより、一回のRUNでまとめて処理した方が良さそう。
**docker imageをビルドする際はコンテナが作成されることを意識するというお話でした。**

https://github.com/dotcloud/docker/blob/master/CHANGELOG.md#072-2013-12-16


###完成したイメージ
```Dockerfile
FROM centos

# setup remi repository
RUN wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN curl -O http://rpms.famillecollet.com/RPM-GPG-KEY-remi; rpm --import RPM-GPG-KEY-remi
RUN rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
RUN yum -y update && yum -y upgrade

# setup tools
RUN yum -y groupinstall --enablerepo=epel,remi "Development Tools"
RUN yum install -y wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp

# Preparing to Nagios Install
RUN cd /tmp     && \
    wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.4.tar.gz && \
    wget http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz   && \
    tar zxvf nagios-4.0.4.tar.gz        && \
    tar zxvf nagios-plugins-2.0.tar.gz
RUN useradd nagios
RUN groupadd nagcmd
RUN usermod -a -G nagcmd nagios

# Nagios Install
RUN cd /tmp/nagios-4.0.4 && \
    ./configure --with-command-group=nagcmd && \
    make all                    && \
    make install                && \
    make install-init           && \
    make install-config         && \
    make install-commandmode    && \
    make install-webconf
RUN cp -R /tmp/nagios-4.0.4/contrib/eventhandlers/ /usr/local/nagios/libexec/
RUN chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers

# set nagios web password
RUN htpasswd -b -c /usr/local/nagios/etc/htpasswd.users nagiosadmin nagios

# set plugin
RUN cd /tmp/nagios-plugins-2.0/     && \
    ./configure --with-nagios-user=nagios --with-nagios-group=nagios    && \
    make          && \
    make install

# service start
CMD ["service","httpd","start"]

# expose http port
EXPOSE 80

```

docker pullでダウンロード可

```
docker pull  gacharion/nagios4.0.4
```
※コンテナに入ってhttpd,nagiosをstartさせる必要があるので、supervisor化しさせないと・・・