Dockerはじめました~その３~

#Docker Composeを使ってみた

---

##~目次~

・はじめに
・今回の目的
・Docker Composeとは
・Docker Composeの導入
・WordPress環境の構築
・今回のまとめ


---
##はじめに

Dockerを使用してWordPressの環境を構築していきます。
今回もMacでの構築になりますのでLinux、Windowsの方はご自身の環境に合わせて読んでいただけると幸いです。
また、毎回WordPressですみません。次回はWordPress以外を考えてますので今回はご了承ください。

以下、今回の環境
・Mac OSX Yosemite 10.10.5
・Docker 1.13.0

今回もスライドです。
またスライド？？？って思うかもしれませんがそこはスルーでお願いします。気にしたら負けです。

---

##今回の目的

今回もDockerでWordPress環境を構築していくのですが、前回述べた通り、今回は **Docker Conpose** を使用して、より効率の良い環境作りを目指します。

またそれに伴って、Docker Composeがどういった役割をしているかを説明できればと思います。

---

##Docker Composeとは

ではまず今回使用する Dokcer Compose なるものを説明していきます。

簡単に説明すると、複数の Docker コンテナからなるサービスを構築・実行する**手順をひとまとめに定義して自動化**することができる機能です。

---

###例えば...

今回の目的であるWordPressの場合、WordPress 本体が置かれているアプリケーション・サーバと MySQL サーバという大まかに二つのコンテナで構成されることになります。

本来はそれらのコンテナを個別に起動させ、さらにそれを関連付ける必要があります。

またDokcerで実行環境を立ち上げる場合、コンテナを起動する順序も考えなければいけないので、コンテナの数が増えてくると毎回起動する度に憂鬱になります。

---

そこで活躍するのが今回ご紹介する Docker Compose です。

この Dokcer Compose を利用することにより**コマンド一発で対象の全てのコンテナを起動・停止**することができます。

基本的な使い方は docker-compose.yml というYAML形式のファイルに設定を書き込んで起動させるだけです。

これにより先ほどの問題を解消して、効率良く実行環境を構築・起動・停止してくれます。便利ですね。

---

##Docker Composeの導入

では実際に使用するためにDocker Composeを導入します。
このDocker ComposerはDocker本体の機能ではなく、あくまでDocker Composeの機能なので使用する際にはインストールする必要があります。

とはいえ、現在は Docker for Mac/Windows に Docker Compose も導入されていますのでこれらをインストールした方は新たにインストールする必要はありません。
あくまで今まででDocker compose をインストールしてないという方のみ対象です。
※```$ dokcer-compose -v```
でバージョンが確認できたら導入済み。

---

では、インストールします。今回はコマンドラインから行います。
※すでにインストールしている方は飛ばして大丈夫です。

以下のcurlコマンドを入力してDocker Compose をインストールします。

```$ curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose```

次に実行権限を与えます。

```$ chmod +x /usr/local/bin/docker-compose```

これで無事にインストール完了です。

---

##WordPress環境の構築

無事 Dokcer Compose が使用できる環境が整ったのでこれを使用してWordPress環境を構築していきましょう。
手順は前回のDockerfileの時と少し似ています。

ではやっていきます。

---

まず初めに、ローカルの適当な場所に適当なディレクトリを作成します。
そしてその中に、 docker-compose.yml ファイルを作成します。
また、今回はmysqlの設定ファイルを分けますので別で「.env」ファイルを作成します。

sample_directory(適当なディレクトリ名)
  ├── .env
  └── docker-compose.yml←ここに記述します

次はこれらのファイルの中身を書いていきます。

---

```docker-compose.yml
version: "2"
services:
    wordpress:
        image: wordpress:latest
        ports:
            - "8080:80"
        depends_on:
            - db
        environment:
            WORDPRESS_DB_HOST: "db:3306"
        env_file: .env
    db:
        image: mysql:latest
        env_file: .env
        volumes:
            - db-data:/var/lib/mysql
 
volumes:
    db-data:
        driver: local
```

---

下記のユーザー名やパスワード等は任意になるのでそれぞれ設定してください。

```..env

WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wp_user
WORDPRESS_DB_PASSWORD=hogehoge
 
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=wordpress
MYSQL_USER=wp_user
MYSQL_PASSWORD=hogehoge

```

---

docker-compose.ymlファイルにもDockerfile同様に専用のコマンドやそれに関する記法が複数あります。

このファイルに書いてあるものはその中の一部ですが、初見ではさっぱりだと思いますのでここで使われているものをいくつか紹介します。

---
###このdocker-compose.ymlで使われている記法

version:
・docker-composeには現在２つのバージョンが存在します。主なフォーマットの違いでこれの指定により書き方が少し変わります。
現在はversion2が推奨されていますのでこちらを使用しています。

services:
・この環境で使用するサービスを指定。今回はwordpressとdatabaseを使用するという意味で記入しています。

image:
・使用するイメージを指定します。

---

ports:
・ポート番号を指定します。今回はポート8080を使用します。

depends_on:
・コンテナ同士をリンクさせます。ここではwordpressというサービスにdbというサービスをリンクさせています。

environment:
・環境変数を追加します。また今回は.envファイルを作成してそこにmysqlの設定を記入してそれを読み込むようにしています。

---

これでWordPressの環境を構築するための設定ができました。

あとはsample_directory内で以下のコマンドを入力します。

```$ docker-compose up -d```

これでWordPressの環境が構築できました。

http://localhost:8080/

```$ docker images``` や ```$ docker ps -a```

でイメージやコンテナを確認するとちゃんと生成されているのが確認できます。

---

##今回のまとめ

今回で基本的な構築方法はある程度学べた気がします。
あとはこれらをどう活かして効率の良い開発環境構築ができるかが課題になると思いました。
また他にも触れていないDockerのツールの知識も身に付けられればと思います。

---

###次回やること

次回は今まで学んできたことを活かして、WordPress以外の環境構築ができればと思います。
規模も少し大きくしていこうと思うので苦戦するかもしれませんが頑張ります。

---

###参考にさせていただいたサイト

http://docs.docker.jp/compose/compose-file.html#volumes-volume-driver
https://tech.recruit-mp.co.jp/infrastructure/post-11266/
http://knowledge.sakura.ad.jp/knowledge/5736/
https://academy.gmocloud.com/advance/20160118/1557
https://www.upcloud.com/support/deploy-wordpress-with-docker-compose/


---

#オワリ＼(^o^)／