見出し画像

DockerでWordPress環境を構築してみた

先日、wp-envというツールを使ってWordPress環境を構築しましたが、今回はDocker上に直接、WordPress環境を構築してみたいと思います。

こんな感じで作りたい

作るにあたって、こんな感じで作りたいというイメージを作りました。

画像1

Docker上にWordPress、MariaDB等のコンテナを用意し、それらを連携させるとともに、ローカルPCのファイルシステムとコンテナ内を連携させつつ、永続化するという目論見です。

もちろん、WordPressコンテナ内にWordMoveも入れてしまうという方法もありますが、やはり個々のコンテナはなるべく素のままにしておきたいです。

作業

という訳で、ホームディレクトリの下に~/WordPress/Experimentalというフォルダを作成して、そこに移動します。

ここにまずはdocker-compose.ymlを作成します。
データベースがMariaDBなのは、arm系だとMySQLがなかったためです。バージョンも含め、適当なものを選択してください。上の構成イメージには書いていませんが、PhpMyAdminコンテナも入れてあります。最低限、database:とwordpress:の部分があれば動きます。
インデントに意味があるYAMLファイルですので、インデントを間違えない様にしてください。インデントがずれてしまうとエラーになったり、誤動作します。

version: '3.7'
services:
   database:
      image: mariadb:10.4
      command:
         - "--character-set-server=utf8"
         - "--collation-server=utf8_unicode_ci"
      ports:
         - "3306:3306"
      restart: on-failure:5
      environment:
         - MYSQL_USER=${DB_USER}
         - MYSQL_DATABASE=${DB_NAME}
         - MYSQL_PASSWORD=${DB_PASSWORD}
         - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      volumes:
         - ./db:/var/lib/mysql
   wordpress:
      depends_on:
         - database
      links:
         - database
      build:
      context: ./docker/
      ports:
         - "1080:80"
      restart: on-failure:5
      volumes:
         - ./public:/var/www/html
      environment:
         - WORDPRESS_DB_HOST=database
         - WORDPRESS_DB_USER=${DB_USER}
         - WORDPRESS_DB_PASSWORD=${DB_PASSWORD}
         - WORDPRESS_DB_NAME=${DB_NAME}
   phpmyadmin:
      depends_on:
         - database
      image: phpmyadmin/phpmyadmin
      ports:
         - 1081:80
      restart: on-failure:5
      environment:
         PMA_HOST: database
   wordmove:
      tty: true
      depends_on:
         - wordpress
      image: mfuezesi/wordmove
      restart: on-failure:5
      container_name: my_wordmove
      volumes:
         - ./config:/home
         - ./public:/var/www/html
         - ~/.ssh:/root/.ssh

ここから参照している環境変数を.envに書いておきます。

#Database設定
DB_USER=root
DB_NAME=wordpress
DB_PASSWORD=password
DB_ROOT_PASSWORD=password

あとは、docker/Dockerfileを作成しました。

docker/Dockerfileに追加
FROM wordpress:latest
RUN apt-get update
RUN apt-get install -y vim
RUN docker-php-ext-install pdo_mysql
RUN echo "file_uploads = On\n" \
"memory_limit = 500M\n" \
"upload_max_filesize = 500M\n" \
"post_max_size = 500M\n" \
"max_execution_time = 600\n" \
> /usr/local/etc/php/conf.d/uploads.ini

最後のRUNから先は、WordPressのアップロード上限が2Mバイトになっているのを修正するためのものです。公式WordPressコンテナは、/usr/local/etc/php/conf.d/にある.iniファイルを結合してWordPressの初期設定として読み込んでくれるそうなので、ここに設定変更したいものを書いておきました。単に動けばいいという場合はRUNの部分は全て不要かと思います。

起動

あとは以下のコマンドを叩けば、コンテナをとってきて環境を構築した上で、必要なものを起動してくれます。

% docker-compose up -d --build

なお、止めるときはdownではなくてstopです。upの逆だからとdownしてしまうと、コンテナが初期化されてしまいます。

docker-compose.ymlのwordpress:の部分で、ポートを1080にしているので、http://localhost:1080/でアクセスできます。他のポートがよければdocker-compose.ymlを書き換えてください。

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

偉そうに書いていますが、DockerもWordPressも初心者なので、以下のサイトを参考にさせていただきました。ありがとうございます。
DockerでWordpress環境を作る + ついでにWordmoveも。 | xxbxxqxx
Docker-composeで最強(自分史上)のWordPress開発環境を作る - Qiita
Docker + WordPress + Mailhog + wordmove + Git のローカル開発環境構築 - Qiita

まとめ

wp-envを使う方法も簡単ですが、Dockerとdocker-composeを使う方法も、細かいところを気にしなければそんなに手間ではないかと思います。Node.jsをインストールしたりといった事前作業もないですし、ささっとWordPress環境を立ち上げたいという時にはこれで良い様な気もします。
もちろん、wp-envにはそれ自体の目的とかあるので、適宜使い分けることになります。

拙い記事でございますが、サポートしてもよいよという方はよろしくお願いします。著者のやる気アップにつながります。