1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

備忘録)docker-composeでwordpress環境作る【MAC】

Last updated at Posted at 2022-04-24

はじめに

今まで業務はlocal(local by flywheel)のソフトでwordpressを触っていましたが、
最近異なる本番環境のwordpressを運用でいじることが多いためそれぞれの環境(php・phpmyadmin・wordpress)のバージョンに合わせてローカル環境でもすぐあったもので作業できる状態にしたかったので、今回docekr-composeでwordpress環境を構築し使うことにしました

概要

Docker(Docker Desktop for mac)をインストールする。
docker-compoceでwordpress環境を構築

【実行環境】
macOS Big sur 11.6
プロセッサ:2.7 GHz デュアルコアIntel Core i5

Dockerインストール

上記からシステム要件に合っているか確認し、
合ったものをインストールします。
今回私の環境が10.15以降でintelチップのmacなのでDocker4.5.0をintelチップのMacボタンからインストールしました

インストールし、Dockerを起動させると下記のように権限を求められるかもなので、その場合はokをクリックしてパスワードを入力スクリーンショット 2022-04-24 13.04.43.png
他手順は上記サイトをスクロールするとわかりやすく書いてあるので省略します

備考

Dockerの使い方は「Containers / Apps」に
コンテナが何もない状態の時に表示される

docker run -d -p 80:80 docker/getting-started

をターミナルなどで実行して一度触れてみると、
少し入りやすい気がしました
(表示されるのは英語なのでgoogle翻訳で日本語に変換)

Dockerを詳しく知るために参考サイト

Dockerと仮想化ソフトの違いや仕組みを理解する

コンテナとイメージの違いを理解する

docker-composeでwordpress環境を構築

DockerではイメージのライブラリはDocker hubからインストールして使います
wordpress環境もDocker hub上に上がっているwordpressの公式が
公開してくれているものを使うことになります
スクリーンショット 2022-04-24 15.38.55.png

docker-composeとは複数のコンテナを定義し実行する Docker アプリケーションのためのツールです

より詳しく知りたい方は下記を参考

Docker Desktopをインストールが完了すると、
一緒にdocker-composeは使えるようになっていると思います(下記で確認)

ターミナル
docker-compose -v 
> docker-compose version 1.29.2, build 5becea4c

まずプロジェクト用の任意ディレクトリを生成します

ターミナル
mkdir project

そのディレクトリ内に「docker-compose.yml」ファイルを作成します
今回Gitの運用も考えていたので、こちらを参考にさせていただきました。

今回は下記のバージョンの設定環境を用意してます
・mysql→5.7
・wordpress→5.8
・php及びwebサーバー→-php7.3-apache

バージョンを指定したい場合はdocker hubの各公式ページの
Supported tags and respective Dockerfile links
部分から指定のバージョンを選択します
もし指定のバージョンがない場合はTagsタブから欲しいバージョンを検索します

スクリーンショット 2022-04-24 22.56.33.png

docker-compose.yml
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:5.8-php7.3-apache #ここでバージョン指定
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes: 
      - ./wp-content:/var/www/html/wp-content/
volumes:
   db_data:

ymlファイルを設定後下記のコマンドでdocker-compose.ymlを実行
※docker-composeはディレクトリ内で実行しないと起動しないので注意

project/
docker-compose up -d

これでportsで設定した「localhost:8000」をブラウザで開くとwordpressが立ち上がります。
終了する際は下記のコマンドでボリュームともにコンテナを削除します
※イメージは残ります

project/
docker-compose down -v

ただプラグインの「All-in-One WP Migration」ではなく、今回はphpmyadminから
エクスポートしてきたsqlをインポートしてプラグインの「velvet blues update urls」で書き換えて本番環境を持って来れるようにもしたかったので、
docker-compose.ymlに追記しました

docker-compose.yml
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:5.8-php7.3-apache 
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes: 
      - ./wp-content/:/var/www/html/wp-content/
  phpmyadmin: 
    image: phpmyadmin/phpmyadmin:latest 
    restart: always 
    depends_on: 
      - db 
    ports: 
      - "8888:80" 
volumes:
   db_data:

これで「localhost:8888」からphpmyadminを開くことができるようになりました
今回は「All-in-One WP Migration」を使わないため「html/wp-content/」のみにしていますが、
容量制限を変更が必要な場合は、「.htaccess」もディレクトリ内で触れるように「html/」でwordpress類データ全てをホストPCのディレクトリと同期してもいいかもしれないです
その他こちらを参考にさせていただきました(php.iniに関してもこちらが参考になるかと思いました)

追記

上記の設定から少し自分の中でより使いやすいように下記の変更加えました

ローカルループバックアドレスを設定

複数コンテナ間で同じポート番号(localhost:8000など)を扱うため設定します

ループバックアドレスとは、そのコンピュータ自身を示すIPアドレスのこと。物理的なネットワークインターフェース(NIC)ではなく、OSなどに実装された仮想的なNICであるループバックインターフェースに割り当てられる。
127.0.0.1~127.0.0.254の幅のIPアドレスすべてがローカルループバックアドレスとして予約されている

デフォルトでは127.0.0.1のみしか設定されていないので、
コンテナを増やす場合には先に下記のコマンドで追加する
※PCの起動のたびリセットされるので、毎回実行が必要

ターミナル
sudo ifconfig lo0 alias 127.0.0.2
※追加する際管理者パスワードを聞かれるので入力して実行

これで新たに127.0.0.2のループバックアドレスが使えるようになります

.evnファイル設定

環境変数ファイルを用意しコンテナ内の情報(データベース・wp-configの設定)及び先ほどのIP情報を.evnファイルにまとめます

project/.evn
container=containerName

MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=exampledb
MYSQL_USER=user
MYSQL_PASSWORD=root

WORDPRESS_DB_NAME=exampledb
WORDPRESS_DB_USER=user
WORDPRESS_DB_PASSWORD=root
WORDPRESS_TABLE_PREFIX=wp_

IP=127.0.0.2

Dockerfileの設定

wordpressイメージに対して
「wordpressのアップロード容量」と「mailhog用設定」をphp.ini側に施すため下記を参考にさせていただき設定しました

project/Dockerfile
FROM wordpress:5.8-php7.3-apache

RUN curl --location --output /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 && \
    chmod +x /usr/local/bin/mhsendmail

RUN echo 'sendmail_path="/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025 --from=admin@example.com"' > /usr/local/etc/php/conf.d/mailhog.ini

RUN echo "file_uploads = On\n" \
         "memory_limit = 500M\n" \
         "upload_max_filesize = 500M\n" \
         "post_max_size = 500M\n" \
         "max_execution_time = 600\n" \
         > /usr/local/etc/php/conf.d/uploads.ini

1つ目と2つ目のRUN部分がmailhogを扱うための設定で/usr/local/etc/php/conf.d/mailhog.iniに追加されるようになっています
3つ目のRUN部分がwordpressの容量制限を変更する設置で/usr/local/etc/php/conf.d/uploads.iniに追加されるようになっています

/usr/local/etc/php/conf.d内に適当な名前のiniファイルを作れば、php.ini に書き加えたのと同じ扱いになります。

この設定にすると「wordpress」のTAG部分が「latest」になってしまいますが、
wordpressのコンテナのinspactで「PHP_VERSION」を確認するとFROMで指定したバージョンになっていました。

docker-compose.yml設定

環境変数とDockerfileの設定及びmailhogイメージを追加しました

project/docker-compose.yml
version: "3"
services:
  db:
    # container_name: ${container}_sql
    image: mysql:5.7
    volumes:
      - ./db-data:/var/lib/mysql
      # sql読み込む場合「db-data」にsqlファイル入れる
      # - ./db-data:/docker-entrypoint-initdb.d
    restart: always
    env_file:
      - .env

  wordpress:
    # container_name: ${container}_wordpress
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./my-theme:/var/www/html/wp-content/themes
      - ./wp-content:/var/www/html/wp-content
    restart: always
    depends_on:
      - db
    ports:
      - ${IP}:8080:80
    environment:
      WORDPRESS_DB_HOST: db:3306
    env_file:
      - .env

  mailhog:
    # container_name: ${container}_mailhog
    image: mailhog/mailhog
    ports:
      - ${IP}:1025:1025
      - ${IP}:8025:8025

  phpmyadmin:
    # container_name: ${container}_phpmyadmin
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    depends_on:
      - db
    ports:
      - ${IP}:8888:80

上記を起動しlocalhost:127.0.0.2:8080を開くとwordpressのページにつながります
wordpressのimage:で設定していたものはbuild:でDockerfileの設定を読み込んでいます。
環境変数は${IP}及びenv_file:で設定しています。
mailhogは8025がブラウザ上でUIを起動させるポート番号となります

読み込むsqlファイルがある場合はdb-dataディレクトリ配下に入れることで、実行してくれます※未検証

番外メモ

追記の設定では予約投稿を試すと失敗してしまいますが、
下記の設定で予約投稿も一応できたのでメモ

コンテナ内のwordpressに入ります

project/
docker-compose exec wordpress bash

下記コマンド実行

project/
curl -I localhost:80

下記プラグインをwordpressにインストールして
ドメイン名とポート番号設定
https://wordpress.org/plugins/change-wp-cron-request-url/

参考にしたサイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?