My開発メモ

DockerにLAMP環境をつくって、WordPressをインストールする

DockerでWordPressを動かすなら、ふつうは、DockerHubからWordPressイメージをpullして動かすというやりかたをするだろうし、僕もそうしてきた。
しかし、今回は、Docker上に MariaDB、Apache、PHP の環境をつくって、そこに WordPressをインストールするというのやってみた。

DockerにLAMP環境

(1) Dockerfile (phpとApache)

php.Dockerfile
FROM php:8.3-apache

# 必要なツール類
RUN apt-get update
RUN apt-get -y install wget unzip vim less tzdata

RUN docker-php-ext-install mysqli pdo pdo_mysql

COPY ./conf.php/php.ini /usr/local/etc/php/

RUN a2enmod rewrite

RUN apt-get clean

RUN echo "alias ll='ls -lF'" >> /root/.bashrc

これで、ApacheサーバーとPHPをインストールする。あと、必要なツール縷。
php.ini には、必要な初期設定を書いておいて、それをDocker内にコピーする。
最後の alias コマンドが動かなかったのは、まだ原因不明である。
そら、.bashrc に書かんとあかんわなあ。(2024.08.25 追記)

(2) コンテナの作成 (MariaDB, PHP-Apache, phpMyAdmin)

docker-compose.yml
version: '3.7'

services:
  web-server:
    build:
      dockerfile: php.Dockerfile
      context: .
    restart: always
    volumes:
      - "./www/:/var/www/"
    ports:
      - "8080:80"
    container_name: "mylamp-web"
    environment:
      TZ: Asia/Tokyo
      
  mysql-server:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Tokyo
      LANG: ja_JP.UTF-8
    volumes:
      - "./mysql-data:/var/lib/mysql"
      - "./sql:/docker-entrypoint-initdb.d"
      - "./conf.mysql/charset.cnf:/etc/mysql/conf.d/charset.cnf"
    ports:
      - "43306:3306"
    container_name: "mylamp-mysql"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    environment:
      PMA_HOST: mysql-server
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "5000:80"
    container_name: "mylamp-pma"
      
volumes:
  mysql-data:

ディレクトリ構成は以下。

my-lamp/
  ├── conf.mysql/
  │   └── charset.cnf
  ├── conf.php/
  │   ├── apache2
  │   │   └── php.ini
  │   ├── cli/
  │   │   └── php.ini
  │   └── php.ini
  ├── docker-compose.yml
  ├── mysql-data/
  ├── php.Dockerfile
  └── www/
      └── html/

この状態で、

$ docker-compose up -d

とすることで、LAMP環境が動作する。

(3) 所有権の設定

ここで大事なことは、mylamp-webコンテナ内の /var/www/html の所有権を www-data にしておくことである。

$ cd www
$ sudo chown -R www-data:www-data html

これをしておかないと、WordPressがファイルを作成することができなくなる。(これは、WordPressのインストール後にしたほうがいいかもしれない)

それと、現在のユーザーを /etc/group にて www-data グループに入れたのち、

$ sudo chmod -R g+w html

としておいたら、現在のユーザーで各ファイルを編集可能になる。

(4) データベース・ユーザーの作成

WordPressのためのデータベース・ユーザーを作成する。

次の例は、fureaizooというデータベースの場合である。

CREATE DATABASE IF NOT EXISTS fureaizoo;

CREATE USER IF NOT EXISTS 'fureaizoo'@'%' IDENTIFIED BY 'fureaizoo';

GRANT ALL ON fureaizoo.* TO 'fureaizoo'@'%';

面倒なので、ユーザー名とパスワードも fureaizoo にしてある。
ユーザー作成のとき、ホスト名のところを ‘%’ にしてあるのは、以下の理由からである。

  1. ‘localhost’ にはできない。mylamp-mysqlコンテナからみて、localhostは自分自身になるから。
  2. ‘mylamp-web’と指定したいのだが、これはうまくいかなかった。コンテナ内では コンテナ名は使えないっぽい。

したがって、’%’としておいた。こうしておくと、すべてのホストから接続できる。

(5) WordPressのインストール

これで WordPressをインストールする準備ができた。

WordPressをダウンロードして展開し、その中のファイル群を wwwフォルダ内の html の中に入れる。

www
  +-- html
        +-- wp-admin/
        +-- wp-content/
        +-- wp-includes/
        +-- index.php
        +-- wp-config.php
        +-- ...

ブラウザで http://localhost:8080/ とアクセスすると、データベースの接続を聞いてくるので、以下のように入力する。

データベース名: fureaizoo
ユーザー名: fureaizoo
パスワード: fureaizoo
ホスト名: mylamp-mysql
接頭辞: wp_

これで、インストールができるはず。

カテゴリー: Apache, Docker, mariadb, memo, php, wordpress

タグ: Docker, LAMP, wordpress, コンテナ

カウント: 101