docker-composeでwordpress+phpMyAdminの開発環境

公式に配布されているmysqlとwordpressのイメージをdocker runするだけでwordpressの仮想環境はできます。ですが仮想コンテナの中のファイルを操作しても、コンテナが消えるとホストには何も残りません。そこでdocker volumeを使ってホスト側のファイルとコンテナのファイルを同期して、ホストがわのファイルの変更が仮想環境に反映されるようにしますl。

また毎回イメージごとにrunするのは面倒なので、docker-compose.ymlでまとめてビルドして、複数のコンテナをまとめて起動することができます。今回はついでに、wordpressデータベースを操作しやすいように、phpMyAdminコンテナも起動します。

docker、docker-composeはhomebrewを使うなどしてインストールしておいてください。

手順としては、作業用ディレクトリに
1 docker-compose.yml
2 ホスト側のデータを参照するためのDBフォルダ(中にdataフォルダとmysqld.conf。dataには実際の投稿やユーザーデータなどを入れます。)
3 開発したいwordpressファイル

を用意してからターミナルで以下のコマンドを打てば完了。 http://localhost:80で入れるようになります。一度ビルドしたら、そのあとはcompose upで起動だけすればおっけーです。

$ cd {作業用ディレクトリ}
$ docker network create --driver bridge network_geister
$ docker-compose build --no-cache
$ docker-compose up -d

networkを作って、単品のコンテナにこのnetworkを設定することで、コンテナ同士を連携させています。buildの –no-casheはキャッシュが優先されて、編集した内容が反映されないことがあるのでオプション指定するのがいいでしょう。

docker-compose.yml

version: '3'

services:
   db:
     container_name: "geister_db"
     image: mysql:5.7
     ports:
       - 13306:3306     
     volumes:
       - ./db/data:/var/lib/mysql
       - ./db/mysqld.conf:/etc/mysql/mysql.conf.d/mysqld.cnf
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     networks:
       - network_geister       

   wordpress: 
     container_name: "geister-wp"
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     volumes:
       - ./wordpress:/var/www/html
       - ssh:/ssh
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     networks:
       - network_geister

   phpmyadmin:
    container_name: "geister_phpmyadmin"
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8080:80
    depends_on:
      - db
    networks:
      - network_geister

networks:
  network_geister:
    external: true

volumes:
  ssh:
    external: true

mysqld.conf

#
# The MySQL database server configuration file.
#

[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
character-set-server=utf8

symbolic-links=0

key_buffer_size         = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8

myisam-recover-options  = BACKUP

query_cache_limit       = 1M
query_cache_size        = 16M

log_error = /var/log/mysql/error.log

expire_logs_days        = 10
max_binlog_size   = 100M

innodb_log_file_size = 512M
innodb_strict_mode = 0

[client]
default-character-set=utf8