WordPressをローカル環境で構築する(2)

前回Ubuntuのインストールを行ったので、今回はUbuntuにDockerをインストールして、Docker上にWordPress環境を構築します。

Dockerのインストール

Ubuntuを立ち上げて作業を行います。基本的に下記リンクの手順でDockerをインストールしました。

Install Docker Engine on Ubuntu

コンテナ作成のためのファイルの準備

参考:【入門】Dockerで環境構築|WordPress環境をローカルPCに作ろう!

最初は参考元に記載されていたymlファイルをそのままコピーしてコンテナを作成していましたが、WordPressを立ち上げてできたサイトを見た際にPHPエラーが発生してしまいました。

Warning: chmod(): Operation not permitted in /var/www/html/wp-admin/includes/class-wp-filesystem-direct.php on line 173

Warning: touch(): Utime failed: Operation not permitted in /var/www/html/wp-admin/includes/class-wp-filesystem-direct.php on line 529

権限が無いということだったのでファイルの権限を確認したところ、権限を持っているユーザーID(UID)が1000となっていました。

調べたところ、Ubuntuでの管理者権限を持っているUIDが1000で、Dockerコンテナ内ではUIDが0であるrootとなっていたようでした。このUIDのズレによってエラーが起きていたようです。

このズレを解消するために、Dockerfileを作成して再度イメージの再構築を行いました。

docker-compose.yml

services:
   db:
      container_name: mysql8
      build:
         context: .
         dockerfile: ./mysql/Dockerfile
      restart: always
      environment:
         MYSQL_ROOT_PASSWORD: password # rootユーザのパスワード
         MYSQL_DATABASE: db_local # WordPress用データベース名
         MYSQL_USER: wp_user # WordPress用データベース接続ユーザ名
         MYSQL_PASSWORD: password # WordPress用データベース接続パスワード
   wordpress:
      container_name: wordpress
      build:
         context: .
         dockerfile: ./wordpress/Dockerfile
      restart: always
      depends_on:
         - db
      ports:
         - 10090:80
      environment:
         WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号
         WORDPRESS_DB_USER: wp_user # WordPress用データベース接続ユーザ名(dbの内容に合わせる)
         WORDPRESS_DB_PASSWORD: password # WordPress用データベース接続パスワード(dbの内容に合わせる)
         WORDPRESS_DB_NAME: db_local # WordPress用データベース名(dbの内容に合わせる)
         WORDPRESS_DEBUG: 1 # デバッグモードON
      volumes:
         - ./php.ini:/usr/local/etc/php/php.ini
         - ./html:/var/www/html
   phpmyadmin:
      container_name: phpmyadmin_ingrid
      build: 
         context: .
         dockerfile: ./phpmyadmin/Dockerfile
      restart: always
      depends_on:
         - db
      ports:
         - 10099:80

Dockerfile(wordpress)

wordpressコンテナでUIDが1000であるユーザーを追加します。

FROM wordpress:latest
COPY php.ini /usr/local/etc/php/
RUN apt-get update && \
    apt-get install vim -y && \
    groupadd -g 1000 app_user && \
    useradd -m -s /bin/bash -u 1000 -g 1000 app_user
USER app_user

Dockerfile(mysql)

FROM mysql:8.0

Dockerfile(phpadmin)

FROM phpmyadmin:latest

ファイル構成は下記となります。(root/は任意の場所でOK)

root/
 ├ docker-compose.yml
 ├ mysql/
 │ └ Dockerfile
 ├ phpmyadmin/
 │ └ Dockerfile
 └ wordpress/
     └ Dockerfile

これでymlファイルがある場所で docker compose up -d を実行することでローカル環境が作成されます。