公式に配布されている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