自分だけのクイズ作成 - Quipha公開中

【Docker Compose】WordPressを簡単構築

Docker
スポンサーリンク

はじめに

複数のコンテナを使う場合に、Docker Composeを使うと便利です。
複数のコンテナの定義をymlファイルに記載し利用できます。

今回はdockerでWordpressを構築する例をもとに、Docker Composeについてまとめました。

他にも私のブログで、WordPressについて解説している記事がありますのでご覧ください。

環境

  • Windows 11 / 10 or macOS Monterey (M1)
  • Docker

2022/04/24 作業はWindowsでもMacでも同様にできます。
Macを使用して最新バージョンで確認しました。

Dockerの用意

Macの場合はDockerのみですが、Windowsの場合はDocker(WSL2がバックエンド)が必要です。
Dockerのインストール方法は、以下の記事をご覧ください。

Windows
Mac

Docker Composeの確認

これ以降は、Windowsの場合はPowerShellで、Macの場合はターミナルで作業を行います。
以下のコマンドでDocker Composeを確認します。
(WindowsとMacでバージョンが違いました)

$ docker-compose --version

Windows:
docker-compose version 1.29.2, build 5becea4c
Mac:
Docker Compose version v2.4.1

Docker Desktopをインストールすると、同時にインストールされます。

Docker Composeを使わない場合

まずはDocker Composeを使わずに構築してみます。
個別にイメージをpullします。

$ docker pull mysql:5.7
$ docker pull wordpress:latest

M1 Macの場合は、以下のエラーが表示されます。

% docker pull mysql:5.7

5.7: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries

M1 Macの場合は、プラットフォームを指定してプルします。

% docker pull mysql:5.7 --platform linux/x86_64

MySQLとWordPressのコンテナを作成します。
以下のように2つのコマンドを実行します。

$ docker run --name mysql_db -e MYSQL_ROOT_PASSWORD=passwd -e MYSQL_DATABASE=wordpress -d mysql:5.7
$ docker run --name wp_site --link mysql_db:mysql -p 8000:80 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=passwd -d wordpress

dockerの引数は以下です。

引数備考
–nameコンテナ名
-eコンテナの環境変数
-dバッググラウンドで起動
–link他のコンテナへのリンク
-pポート転送(ホストのポート:コンテナのポート)

ブラウザで以下のURLにアクセスします。

http://localhost:8000/

WordPressの画面が表示されました。

ついでにインストールしてみましょう。
日本語を選択して「続ける」をクリックします。

データベース名などを入力する画面は表示されませんでした。
なぜなのか気になったので、WordPressの設定を見てみることにします。

WordPressのコンテナに入るには、execを使用します。

docker exec -it wp_site /bin/bash

ドキュメントルートの中に入りました。

root@502c87cbdf9d:/var/www/html# ls
index.php	 wp-admin	       wp-config-sample.php  wp-includes	wp-mail.php	  xmlrpc.php
license.txt	 wp-blog-header.php    wp-config.php	     wp-links-opml.php	wp-settings.php
readme.html	 wp-comments-post.php  wp-content	     wp-load.php	wp-signup.php
wp-activate.php  wp-config-docker.php  wp-cron.php	     wp-login.php	wp-trackback.php

catコマンドで、wp-config.phpを見てみます。
以下のように、docker用の設定から読み込んでいるのが分かります。

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );

/** Database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') );

/** Database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );

getenv_dockerという関数で設定値を取得しているのが分かります。
これはコンテナ作成時に引数で指定した環境変数から取得しています。

if (!function_exists('getenv_docker')) {
	// https://github.com/docker-library/wordpress/issues/588 (WP-CLI will load this file 2x)
	function getenv_docker($env, $default) {
		if ($fileEnv = getenv($env . '_FILE')) {
			return rtrim(file_get_contents($fileEnv), "\r\n");
		}
		else if (($val = getenv($env)) !== false) {
			return $val;
		}
		else {
			return $default;
		}
	}
}

インストールに戻って、サイトの情報などを入力します。

これだけでWordpressが使えるようになりました。

スポンサーリンク

Docker Composeを使ってみる

このように複数のコンテナを起動したり停止したりするのが面倒です。
そこでDocker Composeを使ってみましょう。
先程まで使用したdockerコンテナやイメージは削除しておきましょう。

任意の場所にフォルダを作成します。

Windows例:
D:\docker\wordpress
Mac例:
/Users/xxx/Documents/wordpress

先程のフォルダの直下にdocker-compose.ymlファイルを作成します。
中身は以下のようにしました。
内容はdocker runと同じ感じですね。

version: '2'
services:
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: passwd
      MYSQL_DATABASE: wordpress

  wordpress:
    depends_on:
      - mysql
    image: wordpress:latest
    ports:
      - "8000:80"
    volumes:
      - "./html/:/var/www/html/"
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: passwd

M1 Macの場合、mysqlの定義にプラットフォームを指定します。

version: '2'
services:
  mysql:
    image: mysql:5.7
    platform: linux/x86_64
    environment:
      MYSQL_ROOT_PASSWORD: passwd
      MYSQL_DATABASE: wordpress

  wordpress:
    depends_on:
      - mysql
    image: wordpress:latest
    ports:
      - "8000:80"
    volumes:
      - "./html/:/var/www/html/"
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: passwd

試しに「volumes」を指定して、ローカルPC側でWordPressファイル一式にアクセスできるようにしました。

versionはComposeファイルのフォーマットです。
バージョンによって書き方が異なります。

Compose file
Compose file reference

–linkオプションについては、自動で認識するためdocker-compose.ymlでは指定する必要はありません。

WordPressコンテナは、公開ディレクトリのフォルダをホスト側と共有しました。

docker-compose.ymlと同階層に移動し、以下のコマンドを実行します。

docker-compose up -d

初回時はイメージの構築から行われます。
しばらくすると各コンテナが起動します。

dockerコンテナを確認しましょう。
2つとも起動していますね。

% docker ps

CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                  NAMES
c7f195471baf   wordpress:latest   "docker-entrypoint.s…"   13 seconds ago   Up 12 seconds   0.0.0.0:8000->80/tcp   wordpress-wordpress-1
ede6e693c840   mysql:5.7          "docker-entrypoint.s…"   13 seconds ago   Up 12 seconds   3306/tcp, 33060/tcp    wordpress-mysql-1

ブラウザで以下のURLにアクセスします。

http://localhost:8000/

WordPressの画面が表示されました。

ホスト(WindowsやMac)の方でもWordpressのファイルが見えることを確認します。

先程同様に、Wordpressがインストールできることを確認してください。

Docker Composeコマンド

docker-compose.ymlと同じ階層で、それぞれのコマンドが使用できます。

コンテナの起動

-dはバッググラウンドで起動。

docker-compose up -d

コンテナの確認

docker-compose ps

NAME                    COMMAND                  SERVICE             STATUS              PORTS
wordpress-mysql-1       "docker-entrypoint.s…"   mysql               running             33060/tcp
wordpress-wordpress-1   "docker-entrypoint.s…"   wordpress           running             0.0.0.0:8000->80/tcp

コンテナの停止

docker-compose stop
Stopping wordpress_wordpress_1 ... done
Stopping wordpress_mysql_1     ... done

コンテナの削除

docker-compose rm
Going to remove wordpress_wordpress_1, wordpress_mysql_1
Are you sure? [yN] y
Removing wordpress_wordpress_1 ... done
Removing wordpress_mysql_1     ... done

コンテナの停止、削除、ネットワーク削除、イメージ削除

docker-compose down --rmi all
Removing network wordpress_default
Removing image mysql:5.7
Removing image wordpress:latest

さいごに

今回はDocker Composeについてまとめました😊

他にも私のブログで、WordPressについて解説している記事がありますのでご覧ください。

\オススメ/

コメント

タイトルとURLをコピーしました