dockerfileでWordPressが動作するオリジナルのコンテナを自動作成してみた

Dockerはdockerfileという機能を使って、環境を自動的に生成できます。勉強の一環として、WordPressが動作する環境をdockerfikeを作ってみたのでまとめます。

はじめに

今回作成したいのは、WordPressのテーマを色々いじるための環境です。Apache、MySQL、PHPと、バージョン管理にgitがインストールされたコンテナを作成します。

MySQLとWordPressはそれぞれ別のコンテナに分けるのが良いみたいなのですが、とりあえず勉強ということで、全部一つのコンテナで動かします。

  • WordPress専用のコンテナ
  • 全部一つのコンテナにまとめる
  • デプロイはgit先生にお任せ

実際にdockerfileを描いてみた

こんな感じになりました。

# MyCentos

FROM centos
MAINTAINER Hoda

RUN yum -y update && yum -y install \
    wget \
  #####
  # Install httpd, mysql, php and git.
  && wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm \
  && rpm -ivh mysql57-community-release-el7-11.noarch.rpm \
  && rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
  && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm \
  && yum -y install \
    httpd \
    mysql-community-server \
    php71w php71w-mysql php71w-gd php71w-mbstring php71w-opcache php71w-xml \
    git \
  && yum -y clean all \
  #####
  # Remove some unnecessary files and make symbolic-link.
  && rm -f mysql57-community-release-el7-11.noarch.rpm \
  && systemctl enable httpd.service

EXPOSE 80

CMD ["/usr/sbin/init"]

実行手順

前項のdockerfileに適当な名前をつけて、「dockerfile」というフォルダに置きます。

例:~/dockerfile/Dockerfile.mycentos

続いて、dockerfileが置かれたディレクトリに移動して下記コマンドを実行します。

docker build -t hoda/centos:ver1 -f ~/MyVM/MyDocker/dockerfile/Dockerfile.mycentos .

ビルドが完了したら、docker imagesコマンドにて、作成されたイメージを下記のように確認できます。

作成されたイメージを元に、docker runコマンドでコンテナを作成します。

docker run -d -p 8000:80 -v ~/MyVM/MyDocker:/var/www/html --privileged hoda/centos:ver1
  • -d … コンテナを起動はするが、ログインしないためのオプション
  • -p 8000:80 … ホストPCのポート8000から、コンテナの80番ポートにポートフォワード
  • -v /MyVM/MyDocker:/var/www/html … ホストPCの「/MyVM/MyDocker」フォルダとコンテナの「/var/www/html」フォルダを共有
  • –privileged … Dockerがホスト上の全デバイスへのアクセスができるように特権を与えるオプション
  • hoda/centos:ver1 … 今回私が作成したイメージのリポジトリとタグ名

docker runしたのち、ブラウザで「localhost:8000」と入力すればApacheのようこそ画面が閲覧できます。コンテナ内のディレクトリ「/var/www/html」とホスト側のディレクトリ「~/MyVM/MyDocker」は共有されていルノで、ホスト側のエディタで自由にコードの編集ができます。

まとめ

まだまだですが、とりあえずdockerfileの使い方を学べました。MySQLが900MBもあるので、少し容量の大きいコンテナになっちゃいましたけど。今後はVagrant+Dockerで構築した環境をステージ環境として使い、開発やテストはホスト+Dockerで構築した環境で行おうかなと思います。