Dockerを使ってWordPressの動くウェブサーバーを立ち上げる
WordPressを使うことにしました。しかし、既存のCentOS7で動かそうとしたところ、WordPressの要件(PHP7やMySQL)を整えることができませんでした。そこでdockerで仮想環境を用意してやってみました。
dockerイメージのインストール
# yum install docker # docker pull docker.io/wordpress # docker pull docker.io/mysql:5.7 # 最新版(8)では認証が超えられなかった
コンテナの作成
MySQLを起動
コンテナの名前はmy-db、データベースのパスワードはxxxとしました。 データベースが使用するディレクトリをホストのディレクトリ(/anywhere/mysql)にしました。 データベースをイメージの中にいれないことで、ディレクトリまるごとのバックアップがとりやすくなります。
# docker run -d --name my-db --env=MYSQL_ROOT_PASSWORD=xxx \ --volume /anywhere/mysql:/var/lib/mysql \ --restart unless-stopped \ docker.io/mysql:5.7
WordPressを起動
WordPressのプラグインやテーマをいれるときに、直接ファイルを操作できたほうが便利なのですが、docker内のファイルを操作するのは面倒で、コンテナ内ではviも使えません。そこでWordPressのファイルをdockerの外に出すようにしました。
一旦dockerのイメージを作成し、WordPressのファイルをdockerの外へコピーして、それをマウントするようにしました。
コンテナの名前はmy-wpとして作成しました。DocumentRootが/var/www/htmlで、これもホスト側から操作しやすいようにしました。ホストの8000ポートをWordPressのイメージの80番ポートにつないでWordPressにアクセスできるようにしました。
# docker run -d --name my-wp wordpress # 一旦つくる # docker cp my-wp:/var/www/html /anywhere/ # docker内のファイルを外へコピー # docker rm my-wp # 削除。前もってstopが必要だったかも。 # docker run -d --name my-wp \ --publish 8000:80 \ --volume /anywhere/html:/var/www/html \ --link my-db:mysql \ --restart unless-stopped \ wordpress
WordPressの設定
http://host.ip.address:8000/ に適当なブラウザでアクセスして、設定を行います。必要な項目は管理者名、そのパスワード、ウェブサイトの名前ぐらいです。
WordPressのバージョンアップ
dockerイメージを更新しました。
# docker pull docker.io/wordpress # docker stop my-wp # docker rename my-wp my-wp.old # 現在のコンテナの名前を変更する。 # mv /anywhere/html /anywhere/html.old # docker run -d -name my-wp wordpress # 新しいコンテナを作成 # docker cp my-wp:/var/www/html /anywhere/ # docker内のファイルを外へコピー # docker rm my-wp # 削除 # cp -r /anywhere/html.old/wp-content/{plugin,theme,uploads} /anywhere/html # cp -r /anywhere/html.old/wp-config.php /anywhere/html # .htaccessも同様にコピー # docker run -d --name my-wp wordpress # その他オプションは上と同じなので省略
新しいコンテナに接続するとデータベースの更新を行いますというメッセージが表示されました。
たぶん必要なファイルはこのぐらいだったと思いますが、足りない場合はエラーメッセージを見て適宜修正します。
/anywhere/html のアクセス権がたびたび引っ掛かります。chown -R :33 /anywhere/html; chmod -R g+w /anywhere/html としておくといいです。
サーバーの設定
php.ini
php.iniは/usr/local/etc/php/におきます。最初は無いのでphp.ini-productionをコピーします。
# docker cp my-wp:/usr/local/etc/php/php.ini-production ./php.ini # vim php.ini # upload_max_filesize = 2M を 8Mに修正。post_max_sizeはもともと8M # docker cp php/php.ini my-wp:/usr/local/etc/php/ # docker restart my-wp