このサイトにdockerを使ってみた


PC263121

前回、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など使って移行したい。

関連記事