Open1

Docker(手動 + compose)でWordPressとMySQL環境構築手順

tech_mwtech_mw

wordpress + mysql をdocker(コマンド + compose)で環境構築する手順とメモです

環境

pc:MacBook Pro(2019)
os:macos Sequoia
docker:Docker version 20.10.6, build 370c289
docker-compose:Docker Compose version 2.0.0-beta.1
docker desktop 利用

docker-compose.ymlのサンプル構成

docker-compose.yml
services:
  mysql:
    image: mysql:5.7
    container_name: mysqlex01
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress000db
      MYSQL_USER: wordpress000kun
      MYSQL_PASSWORD: wkunpass
    networks:
      - wordpressnet01
    volumes:
      - mysql_data:/var/lib/mysql

  wordpress:
    image: wordpress
    container_name: wordpressex01
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysqlex01
      WORDPRESS_DB_NAME: wordpress000db
      WORDPRESS_DB_USER: wordpress000kun
      WORDPRESS_DB_PASSWORD: wkunpass
    ports:
      - "8085:80"
    networks:
      - wordpressnet01

volumes:
  mysql_data:

networks:
  wordpressnet01:
    driver: bridge

docker composeコマンドでの起動方法

起動

docker compose up -d

ブラウザ確認

http://localhost:8085/

コンテナ停止+削除

docker compose down

ボリューム削除

docker volume rm wordpressnet01

手動docker runコマンドでの起動方法

ネットワーク作成

docker network create wordpressnet01

MySQLコンテナ作成 + 起動

docker run --name mysqlex01 -dit --net=wordpressnet01 \
  -e MYSQL_ROOT_PASSWORD=myrootpass \
  -e MYSQL_DATABASE=wordpress000db \
  -e MYSQL_USER=wordpress000kun \
  -e MYSQL_PASSWORD=wkunpass \
  mysql:5.7 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci \
  --default-authentication-plugin=mysql_native_password
  • MYSQL_DATABASEを指定しないとDBが作成されない
  • 公式イメージは「最初の空状態の時だけ」環境変数で初期化される
    • 例: MYSQL_DATABASE指定忘れで作成→コード修正+再作成してもDBは作成されない
    • 古いvolumeを削除後に再作成する必要あり

WordPressコンテナ作成 + 起動

docker run --name wordpressex01 -dit --net=wordpressnet01 -p 8085:80 \
  -e WORDPRESS_DB_HOST=mysqlex01 \
  -e WORDPRESS_DB_NAME=wordpress000db \
  -e WORDPRESS_DB_USER=wordpress000kun \
  -e WORDPRESS_DB_PASSWORD=wkunpass \
  wordpress

MySQL接続・データ確認

コンテナログ確認(mysqlが起動しているのにブラウザでエラーが出ている場合)

docker logs mysqlex01
  • 例:
    unknown variable 'default-authentication-plugin=mysql_native_password'.
    
    → バージョンに注意、今回はmysql:5.7を利用

コンテナ内MySQL接続

docker exec -it mysqlex01 mysql --default-character-set=utf8mb4 -u wordpress000kun -p
  • docker execだけではバイナリなので読めない
  • mysqlクライアントで接続して文字コード指定で文字化け対策
  • --default-character-set=utf8mb4 はクライアント側設定
  • ~/.my.cnf に設定しておけば毎回不要

(DB)データベース確認

SHOW DATABASES;

例:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress000db     |
+--------------------+

(DB)投稿確認

WordPress画面で「test」で投稿後に

select id, post_title from wp_posts where post_title="test";

結果例:

+----+--------------+
| id | post_title   |
+----+--------------+
|  ◯ | test         |
+----+--------------+

コンテナ停止+削除

docker stop mysqlex01 wordpressex01
docker rm mysqlex01 wordpressex01

ネットワーク削除

docker network rm wordpressnet01

ボリューム削除

docker volume rm wordpressnet01