Dockerの開発環境構築 (Mac + Docker + PHP + Apache)

#はじめに
　ホスト側（ローカルマシン上）に作成したWebページを
　Dockerコンテナを通して、ブラウザに出力（"Hello Docker"）するまでの手順を記載します。
　※ シンプルな手順としたい為、PHP+Apacheを選択しました。
　※ マシンのOSのバージョンは、macOS High Sierra 10.13.4です。

#前提条件
　Docker for Macをダウンロードする際、Dockerの公式サイトにログインする必要があります。
　Dockerの公式サイトにログインするためのユーザを作成して下さい。

#1. Docker for Mac
##1-1. ダウンロード
　以下のサイトからダウンロードします。
　https://docs.docker.com/docker-for-mac/install/

　(1) 「Download from Docker Store」を押下します。
　　![install01.png](https://qiita-image-store.s3.amazonaws.com/0/165180/3656975b-a050-066c-9e00-bb6683461135.png)

　(2) 「Please Login To Download」を押下します。
　　![install02.png](https://qiita-image-store.s3.amazonaws.com/0/165180/35c7cdfa-1670-7d0e-2919-99bd447d57a6.png)

　(3) 「Get Docker」を押下します。
　　![install03.png](https://qiita-image-store.s3.amazonaws.com/0/165180/6892d4f4-c9e3-a610-31cf-b9d63531f990.png)

##1-2. インストール
　(1) Docker.dmgの実行
　　ダウンロードした「Docker.dmg」を実行して下さい。
　(2) Applicationsに移動
　　DockerをApplicationsに移動させます。
　　<img width="832" alt="install3.png" src="https://qiita-image-store.s3.amazonaws.com/0/165180/249d6e95-1604-ed90-c1d7-bba895c0c3a6.png">

　(3) Dockerの実行

##1-3. 確認
　ターミナルを開き、「docker version」を実行します。
　以下のように出力されていれば、インストールは成功です。　

```php
$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true
```

#2. Dockerイメージのビルド
##2-1. Dockerfileの作成
　Dockerイメージをビルドするためには、Dockerfileが必要です。
　任意のディレクトリを作成し、そのディレクトリ配下に Dockerfileを作成します。
　以下の例では、「php_apache」ディレクトリの配下に Dockerfileを作成しています。

```php
$ mkdir php_apache
$ cd php_apache/
$ touch Dockerfile
```

##2-2. Dockerfileの設定
　公式のイメージを利用するため、Dockerfileに以下のように記載します。

```php:Dockerfile
FROM php:7.2.7-apache
```

　FROMには、ベースとなるイメージとタグを指定します。
　この例では、公式のイメージ「PHP」のタグ「7.2.7-apache」を指定しています。
　※ 「7.2.7-apache」には、PHP7.2.7とApacheが1つのコンテナに含まれています。
　※ 以下のサイトがPHPの公式リポジトリです。
　　利用可能なタグの確認が行えます。
　　https://hub.docker.com/_/php/

##2-3. ビルド
　ターミナルで、「docker build {Dockerfileのパス} -t {ビルドするイメージにつけるリポジトリ名:タグ名}」を実行します。
　ここでは、「docker build ./ -t php_apache_image:ver001」を実行しました。　
　以下のように出力されていれば、成功です。

```php
$ docker build ./ -t php_apache_image:ver001
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM php:7.2.7-apache
7.2.7-apache: Pulling from library/php
683abbb4ea60: Pull complete 
5ba6c1ec1bb7: Pull complete 
30c400495d2e: Pull complete 
47082fd94ae9: Pull complete 
db1399ce8b37: Pull complete 
d9055cd97604: Pull complete 
3dc42f043a06: Pull complete 
718b9cd7325a: Pull complete 
a7b97ac10aed: Pull complete 
24e62ac9193c: Pull complete 
ab519c71ddf5: Pull complete 
4bb2eea5ed3b: Pull complete 
839db073d17d: Pull complete 
694b4d33596a: Pull complete 
91d76bc9d54f: Pull complete 
Digest: sha256:868995dfcc485ee259b5102ccb7e56c9ead60677450fe755d5ad3d338395f632
Status: Downloaded newer image for php:7.2.7-apache
 ---> c2700d1900ac
Successfully built c2700d1900ac
Successfully tagged php_apache_image:ver001
```
　※ タグ名を省略した場合は、「latest」というタグ名が付きます。

##2-4. 確認
　ターミナルで、「docker images」を実行します。

```php
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
php                 7.2.7-apache        c2700d1900ac        6 days ago          377MB
php_apache_image    ver001              c2700d1900ac        6 days ago          377MB
```

#3. Webページの作成
　ホスト側（ローカルマシン上）に"Hello Docker"を出力するためのPHPファイルを作成します。

```php
$ mkdir html
$ cd html
$ touch index.php
```

　※ Dockerコンテナ内のファイルは永続化されません。
　　ホスト側のディレクトリをコンテナ側にマウントすることで、データの永続化が可能となります。
　　ここでは、Dockerfileと同じディレクトリにマウント用のディレクトリ（html）を作成し、
　　その配下にPHPファイルを作成しました。

　PHPファイルには以下を記載します。

```php:index.php
<?php echo 'Hello Docker'; ?>
```

#4. コンテナの起動
#4-1. 起動
　ターミナルで、「docker run」を実行します。
　ここでは、以下のようにコマンドを実行しました。　
　docker run -d -p 80:80 -v /Users/Sample/Docker/php_apache/html:/var/www/html --name php_apache_container php_apache_image:ver001

```php
-d:バックグラウンドで実行するオプション
-p:ホスト側のポート:コンテナ側のポートを指定
-v:マウントしたいディレクトリを ホスト側のパス:ゲスト側のパス で指定
--name:コンテナの名前を指定(名前を指定していないと自動的に付けられる)
* コンテナの元となるイメージphp_apache_image:ver001を指定
```

　以下のように出力されていれば、成功です。

```php
$ docker run -d -p 80:80 -v /Users/Sample/Docker/php_apache/html:/var/www/html --name php_apache_container php_apache_image:ver001
e9dd2b376a48b5f49f67467423fb01cf1e833f5ab4cd0bf723820403c18098c3
```

#4-2. 確認
　ターミナルで、「docker ps -a」を実行します。
　php_apache_containerが起動（STATUSが"up"）していることが確認できます。

```php
$ docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                NAMES
e9dd2b376a48        php_apache_image:ver001   "docker-php-entrypoi…"   13 minutes ago      Up 13 minutes       0.0.0.0:80->80/tcp   php_apache_container
```

#5. Webページの確認
　ブラウザで「localhost/index.php」もしくは、「localhost/」を実行して下さい。
　"Hello Docker"が出力されていれば、成功です。


以上で、手順が完了です。

#参考元
[DockerをMacにインストールする](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)
[Dockerイメージとコンテナの削除方法](https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae)