Docker Composeを使ってWordPress環境を作る

先日、Dockerでnginxとphp-fpmを起動する手順Dockerfileを作る手順と注意点と参考サイトを公開しました。

今回はより便利なDocker Composeを使った複数のコンテナの管理を書いていきます。
今回も前回同様に、Docker初心者向けの記事となります。
※なお、docker runやDockerfileを作成したことが無いと、どういったメリットがあるか感じにくいと思いますので、事前にdocker runしたりDockerfileまで作成してみることをおすすめします。

Docker Composeとは

docker-composeの公式リファレンスには下記のように記載があります。

複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。Compose はアプリケーションのサービスの設定に、Compose ファイルを使います。そして、コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。

今まではDockerfileでビルドしたイメージをdocker runのオプションを駆使して、複数コンテナを一つずつ実行していましたが、docker-composeを使うことで簡単に複数のコンテナがリンクした環境を作ることが可能です。

では実際に試してみます。

Docker ComposeでWordPress環境を作る

docker-compose.ymlというファイルにyaml形式で、コンテナの情報を記載していくことで、簡単にコンテナ環境を作成することができます。
公式リファレンスにdocker-composeを使って、WordPress環境を作成する手順が記載されていますので、まずはその通りに実施します。

環境

docker for macで進めていきます。バージョンは下記の通りです。
※docker 1.8以降からはdocker tool boxを利用するようになったようで、macであればdocker for macと一緒にtool boxの中にdocker-composeが含まれているかと思います。もしdocker-composeがなければ、dockerの公式サイトからインストールを実施してください。

$ docker -v
Docker version 1.13.0, build 49bf474
$ docker-compose -v
docker-compose version 1.10.0, build 4bd6f1a

ディレクトリを作成する

どこでも良いのでGit管理しやすいように適当な場所にディレクトリを作成して、移動します。

$ mkdir my-wordpress
$ cd my-wordpress

docker-compose.ymlを作成する。

公式リファレンスの内容をコピーして、docker-compose.ymlにペーストします。

version: '2'
services:
  db:
    image: mysql:5.7
    volumes:
      - "./.data/db:/var/lib/mysql"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    links:
      - db
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: wordpress

おそらくすでにdocker runしたり、Dockerfileまで作成したことがある人であれば、大方書いて有ることはわかるかと思います。
データベースのデータはvolumeオプションで、dockerのホストのローカルに保存されるようになっています。
docker runのオプションなどで指定したものがyaml形式に落とし込まれているイメージです。
また、ここに書いてあるように、有名なOSSのアプリケーションはだいたいイメージがアップロードされています。
公式で出されているイメージも多いので、それらを活用することで大幅に作業効率を向上することが可能です。

なお、注意点としてはdocker-compose.ymlのバージョンが、最新版が2(2017年2月8日現在)となっていることです。
バージョン1と書き方が若干変わっているのと、使用可能なオプションが2のほうが増えています。バージョン2前提が記載していたら、1のままでオプションが使えない~とならないよう注意してください。

コンテナを起動する

$ docker-compose up -d

-dは例のごとくデタッチドモードになります。upオプションを使うことで、docker-compose.ymlに記載されている流れのとおりに、イメージをダウンロードして、コンテナを起動するまで一気にやってくれます。
すでにイメージがある場合は、起動をしてくれます。

コンテナの起動状況を確認する

$ docker-compose ps
           Name                         Command               State          Ports
------------------------------------------------------------------------------------------
wordpresstest1_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp
wordpresstest1_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp

StateがUPになっていればOKです。これがExitなど、UP以外になっている場合は起動に失敗している可能性があります。

サイトにアクセスする

ブラウザでhttp://localhost:8000/にアクセスします。
そうするとWordPressのインストール画面が表示されたと思います。
そのあとは画面に沿って進めれば、サイトが表示されるかと思います。


※どうでもいいけどhttp://localhost:8000が結構はてブされているのがツボでしたw

以上で、Docker Composeを使ってWordPress環境が作成できました。

まとめ

いかがでしたでしょうか?
あっという間にWordPress環境が作れたのではないかと思います。

私が「Docker楽しいのでは??」となりはじめたのも、Docker Composeで上記WordPress環境を作成してみて感じるようになりました。
あっという間に手間無しで作れてしまうのでとても便利で、しかも楽しいです。

Vagrantでも簡単にWordPress環境が作成できたりすると思いますが、Dockerほど高速ではありません。
また、yaml形式の記述は可読性が高く、とても覚えやすいのが特徴です。
hub.docker.comを探せば、有名どころはほぼ網羅されているのではというくらいイメージがあります。
私がちらっとみただけでも、PukiwikiやECCUBE,joomla,mediatomb,mediawikiなどなど、なんでもあります。

もし、まだ Docker Composeを触ったことがないようでしたら、ぜひ触ってみてください。
おすすめです。

Dockerfileを作る手順と注意点と参考サイト

前回、docker runででnginxとphp-fpmを起動する手順をブログに書きました。
今回は、Docker初心者の私が、Dockerfileを使って基本的なイメージを作成した上で、コンテナを起動する手順をまとめておきます。

手順

大まかには下記手順で進めていきます。

  1. 手順を確立する
  2. Dockerfileを作成する
  3. イメージをビルドする
  4. docker runを実行する

1. 手順を確立する

まず、いきなりDockerfileを作りだすと失敗するので、下記を読んでからはじめると良さそうです。

上記サイトはとても参考になることが書かれていました。
というのもイメージのビルドにはやはり数十秒から数分かかりますので、自分がベストだという流れのイメージを持たないままDockerfileを作り出すと失敗します。
最初に、上記サイトにも書かれているとおりにdocker runでコンテナの中に入った上で、必要なパッケージを調べたり、依存するディレクトリやファイルを確認しておくのが良さそうです。

2. Dockerfileを作成する

先日作成したCentOSにPC1のpuppet-agentが含まれるDockerfileを作成した手順を例にします。
最初からpuppet-agentが含まれるCentOSのイメージがほしかったので作成しました。
※puppet-agentのダウンロード時間分、時間の短縮につながります。

$ vim Dockerfile
FROM centos:7
MAINTAINER inamuu "https://github.com/kzm0211/"

RUN rpm -U http://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm \
    && yum -y -q install puppet-agent \
    && rpm -e puppetlabs-release-pc1 \
    ;\
    yum clean all

CMD ["/bin/bash"]

FROMでベースになるイメージを指定します。
つぎに、MAINTAINERを指定します。ここはメールアドレスを書いたりする人もいるようです。
そして、実行するコマンドを記述します。
最後に、このプロセスが実行するコマンドを記載します。

ちなみに、yum clean allとかしているのは割りとDockerfileの常套手段で、少しでもイメージが小さくなるように不要なものは削除するのが好ましいようです。

3. イメージをビルドする

イメージをビルドします。
Dockerfileのあるディレクトリで下記コマンドを実施します。※最後に “.”があるのが注意点です。

$ docker build -t kzm0211/centos7-puppet-agent .
Sending build context to Docker daemon 6.656 kB
Step 1 : FROM nginx:latest
 ---> 01f818af747d
Step 2 : MAINTAINER inamuu
 ---> Running in 3a11f2cf6a1f
 ---> c3d117fb179f
Removing intermediate container 3a11f2cf6a1f
Step 3 : ADD var/www/html/ /var/www/html
 ---> a93bb651dc09
Removing intermediate container 6aa60a7ef484
Step 4 : ADD etc/nginx/ /etc/nginx/
 ---> eeccde5ed2e1
Removing intermediate container c0c1776af375
Successfully built eeccde5ed2e1

4. docker runを実行する

あとは、通常通りdocker runでビルドしたイメージを指定すればOKです。

$ docker run --rm --name centos7-test1 -dti kzm0211/centos7-puppet-agent  /bin/bash

※ –rm で終了したらコンテナが削除されて残骸が残らない
※ -d でデタッチドモード。コンテナに即座に入らないので、入ったり抜けたりするのが便利
※ –name でコンテナ名を指定しないとわけわからない名前が勝手に付与されるので、操作性が下がらないようにわかりやすい名前を指定する

おまけ

上記Dockerfileは、hub.docker.com で公開しています。
会社の人がhub.docker.comを参考にDockerfileを作ると良いと教えてくれたのでよく見るようにしています。
ここのサイトには、Dockerfileを公開するために鎬を削ってDockerfileのイメージを小さくするようにあの手この手が書いてあるのでとても参考になります。

あと、さらっと公式のリファレンス を読むと良さそうです。
これを見るだけで全然理解度が変わります。
そもそも日本語化されていて、むちゃくちゃ便利なリファレンスです。
私個人的には、いままでのどんな海外製品の中でもダントツにわかりやすく、きれいにまとめられているリファレンスだと思ってます。
それくらい良いリファレンスなのでブックマーク必須だと思います!

以上、Dockerfileを作る手順と注意点と参考サイトでした。
次回はdocker-composeを使ってWordPress環境を作る手順について書こうと思います。

Xiaomi Band2が届いた

以前、会社の人がXiaomiの公式ストアに行った話をブログで拝見したことがありました。

Xiaomiは、中国のAppleと呼ばれるくらい、いわゆる粗悪な中華製品とは一線を画した企業のようで、コスパに優れた製品を展開しているようです。

ブログを書いた@tichiseさんにTwitterでgeekbuying.comを教えていただき、以前から気になっていたXiaomi Band2を思い切って購入することにしました。

1/20にgeekbuying.comで購入して、途中、Paypalの情報に不備があったのか、サポートチームより英語のshipping addressを教えてってメールが来たので、適当に返して、本日商品を受取ることができました。

一応、早い便と通常便があるようで、通常便を選択してみました。
通常便だと15 ~ 30営業日とのことでしたが、実質12日で届いたので、思ったよりは早かった印象です。

ちなみに購入金額は23USDに保護シールをつけて28USDで、約3180円。
Amazonだと最安値が3500円で、保護シールなしだと23USDは約2600円なので、3割近くお得に買えました。

使ってみた印象

最近時計をしていなかったので不思議な感じはしますが、違和感は無いです。
まだ、これから楽しんでいく感じではありますが、こんな機能あるんだ〜って感じのものがいくつかありました。

便利そうな機能

もともと心拍数とかフィットネスアプリとの連携を期待していたのですが、それ以外にも幾つか便利そうな機能がありました。

  • アラームのバイブレーション
  • 電話のバイブレーション
  • スマートロック解除
  • Google Fit連携

Bluetooth繋いでいないといけないですが、繋いでいれば上記の機能のうち接続系の機能が便利そうでした。

mi fit

Xiaomi band2を連携させるにあたり、mi fitという公式アプリを利用しますが、デザインが洗練されていて中国企業のアプリっぽく無いです。
私はWithingsも使っていて、Withingsに近いようなUIです。
Fitness系アプリはみんなこんな洒落た感じなのでしょうか。
ちなみにこのアプリ自体はあまり評判が良くないようなのですが、しばらく使ってみて様子見してみようと思います。

また、Google Fitと連携が取れるようなので、Xiaomiの中だけでデータが完結しないのも嬉しいです。
連携したデータは、もし別のフィットネスアプリやデバイスを使ってもGoogle Fitに統合できるので、データの管理がしやすそうです。

まだ、届いたばかりでこれからですが、色々活用してみようと思います。