Docker環境を整えてLAMP環境を作ってみた

# はじめに
今更ながらですが、Docker環境を使いたいけれども、ネット上だと情報が散財していてより良い判断ができなかったので、
自分用にまとめました。

# 環境
|#|OS/ソフトウェア/ライブラリ|バージョン|
|:---|:---|:---|:---|:---|
|1|Mac OS X|EI Capitan|
|2|Docker for Mac|最新版|

# 構築

## Docker for Macのインストール

- [Install Docker for Mac](https://docs.docker.com/docker-for-mac/install/#what-to-know-before-you-install)にアクセスします。
- Get Docker for Mac(Stable)をダウンロードします。
- Docker.appをApplications以下に配置します。

## アプリケーションの起動

- Applicationsに配置したDocker.appを起動します。

## 準備するファイル

これらをDockerFileと同階層のディレクトリに配置してください。
ファイル自体で載せられるものは後追いで追記するかもです。

- DockerFile（以下記載）
- sshd_config（環境設定を加えたもの）
- authorized_keys（SSH鍵認証の公開鍵）
- server.crt,server.key（SSL証明書と鍵）
- httpd.conf（環境設定を加えたもの）
- ssl.conf（環境設定を加えたもの）
- my.cnf（環境設定を加えたもの）
- php.ini（環境設定を加えたもの）

# DockerFileを作成

## DockerFile

```txt:dockerfile
FROM centos:centos6
MAINTAINER {氏名} <{メールアドレス}>

RUN yum clean all && yum -y update
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN yum clean all
RUN yum install -y sudo syslog rsync

### ssh
RUN yum install -y openssh-server
RUN sed -ri "s/^UsePAM yes/#UsePAM yes/" /etc/ssh/sshd_config
RUN sed -ri "s/^#UsePAM no/UsePAM no/" /etc/ssh/sshd_config
RUN mkdir -m 700 /root/.ssh
ADD authorized_keys authorized_keys
RUN mv authorized_keys /root/.ssh/authorized_keys
RUN chmod 600 /root/.ssh/authorized_keys && chown root:root /root/.ssh/authorized_keys

### apache
RUN yum install -y httpd mod_ssl openssl openssl-devel
ADD server.crt server.crt
RUN mv server.crt /etc/httpd/conf.d/server.crt
ADD server.key server.key
RUN mv server.key /etc/httpd/conf.d/server.key
ADD httpd.conf httpd.conf
RUN mv httpd.conf /etc/httpd/conf/httpd.conf
ADD ssl.conf ssl.conf
RUN mv ssl.conf /etc/httpd/conf.d/ssl.conf

### mysql
RUN yum install -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
RUN yum install -y mysql mysql-devel mysql-server mysql-utilities
ADD my.cnf my.cnf
RUN mv my.cnf /etc/my.cnf

### php
RUN yum -y --enablerepo=remi-php56 install \
php \
php-opcache \
php-devel \
php-mysql \
php-mcrypt \
php-phpunit-PHPUnit \
php-pecl-xdebug \
php-pecl-xhprof \
php-mbstring \
php-pecl-solr
ADD php.ini php.ini
RUN mv php.ini /etc/php.ini

EXPOSE 22 80 443 3306
ENTRYPOINT /etc/rc.d/init.d/sshd start && /etc/rc.d/init.d/httpd start && /etc/rc.d/init.d/mysqld start && /bin/bash
```

## 簡単な説明

1. OSはCenOS6を利用します。
2. yumを最新版にアップデートします。
3. ローカル環境からDocker環境にファイルをアップロードしたいのでrsyncを入れます。
4. SSHをインストールします。
5. SSHは鍵認証をしたいので予め用意していた公開鍵を設置します。
6. Apacheをインストールします。
7. ApacheはSSL環境を使いたいので、予め用意していた証明書を設置します。
8. MySQLをインストールします。
9. MySQLの基本設定を加えた設定ファイルを設置します。
10. PHPをインストールします。
11. PHPの基本設定を加えた設定ファイルを設置します。
12. 必要なポートを開けます。
13. SSH、Apache、MySQLを起動します。

# 仮想環境の構築

# ビルドを実行する

Dockerfileの設置している箇所に移動し、以下のビルドコマンドを実行します。

```
docker build --no-cache=true -t  neriai/lamp:1.0 .
```

# 仮想環境を起動

構築したコンテナを起動します。ポートが良くぶつかり合うのを避けるためそれぞれ置き直してます。
コンテナ画面に正常に切り替わったら完成です。

```
docker run -it -p 10022:22 -p 10080:80 -p 13306:3306 neriai/lamp:1.0 /bin/bash
```

# FAQ

---

> コンテナから抜けるにはどうするの？
>>　exitすれば終了します。

> コンテナに再度入りたい場合はどうするの？
>> ```
>> docker attach {コンテナID}
>> ```

> コンテナに上手く入れないんだけどなぜ？
>> プロセスが終了している可能性があります。以下のコマンドを打ってみてください。

>> ```
>> docker ps -a
>> ```

> コンテナのプロセスを再開させるには？
>> ```bash
>> docker start {コンテナID}
>> ```

> 作成したイメージを削除するには？
>> ```
>> docker rmi {イメージID}
>> ```

> プロセスが残っているみたいでイメージが削除できません。とりあえず全部消したいです。
>> ```
>> docker rm `docker ps -a -q`
>> ```

> コンテナの中の設定を色々変えたんだけどどうすればいいの？
>>　一旦消えないように保存してみてはどうでしょうか。

>> ```
>> docker commit [コンテナID]
>> ```