【詳解】Docker ComposeによるWordPress環境構築と永続化

副業でネットビジネスに取り組んでいるぱーくんと申します。
激務でも増えない給料に失望し、将来のために別の収入源が欲しい!の一心でネットビジネスをはじめ、2018年4月に20万円達成。
ひと月36万アクセスあるサイトを作ったノウハウは無料で公開中。 ⇒⇒コチラ
ネットビジネスで未来を夢見れる方を一人でも増やしたいと思っています。
誰でも最初は初心者。
【やってみたいけど、初心者だから不安】
という方は、ぜひお気軽にお問合せください♪
以前はLAMP環境を構築することで、Wordpressの開発環境を比較的簡単に作ることができましたが、dockerの登場により、さらに楽に環境を用意することができるようになってきました。
さらに、コンテナ上で動かすので、異なるバージョンのphpやwordpressなども共存させることも可能で、開発が終われば、コンテナをstopしてしまえば、自分のPCを汚すこともありません。
この記事では、dockerを使ってWordpressを動かす環境を手軽に作ることにしましょう。
目次
作成するdocker環境の概要とディレクトリ構造
作成する環境の概要ですが、
コンテナの管理には、docker-composeを使い、
- Apache+PHP+Wordpressが動くコンテナ
- DBが動くコンテナ
の2つをBuild&Runします。
Docker-composeは、dockerをインストールすれば一緒に入ります。
まだdockerを入れていない人は、以下の記事などを参考にインストールしてください。
さて、初めに全体像が分かるようにディレクトリ構造を見てみることにしましょう。
例えば、dc_wordpressというディレクトリの下に、必要なファイルを置いていくことにします。
dc_wordpress直下にはdocker-compose.ymlを置きます。これが、docker composeのbuild用設定ファイルです。
また、dc_wordpressディレクトリには、mysqlとwordpressという2つのディレクトリを作成し、その下にそれぞれDockerfileという名前でdockerをbuildするための設定ファイルを置きます。
ただ、ちょっと動かしてみるだけではなく、本格的な開発に使ったり、テーマやプラグインなどの追加の機能を入れてカスタマイズしていったりするには、最初からディレクトリを分けておいた方が良いと思います。
全体像(フォルダ構成)はこんな感じ
(※shareディレクトリは、あとで、ファイルの永続化に使いますので、今は必要ないです。)
1 2 3 4 5 6 7 8 9 10 11 12 | ─dc_wordpress │ docker-compose.yml │ ├─mysql │ Dockerfile │ my.cnf │ ├─share │ ├─db_data │ └─html └─wordpress Dockerfile |
では、それぞれのファイルの中身を見ていきます。
docker-compose用buildファイル(docker-compose.yml)
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | version: '3' services: mysql: container_name: con_mysql build: ./mysql image: img_mysql:1.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: wp_db MYSQL_USER: wp_user MYSQL_PASSWORD: wp_pass TZ: "Asia/Tokyo" ports: - "3306:3306" wordpress: container_name: con_wordpress build: ./wordpress image: img_wordpress:1.0 environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_NAME: wp_db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: wp_pass TZ: "Asia/Tokyo" ports: - "8080:80" links: - mysql |
前半部分を解説すると
となり、
./mysqlディレクトリにあるDockerfileを使って img_mysql:1.0という名前のイメージをbuildし、con_mysqlという名前でそのコンテナを起動する
ということになります。
また、コンテナの3306番ポートを同じく3306番で公開するので、自分のPC(ホスト側PC)からも3306番で接続出来ます。(wordpressの実行には、ホストからの接続は必要はないので、このportsの記載はなくてもいいです。後でPCからDBの中身を見たりする用に記載しています。)
前半が分かれば後半も分かりやすいですね。
要は
./wordpressディレクトリにあるDockerfileを使ってimg_wordpress:1.0という名前のイメージをbuildし、con_wordpressという名前でそのコンテナを起動する
ということになります。
前半とちょっと違うのは、portsとlinksの記載ですね。
Ports:の – “8080:80″ は、ホストPCから8080番でアクセスすると、コンテナ内で80番で起動しているApacheにリクエストが転送される
という意味です。
そのため、後ほどブラウザを開いて、「http://localhost:8080」でアクセスすると、コンテナ内の80番で動いているApacheにアクセスできるというわけです。
Links:の方は、wordpressサービスからmysqlサービスを見れるようにする設定です。
この記述がないと、wordpressのコンテナからmysqlのコンテナにネットワーク的に到達できません。
この記載があるので、 環境変数のWORDPRESS_DB_HOST: mysql:3306
でdbに接続できるようになります。
では、それぞれのDockerfileを見てみます。
DB側のdocker用buildファイル(Dockerfile)
mysql側のbuildファイルです。
mysqlのバージョン指定してイメージを取得しています。
my.cnfをカスタイマイズしたい人は、3行目と4行目のコメントアウトを外してください。
カスタマイズ方法はこの記事を参照。
1 2 3 4 5 6 | FROM mysql:5.7.21 #ADD ./my.cnf /etc/mysql/my.cnf #RUN chmod 644 /etc/mysql/my.cnf EXPOSE 3306 |
Apache+php側のdocker用buildファイル(Dockerfile)
wordpress側のbuildファイルです。
こちらもバージョン指定指定しています。
公式のイメージのページは、
https://hub.docker.com/_/wordpress/
にありますので、使い方や、Tag名の確認をしたいときはこのページからどうぞ。
1 2 3 | FROM wordpress:5.2.3-php7.1-apache EXPOSE 80 |
Build & run
さて、BuildのDockerfileの用意ができたら、「docker-compose.yml」のあるディレクトリで以下のコマンドを打って、イメージをBuildします。
1 | docker-compose build |
成功したら、さらに、以下のコマンドでコンテナを起動しましょう。
1 | docker-compose up -d |
永続化について
起動して、Wordpressにログイン、投稿できるところまでは確認できましたが、このままだと、コンテナをStopすると、せっかく投稿した記事がMysqlに残らず、また、プラグインやテーマも消えてしまいます。
そのため、ホストPCのディレクトリとコンテナとファイル共有することで、コンテナをStopしても、次回自動した時にデータが残るようにしてみます。
その設定がvolumes:
です。
ここに、「<ホスト側ディレクトリ>:<コンテナ内ディレクトリ>」として、共有するフォルダを記載します。
すると、「/var/lib/mysql」配下のデータベースファイルや「/var/www/html」配下のwordpressのファイル類が、コンテナをStopしても残り、次回コンテナ起動時にも活きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | version: '3' services: mysql: container_name: con_mysql build: ./mysql image: img_mysql:1.0 volumes: - ./share/db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: wp_db MYSQL_USER: wp_user MYSQL_PASSWORD: wp_pass TZ: "Asia/Tokyo" ports: - "3306:3306" wordpress: container_name: con_wordpress build: ./wordpress image: img_wordpress:1.0 volumes: - ./share/html:/var/www/html environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_NAME: wp_db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: wp_pass TZ: "Asia/Tokyo" ports: - "8080:80" links: - mysql |
副業でネットビジネスに取り組んでいるぱーくんと申します。
激務でも増えない給料に失望し、将来のために別の収入源が欲しい!の一心でネットビジネスをはじめ、2018年4月に20万円達成。
ひと月36万アクセスあるサイトを作ったノウハウは無料で公開中。 ⇒⇒コチラ
ネットビジネスで未来を夢見れる方を一人でも増やしたいと思っています。
誰でも最初は初心者。
【やってみたいけど、初心者だから不安】
という方は、ぜひお気軽にお問合せください♪