docker-composeでWordPress環境を作ってHeadlessCMSとして利用する

やろうとしたこと

Next.jsで静的なブログを作るために、WordpressをHeadlessCMSとして使いたいと思いました。

なので、Docker ComposeでWordpress環境をローカルに作って、それをGitHubと同期することで1つのリポジトリ内で

  • フロント側(Next.js)
  • バックエンド側(HeadlessなWordpress)

を同時に管理しようと考えました。

そんなわけで、今回はDocker ComposeでWordpress環境をつくるところまでをメモしておきます😀

Docker ComposeでWordpress環境をつくる

まず適当なディレクトリを作ります。ここではwp-docker-testとします。

wp-docker-testの中にdocker-compose.ymlというファイルを作り、以下のテキストを貼り付けます。

version: "3"

services:
  db:
    image: mysql:5.7
    volumes:
      - ./.docker/.mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes:
      - "./.docker/.wp/:/var/www/html/wp-content/"

※ほぼDocker公式のコードを引用して、一部改変してます
※Wordpressのほうは、wp-contentフォルダのみマウントしています。

 

そして、コマンドラインを開き、wp-docker-testまで移動します。

次に以下のコマンドを打ちます。

docker-compose up -d

 

はい、たったこれだけでWordpress環境を作ることが出来ます🎉

localhost:8000にアクセスすると、Wordpressの画面が表示されるはずです。

WordPressのデータの場所

WordPressの

  • 記事データ
  • 設定データ
  • 画像データ

などはすべてdocker-compose.ymlと同じ階層にある、.dockerというフォルダの中にあるはずです。

 

フォルダ構成として以下のような感じになります。

📁wp-docker-test
 ├docker-compose.yml
 └.docker
   ├.mysql #MySQLのデータ(記事データ、設定データなど)
   └.wp    #Wordpressのデータ(画像データ、設定データなど)

 

あとはこれらをgit initでgit管理下において、GitHubにアップロードすればおわりです。

 

ただ、このやり方(バインドマウントで全部マウントしちゃう方法)だと、Docker側とホスト側(.docker)で同期するファイルが多くなるため、多少Wordpressの動作が重くなっちゃうみたいです😥

なのでバインドマウントではなく、ボリュームを使った方法だともっと高速だと思うのですが、ボリュームをGitHubにアップするためには

  1. 捨てコンテナを立ち上げて、
  2. そのコンテナにボリュームを接続し、
  3. ボリュームの中身をtarコマンドなどでまとめる&圧縮し、
  4. バインドマウントでホストOS側にコピーし、
  5. 捨てコンテナを消去する

みたいなことをしないとダメっぽくて「なんか面倒くさいしややこしいなぁ・・」となったので、バインドマウントで行くことにした感じです。

データ・ボリュームのバックアップ・修復・移行

ボリュームを使った他の便利な機能に、バックアップや修復、移行があります。これらの作業を使うには、新しいコンテナを作成するときに –volumes-from フラグを使い、次のようにボリュームをマウントします。

$ docker run –volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

ここでは新しいコンテナを起動し、dbdata コンテナからボリュームをマウントします。そして、ローカルのホスト上のディレクトリを /backup としてマウントします。最終的に、dbdata ボリュームに含まれる内容をバックアップするため、 tar コマンドを使い /backup ディレクトリの中にあるファイルを backup.tar に通します。コマンドの実行が完了すると、コンテナは停止し、dbdata ボリュームのバックアップが完了します。

これで同じコンテナに修復(リストア)したり、他のコンテナにも移行できます。新しいコンテナを作成してみましょう。

参考:https://docs.docker.jp/engine/userguide/dockervolumes.html

おわり

 

※他に良いやり方をご存知の方がいれば、コメントなどで教えていただけるとうれしいです!🙇

Wordpress
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました