つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

WordPressをdockerで構築してみた

   

こんにちは、@s_tsukaです。

今回はWordPressをdocker containerとして構築して、Immutableにする話です。

もともとこのblogはとあるサーバ(VPS)上に普通にインストールして動かしていたのですが、サーバ移転することになって、折角だからdockerにしようとしたときの話です。

WordPressをdockerで動かす意味

別に普通に他のサーバ上にWordPressなりPHPなりMySQLなりをインストールして動かしても良いのですが、dockerでやっておけば、いつでもどこでも簡単に移行できるようになります。

とあるVPSだろうが、オンプレ(自宅)のサーバだろうが、Google、Amazonのインスタンス上だろうが、dockerさえインストールされていれば動かすことができます。

WordPressをdockerで構築する為に必要なもの

以下の物をDockerfileで構築する必要があります。結構骨が折れます

  • Apache
  • PHP
  • MySQL

骨が折れますが、実はある程度は楽ができます。公式のImageが既に用意されています・・・!

wordpress

これを直接動かすか、カスタマイズしたければDockerfileでFROMすればOKです。

直接動かしても良いのですが、pluginなどを入れておかないと話になりません。また、テーマなども場合によっては必要でしょう。という訳でカスタマイズすることにします。

自分用のDockerfileを書く

結論を言うと、以下のようなDockerfileを書けばOKです。(直接書いても動きませんので、適宜変更してください)

まず始めにWORDPRESS_DB_HOSTなどの変数設定を行います。外部から与えても良いですが、今回は内部で直接指定することにしました。これらはwordpress imageが必要としています。詳細はDockerhubのwordpress imageのドキュメントを見ると良いと思います。

wordpress imageはUbuntuだかDebianだかで構築されているので、aptで色々入れています。ここも適宜変更してください。

Install pluginの部分ではプラグインを公式からDLして、解凍しています。基本これだけです。足したり引いたり適宜変更してください。

その次にテーマと言語ファイルを入れています。これらは使わない人は消しても良いです。自分は現在はstingerというテーマを利用させてもらっていますので、このようにインストールしています。

最後に色々とwp-content以下にファイルを追加したりしたので、所有者を変更してApacheが読めるようにしてやります。WORKDIRをwordpress imageが想定している場所である/var/www/htmlに戻してあげれば完了です。

この状態でdocker runすれば、指定したMySQLに接続に行きますし、WordPress自体もちゃんと動きますし、blogを見られるようになります。

注意点(ここはImmutableじゃない)

実は上記の設定だけではまだ不完全です。

WordPressは投稿データや設定データはMySQLに持っていますが、以下はサーバ内部に持っています。

  • プラグインファイル
  • テーマファイル
  • 言語ファイル
  • wp_configなどの追加の設定ファイル
  • アップロードした画像

なので、プラグインやテーマをWordPress管理画面上で追加しても使えはしますが、dockerを再起動したら消えてしまいます。追加したプラグインやテーマはちゃんとDockerfileに書いておきましょう。

wp_configもそうです。もし現在稼働させているWordPressでwp_configに追加設定をしている場合はちゃんとDockerfileを変えておきましょう。一度稼働させたWordPressでも同様です。wp_configはまあまあ変更する場合もあるかと思いますので、注意が必要です。

最後に最も重要なのが画像です。メディア機能でアップロードしたファイルはwp-content/uploads以下に保存されます。ですが、これはdockerを再起動したら当然消えます。なので、これについては画像をS3に保存して永続化するなどの対策が必要です。画像の扱いについては以下にまとめていますので、併せてみて頂くと良いかと思います。

WordPressの画像ファイルをS3に保存する(メディア機能連携)

まとめ

  • WordPressをdockerで構築する方法やDockerfileを解説しました
  • WordPressをdockerで構築するときの注意点を解説しました

実は画像周りとか色々あって1ヶ月くらいかかりました・・・苦労した・・・

宜しければ参考にしてくださいー

 - サーバ ,