前回、h2o+phpのdockerイメージを練習がてらに作ってみたので今回はそれを使ってこの主にWordPressで構成されたサイトをdockerコンテナを使ってみた。
広告
構成
前回とほとんど構成は変わってない。
- Digital Ocean Singapore 512MB
- Ubuntu 16.04 LTS
- MySQL 5.7
- Redis 3.2
- h2o 2.1.0-beta4
- php 7.0.14
dockerイメージ
使ったdockerイメージは下記。
/var/www 以下にあるWordPressやその他のWEBに公開しているファイルは現状はコンテ化出来ていないのでそのままホストに置いている状態となっている。
これもコンテナ化しようかと思ったんだけどWordPress自身でのアップデートとかもあるしローカルで変更してイメージ化して再アップってのが個人で運営するブログ程度だと面倒くささが勝ちそうだったので良い案が思い浮かぶまでとりあえずホスト側に置くことにした。
なので、h2o-phpコンテナとはvolumeに指定してマウントしている。
wp-config.php
h2o-phpコンテナからmysql,redisコンテナにアクセスするために下記のような設定を行っている。
docker runのlinkオプションに他コンテナを指定することで環境変数に色々定義されるのでそれを使う。
/** MySQL hostname */ define('DB_HOST', getenv('DB_PORT_3306_TCP_ADDR') ?: 'localhost'); // redis define('WP_REDIS_HOST', getenv('REDIS_PORT_6379_TCP_ADDR') ?: 'localhost'); define('WP_REDIS_PORT', getenv('REDIS_PORT_6379_TCP_PORT') ?: '6379'); |
今回、初めてphpの ?: という演算子を知った。
いわゆるデフォルト値を定義してあげる時に便利なやつ。
ansible
ansibleのタスクからdockerコンテナの部分だけ抜粋。
- name: Create mysql container docker_container: name: db image: mysql:5.7 pull: true restart: yes restart_policy: always env: MYSQL_ALLOW_EMPTY_PASSWORD: YES MYSQL_USER: "{{ db_user }}" MYSQL_PASSWORD: "{{ db_password }}" ports: - 127.0.0.1:3306:3306 volumes: - /var/lib/mysql:/var/lib/mysql - /etc/mysql:/etc/mysql tags: mysql - name: Create redis container docker_container: name: redis image: redis:3.2 pull: true restart: yes restart_policy: always ports: - 127.0.0.1:6379:6379 volumes: - /etc/redis:/etc/redis tags: redis - name: Create h2o container docker_container: name: h2o image: fukata/h2o-php pull: true restart: yes restart_policy: always ports: - 0.0.0.0:80:80 - 0.0.0.0:443:443 links: - db - redis volumes: - /var/www:/var/www - /var/log/h2o:/var/log/h2o - /etc/h2o:/etc/h2o - /etc/letsencrypt:/etc/letsencrypt tags: h2o |
まとめ
今回、DigitalOceanのインスタンスを512MBプランに変更してみたんだけど普通に動いてるっぽい。かなりギリギリになってるので何かあるとすぐいっぱいになってしまいそうな不安はあるけど。
とりあえず、今年中にやりたかったdockerコンテナを使ってサイトを公開出来たのは良かった。
そろそろEC2に移行しようかな。どうせならterraformなど使って移行したい。