【docker】wordpressをローカルに構築
概要
docker公式の手順に沿ってwordpressのローカル開発環境を構築してみる。
基本的には公式のyamlファイルを利用してすすめるが、
不便そうな箇所はyamlを改修してもう少し便利にしてみる。
前提
docker for desktopがインストール済みであること
手順
基本的には以下に従う
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
chameleonmeme.com/ きっかけは、偶然同じ現場で働いていたエンジニア3人の 「もっと仕事にのめり込んだり、熱中したいよね」という雑談でした。 営業から開発、サービスの提供まですべての工程を自分たちの手で行い、 気の合う仲間と楽しく仕事をすることで熱中するためにチームをスタートしました。
Discussion