👓

【docker】wordpressをローカルに構築

2021/07/25に公開

概要

docker公式の手順に沿ってwordpressのローカル開発環境を構築してみる。
基本的には公式のyamlファイルを利用してすすめるが、
不便そうな箇所はyamlを改修してもう少し便利にしてみる。

前提

docker for desktopがインストール済みであること

手順

基本的には以下に従う
https://docs.docker.jp/compose/wordpress.html

1.プロジェクト用の空のディレクトリを生成

なんでもいいので作成

mkdir ./hoge

2.プロジェクトディレクトリに移動

cd ./hoge

3.docker-compose.yml ファイルを生成

wordpressの公式イメージとMySQLの公式イメージの2つを利用する。
※wordpressとの不整合が発生する可能性があるのでMySQLは必ず5.7にすること
※公式手順では永続保存領域として、
バインドマウントではなく、ボリュームマウントを利用しているので
自分の指定した任意のマウント先ではなく、dockerエンジンの管理領域に永続化ストレージができる。

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

ボリュームマウント定義箇所

db_dataという名前でボリュームマウントを定義している。
すでに「db_data」というボリュームマウントが存在すれば、そこにマウントされる。
存在しない場合は「db_data」という名前のボリュームマウントが作成される。

volumes:
    db_data:

ボリュームマウント指定箇所

mysqlイメージからコンテナを作成する「db」という名前のサービス定義にて以下のように指定。
コンテナ内の「/var/lib/mysql」というディレクトリに保存される情報が、
ボリュームマウントの「db_data」に紐づけられdockerエンジンの永続化ストレージ領域に格納される。

     volumes:
       - db_data:/var/lib/mysql

4.プロジェクトの構築

プロジェクトディレクトリ(docker-compose.ymlが置いてあるディレクトリ)上にて 以下を実行

docker-compose up -d

or

docker compose up -d

「-d」はデタッチモード(バックグラウンド)起動を指定するオプション。
これを指定しないとフォアグラウンドで起動するのでターミナルのプロンプトが戻って来ない。

5.ブラウザでwordpress起動

http://localhost:8000

にアクセス
画面が開いたら必要な情報を入力していく。

2回目以降のアクセス

初回アクセスでwordpressのユーザ作成やインストールが完了していれば
2回目以降は以下からログインする。

http://localhost:8000/wp-login.php

6.完了

上記手順を完了すればwordpressをブラウザで開発できるようになる。

7.終了

コンテナを終了する。
必ずdocker-composeコマンドで行うこと。
docker stop/startなどでコンテナ操作すると
docker-composeコマンドで管理するコンテナとの間にコンテナ名の不整合等、問題が発生する。

docker-compose down

or

docker compose down

手順改

以下のようにyamlを改修する。

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3306:3306"
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - ./html:/var/www/html # マウントするディレクトリを指定
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

改修内容詳細

wordpressの資材をローカルに保存するようにyamlを改修

docker公式の手順だとwordpressの開発資材がコンテナ内に保存される。
マウントしてないのでコンテナを削除すると資材も消えてしまう。
開発資材を取り出すにはコンテナにアタッチして、
tarで固めてどこか別途マウントした場所に出力する等、一手間必要なので
最初から以下のようにバインドマウントしてあげたほうが使いやすいように思う。

バインドマウント指定箇所

wordpressイメージからコンテナを作成する「wordpress」という名前の
サービス定義にて以下のように指定。

     volumes:
       - ./html:/var/www/html # マウントするディレクトリを指定

作成した「/hoge」の直下の「wp-content」ディレクトリに
コンテナ内の「/var/www/html/wp-content」をマウントする。
こうしておけば開発した資材が「./hoge/wp-content」に保存される。

mysqlに外部のクライアントが接続できるようにyaml改修

公式の手順だとコンテナ外のクライアントツールやターミナルから
直接mysqlコンテナのmysqlに接続することができない。
接続できるようにするには以下のように改修する。

接続ポート指定箇所

mysqlイメージからコンテナを作成する「db」という名前のサービス定義にて以下のように指定。
以下を記載することでローカルホストの3306にアクセスすると
mysqlコンテナの3306にポートフォワードされる。

     ports:
       - "3306:3306"

追記(20240516)

`version` is obsoleteエラー

本エラーが発生する場合はcompose用のyamlファイルからversion:`3`の行を削除してください。
Docker Compose V2ではversion:が不要となっています。

mysqlのAMD/ARM対応

docker: no matching manifest for linux/arm64/v8 in the manifest list entries.
See 'docker run --help'.

M1mac以降でmysqlのimageを取得する際にエラーが発生する場合は
platform: linux/amd64を記述してください。

services:
  db:
    platform: linux/amd64
    image: mysql:5.7
合同会社カメレオンミーム Tech Blog

Discussion