やろうとしたこと
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にアップするためには
- 捨てコンテナを立ち上げて、
- そのコンテナにボリュームを接続し、
- ボリュームの中身をtarコマンドなどでまとめる&圧縮し、
- バインドマウントでホストOS側にコピーし、
- 捨てコンテナを消去する
みたいなことをしないとダメっぽくて「なんか面倒くさいしややこしいなぁ・・」となったので、バインドマウントで行くことにした感じです。
データ・ボリュームのバックアップ・修復・移行
ボリュームを使った他の便利な機能に、バックアップや修復、移行があります。これらの作業を使うには、新しいコンテナを作成するときに –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
おわり
※他に良いやり方をご存知の方がいれば、コメントなどで教えていただけるとうれしいです!🙇
コメント