WordPressのサイトをローカル環境(docker)に移行する方法

プラットフォーム
この記事は約71分で読めます。
  1. WordPressのサイトをローカル環境(docker)に移行する方法について
      1. docker(ドッカー)を使用する
        1. dockerをインストールする
        2. imageをインストールする(Apacheのhttpd)
        3. 取得したApacheをコンテナ(Container)で走らせる
        4. 実行中のコンテナを確認する
        5. コンテナを停止させてみる
        6. 停止させたコンテナを再起動させる
        7. docker(Linux環境下)内にアクセスする
      2. PHP入りのアパッチを導入するにあたり
      3. php:8.2.12-apacheを導入する
        1. php:8.2.12-apacheのimageを取得
        2. php:8.2.12-apacheをphp82という名前を付けて実行する
        3. Apacheの設定ファイルを調べる
        4. Apacheのサイト構成ファイルの場所を調べる
        5. PHPの設定ファイルの場所を調べる
  2. Apache+PHP+MySQLの環境を構築する
      1. ディレクトリ構成(Apache+PHP+MySQL環境)
      2. compose.ymlファイルの作成
      3. Dockerfileの作成
      4. configファイルの作成(my.conf)
        1. my.confファイルの作成
        2. php.iniファイルの作成
      5. phpファイルの作成
        1. index.phpの作成
        2. connect.phpの作成
      6. 作成したcompose.ymlを実行
        1. composeに失敗した場合
        2. 実行に成功したかを確認
      7. 環境が整ったかの確認作業
        1. phpinfoの確認
      8. DBの接続確認
        1. 「http://localhost:8080/connect.php」を実行
          1. エラーが出る場合
        2. phpMyAdminへの接続
  3. docker環境で、SSL接続を行おう!
      1. Chocolateyをインストールする
      2. mkcertをインストールする
      3. SSL環境を作る
        1. mkcertを使用して証明書を発行する
        2. SSL設定を作成する
      4. ディレクトリ構成(SSL環境)
      5. サーバー証明書を発行する
        1. サーバー証明書を発行します
      6. Dockerfileの修正
      7. compose.ymlファイルの修正
      8. dockerのバージョンをチェックしておく
      9. コンテナを再度立ち上げる
  4. WordPressをSSL環境下で動かす
      1. ディレクトリ構成
      2. phpmyadmin-misc.iniファイルの追加
      3. compose.ymlファイルの修正
      4. サーバー環境でエクスポートしたWordPressのデータベースをローカル環境にインポートする
        1. ローカル環境のデータベースの変更を行います
        2. ローカル環境のWordPress設定ファイル「wp-config.php」の変更を確認します
        3. .htaccessの作成
        4. ローカル環境での動作確認
      5. wp-configファイルに次の文言を追加
スポンサーリンク

WordPressのサイトをローカル環境(docker)に移行する方法について

dockerは初めのうちは無料だったのですが2021年9月より条件によっては有料となりました。個人利用もしくはスモールビジネス(従業員数250人未満かつ年間売上高1000万ドル未満)、教育機関、非商用のオープンソースプロジェクトでは引き続き無料で利用できます。

大企業 (従業員 250 名以上、または年間収益 1,000 万ドル以上) で Docker Desktop を商用利用するには、有料のサブスクリプションが必要です。

docker(ドッカー)を使用する

dockerをインストールする

まずは、dockerをインストールしてローカル環境を作るところから始めたいと思います。こちらのサイトが参考になるかと思います。

Windows Home に Docker Desktop をインストール — Docker-docs-ja 19.03 ドキュメント

Docker Hub」より、最新版のdockerをインストールします。

Install Docker Desktop on Windows
Get started with Docker for Windows. This guide covers system requirements, where to download, and instructions on how t...

Docker Desctop for Windows」をクリックします。ダウンロードしたファイルをクリックするとインストールが始まります。
Use WSL 2 instead of Hyper V(recommended)」と「Add shotcut to desktop」のチェックボタンがありますが、今回は両方チェックを入れて「OK」をクリックします。
WSL2」とは「WSL」の次世代の規格で「WindowsでLinuxを動かす環境」から「Windowsで完全なLinuxを動かす環境」へと進化しました。

インストールが開始されるので、しばらく待ちます。

インストールが完了したら、「Close and restart」と表示がされます。これをクリックすると再起動されるのであらかじめ再起動しても良い状態にしておいてからクリックしてください

再起動が終わると自動でインストールの続きが始まります。("C:\Program Files\Docker\Docker"下にdockerはインストールされます)

まず、規約に同意するかどうかを聞かれるので「Accept(同意)」をクリックします。

【Docker サブスクリプション サービス契約】
[同意する] を選択すると、サブスクリプション サービス契約、Docker データ処理契約、およびデータ プライバシー ポリシーに同意したことになります。

: Docker Desktop は、小規模企業 (従業員数 250 名未満、かつ年間収益 1,000 万ドル未満)、個人使用、教育、および非営利のオープンソース プロジェクトには無料です。それ以外の場合、プロ向けの使用には有料のサブスクリプションが必要です。政府機関にも有料のサブスクリプションが必要です。詳細については、よくある質問をお読みください。

推奨設定を使用し、必要な構成は自動的に設定するを選択するので、上の「」をチェックします。

【Docker Desktop のインストールを完了します。】

・推奨設定を使用する(管理者パスワードが必要)
Docker Desktop は、ほとんどの開発者にとって機能する必要な構成を自動的に設定します。

・詳細設定を使用する
好みの構成を手動で設定します。

次のような画面が出ます。まだユーザー登録をしていないと思いますので、ここは「Continue without signing in(サインインせずに続行する)」を選択してください。

【Docker デスクトップへようこそ】
サインインして Docker デスクトップ サブスクリプションに接続するか、オンライン機能にアクセスします。

すでにアカウントをお持ちですか?サインイン

サインインせずに続行する

次のような画面が出ますが、これはアンケートですので「Skip survey(アンケートをスキップする)」を選んで構いません。

これで「docker」を使う準備は整いました。下図はdockerの起動画面です。※最近のdockerではパソコンを立ち上げると自動で常駐するようになっているようです

次に、現代版コマンドプロンプトであるPowerShellから「docker」でイメージをインストールしていく手段について紹介していきます。「PowerShell」はタスクバーの検索窓から「powershell」と打つと検索候補に出てきます。

imageをインストールする(Apacheのhttpd)

まず、dockerにimageがインストールされているかを確認するコマンド「docker images」を入力してみます。

docker images

PS C:\Users\(ユーザー名)> docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE

このように何もインストールされていないことが確認できます。

では、Apacheをインストールしていきます。

httpdというimageをインストールすることでApacheがインストールされます。コマンドは「docker pull httpd」となります。

docker pull httpd

PS C:\Users\(ユーザー名)> docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
c57ee5000d61: Pull complete
ef22398cad3c: Pull complete
4f4fb700ef54: Pull complete
f420b40fd7be: Pull complete
ea4892b1a58d: Pull complete
1fe3871b50ff: Pull complete
Digest: sha256:5ee9ec089bab71ffcb85734e2f7018171bcb2d6707f402779d3f5b28190bb1af
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

What's Next?
 View a summary of image vulnerabilities and recommendations → docker scout quickview httpd

コマンドを打って、イメージがインストールされたかを確認します。コマンドは先程打った「docker images」です。

docker images

PS C:\Users\(ユーザー名)> docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    75a8cb2b38b1   3 weeks ago   167MB

ここで重要となるのは、「IMAGE ID」です。コンテナに乗せた後で必要となる番号となります。(この場合、「75a8cb2b38b1」)

※コンテナという言葉が出てきました。dockerというのは、イメージを取得して、コンテナに乗せて動かすというものです。コンテナに乗せるには、「run」コマンドを使用します。

取得したApacheをコンテナ(Container)で走らせる

ポート8080を使用して、localhostでApacheを走らせてみます。

docker run -d -p 8080:80 httpd

PS C:\Users\(ユーザー名)> docker run -d -p 8080:80 httpd
75a8cb2b38b19fbeaa10c17c441ca717b061286e065ccb6cd108a406f1876ea3

今回「docker run」コマンドを走らせたときに使ったオプション、「-d」と「-p」ですが、それぞれ次のような意味になります。

-d」 … コンテナの実行をバックグラウンドで行います。これを指定しなかった場合、ターミナルのコマンド操作が「Ctrl+C」を押すまでできなくなり、コンテナに操作を奪われてしまいます

-p」 … コンテナのポート番号とローカルのコンピュータのポート番号を紐づけるオプションです。今回実行したコンテナはhttpdの機能を持っているので、80番ポートでサービスが開始されます。ただし80番ポートでの待ち受けを開始したのはあくまでもコンテナであり、docker を実行しているローカルマシンではありません。 そこでこの「-p」オプションでコンテナとローカルのポートを紐づけることで、あたかもローカルマシンでhttpdサービスを提供しているかのような状況を作ることができます。上の例では、ローカルマシンの8080番ポートをコンテナの80番ポートに紐づけています

試しにWebブラウザを立ち上げて「http://localhost:8080」と打ってみてください。成功であれば画面に、「It works!」と表示されるはずです。また、ポートを80として実行すれば、80を省略して「http://localhost」だけで画面を表示することができます。

実行中のコンテナを確認する

docker ps

PS C:\Users\(ユーザー名)> docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS                  NAMES
75a8cb2b38b1   httpd     "httpd-foreground"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp   elastic_margulis

ここで、コンテナのIDを確認しておきます。確認したコンテナID(75a8cb2b38b1)は、コンテナを停止させるときに使用します。

コンテナを停止させてみる

docker stop (コンテナID)

PS C:\Users\(ユーザー名)> docker stop 75a8cb2b38b1
75a8cb2b38b1

dockerのコンテナのプロセスから、Apacheが外れたことがコマンド「docker ps」で確認できます。

docker ps

PS C:\Users\(ユーザー名)> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

これで、一通りの操作ができました。補足ですが、コンテナを削除したい場合には、「docker rm (コンテナID)」コマンドで、imageファイルを消したい場合には、「docker rmi -f httpd」コマンドで行うことができます。また、不用意にこのコマンドは使用しないでください

docker rm (コンテナID)

docker rmi -f httpd

停止させたコンテナを再起動させる

停止させたコンテナを確認するには、「docker ps -a」コマンドを使います。

docker ps -a

PS C:\Users\(ユーザー名)> docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS                     PORTS     NAMES
75a8cb2b38b1   httpd     "httpd-foreground"   18 minutes ago   Exited (0) 6 minutes ago             elastic_margulis

再起動させるには、「docker start」コマンドを使います。

docker start (コンテナID)

PS C:\Users\(ユーザー名)> docker start 75a8cb2b38b1
75a8cb2b38b1

きちんと起動したかを確認します。

docker ps

PS C:\Users\(ユーザー名)> docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS              PORTS                  NAMES
75a8cb2b38b1   httpd     "httpd-foreground"   22 minutes ago   Up About a minute   0.0.0.0:8080->80/tcp   elastic_margulis

プロセスが動いていることが確認できます。とりあえず、コンテナを停止させておきます。

docker stop (コンテナID)

PS C:\Users\(ユーザー名)> docker stop 75a8cb2b38b1
75a8cb2b38b1
docker(Linux環境下)内にアクセスする

docker exec -it (コンテナID) bash

PS C:\Users\(ユーザー名)> docker exec -it 75a8cb2b38b1 bash
root@75a8cb2b38b1:/usr/local/apache2#

上のコマンド(docker exec)で、docker(Linux環境下)内にアクセスすることができます。

ls
cd htdocs
cat index.html

root@75a8cb2b38b1:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules
root@75a8cb2b38b1:/usr/local/apache2# cd htdocs
root@75a8cb2b38b1:/usr/local/apache2/htdocs# ls
index.html
root@75a8cb2b38b1:/usr/local/apache2/htdocs# cat index.html
<html><body><h1>It works!</h1></body></html>

テストで表示されるindex.htmlファイルですが、「/usr/local/apache2/htdocs」の下に置かれていることがわかりました。自分の作ったサイトを表示する場合には、基本的には「htdocs」フォルダ内にファイルを置く必要があります。
このLinuxプロンプトから抜け出すには「CTRL+D」もしくは「exit」と打つと抜け出すことができます。

CTRL+D
exit

例外として指定したフォルダ下のデータを「htdocs」に置いてあるのと同じように動かすこともできます。今回はCドライブ直下にTESTというフォルダを作成し、その中にindex.htmlを作成して、中身は「<html><body><h1>Hello World !</h1></body></html>」とします。

docker run -d -p 8080:80 -v "C:\TEST\:/usr/local/apache2/htdocs/" httpd

PS C:\Users\(ユーザー名)> docker run -d -p 8080:80 -v "C:\TEST\:/usr/local/apache2/htdocs/" httpd
af0ae1195c82243692757952d117d09a5b5858caa635292b177bbb1a1df72c83

Webブラウザに「http://localhost:8080」と打ってみてください。成功であれば画面に「Hello World !」と表示されます。表示されない場合はパスが間違っていますのでフォルダがあるか、パスが間違っていないかを確認してみてください。

これでローカル環境を、docker内部で動かすことができることが確認できました。ただ、このままではPHPを動かすことができません。まあ当たり前ですよね、ただのApacheなので。

とりあえず動作確認できたので、コンテナを終了させておきます。

docker stop (コンテナID)

PS C:\Users\(ユーザー名)> docker stop 75a8cb2b38b1
75a8cb2b38b1

PHP入りのアパッチを導入するにあたり

PHPをインストールするにあたり、どのバージョンを入れるべきかをちょっと調べてみたら次のようなことがわかりました。

PHPの最新安定バージョンは?

なお、現時点でのPHPの最新安定バージョンはバージョン8.2.12です。 PHP 7.4系統の保守は2022年11月28日に終了しており、PHP 8.0系統の保守は2023年11月26日に終了する予定となっています。
2023/11/14

なので、php:8.2.12-apacheというimageをインストールすることにします。このバージョンは2023年10月にリリースされました。

とりあえず、「http」で動くことはわかりました。これから「PHP」や「SSL」環境下で、Apacheを動かす方法について触れていこうと思います。

php:8.2.12-apacheを導入する

php:8.2.12-apacheのimageを取得

docker pull php:8.2.12-apache

PS C:\Users\(ユーザー名)> docker pull php:8.2.12-apache
8.2.12-apache: Pulling from library/php
1f7ce2fa46ab: Pull complete
48824c101c6a: Pull complete
249ff3a7bbe6: Pull complete
aa5d47f22b64: Pull complete
e83ad87cf6a6: Pull complete
92eeb6cb0068: Pull complete
b3a08d032c4e: Pull complete
12ae875b0b5d: Pull complete
10b882016d7d: Pull complete
3e9b3e7d19f8: Pull complete
85d68fe18b7e: Pull complete
b0523d6fe976: Pull complete
4c49d6d17ff8: Pull complete
Digest: sha256:8983699f10a9055f893b2c2f7f2c7c5a5da833b44967b25fe92bdf42b5821a72
Status: Downloaded newer image for php:8.2.12-apache
docker.io/library/php:8.2.12-apache

What's Next?
  View a summary of image vulnerabilities and recommendations → docker scout quickview php:8.2.12-apache

imageが取得できました。

php:8.2.12-apacheをphp82という名前を付けて実行する

docker run --name php82 -d -p 8080:80 -v "C:\TEST\:/usr/local/apache2/htdocs/" php:8.2.12-apache

PS C:\Users\(ユーザー名)> docker run --name php82 -d -p 8080:80 -v "C:\TEST\:/usr/local/apache2/htdocs/" php:8.2.12-apache
abbd56799b842f9b28049694dc30c7192b0dde8a7739da02c43f8ac24e3d8cb2

コンテナ名「php82」が付きました。これでややこしいコンテナIDの代わりにこの名前を使用することができるようになりました。

次に、docker(Linux環境下)内にアクセスしてみます。

docker exec -it php82 bash

PS C:\Users\(ユーザー名)> docker exec -it php82 bash
root@abbd56799b84:/var/www/html#

起動した、php82に入ってみると、htmlの実行アドレスが表示されます。php82を「/usr/local/apache2/htdocs/」下で動かすと指定していたので、それが間違いであったことがわかりましたので、コンテナを「stop」させ、削除(rm)し、再度「/var/www/html」下で動かすように指定して実行します。

docker stop php82
docker rm php82
docker ps -a

PS C:\Users\(ユーザー名)> docker stop php82
php82
PS C:\Users\(ユーザー名)> docker rm php82
php82
PS C:\Users\(ユーザー名)> docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED             STATUS                      PORTS     NAMES
af0ae1195c82   httpd     "httpd-foreground"   34 minutes ago      Exited (0) 14 minutes ago             awesome_elgamal
e2cf5ece9fa1   httpd     "httpd-foreground"   34 minutes ago      Created                               unruffled_hermann
710a8502f0d6   httpd     "httpd-foreground"   39 minutes ago      Created                               boring_easley
75a8cb2b38b1   httpd     "httpd-foreground"   About an hour ago   Exited (0) 37 minutes ago             elastic_margulis

docker run --name php82 -d -p 8080:80 -v "C:\TEST\:/var/www/html/" php:8.2.12-apache

PS C:\Users\(ユーザー名)> docker run --name php82 -d -p 8080:80 -v "C:\TEST\:/var/www/html/" php:8.2.12-apache
44ccd8c00c14b96e2703028c7cccc30f6fc1cd73ecf9f3acd1241f0362ed80aa

こうしたところ、サイトが表示されることが確認できました。

Apacheの設定ファイルを調べる

「docker exec」コマンドで、dockerのLinux環境に入り、その後、Apacheの設定ファイル(apache2.conf)の場所を確認します。

PS C:\Users\(ユーザー名)> docker exec -it php82 bash
root@44ccd8c00c14:/var/www/html# ls -l /etc/apache2/apache2.conf
-rw-r--r-- 1 root root 7178 Apr 13  2023 /etc/apache2/apache2.conf

Apacheの設定ファイル(apache2.conf)は「/etc/apache2/」ディレクトリの下にあることがわかりました。

Apacheのサイト構成ファイルの場所を調べる
root@44ccd8c00c14:/var/www/html# ls -l /etc/apache2/sites-available/000-default.conf
-rw-r--r-- 1 root root 1286 Apr 13  2023 /etc/apache2/sites-available/000-default.conf

/etc/apache2/sites-available/」ディレクトリ下に構成ファイル「000-default.conf」があることが確認できます。

PHPの設定ファイルの場所を調べる
root@44ccd8c00c14:/var/www/html# php -r "phpinfo();" | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php
root@44ccd8c00c14:/var/www/html# ls /usr/local/etc/php -l
total 152
drwxr-xr-x 1 root root  4096 Nov 21 14:50 conf.d
-rw-r--r-- 1 root root 73725 Nov 21 14:50 php.ini-development
-rw-r--r-- 1 root root 73871 Nov 21 14:50 php.ini-production

これで、ApacheとPHPの設定ファイルの場所と名前が分かったので、それをホスト側(ローカル下)にコピーします。この作業は、一旦bashを抜けてホスト側で、「docker cp」コマンドを使って行います。bashを抜けるには「CTRL+D」または「exit」と打つんでしたね。

docker cp php82:/etc/apache2/apache2.conf C;/TEST
docker cp php82:/etc/apache2/sites-available/000-default.conf C:/TEST
docker cp php82:/usr/local/etc/php/php.ini-development C:/TEST
docker cp php82:/usr/local/etc/php/php.ini-production C:/TEST

PS C:\Users\(ユーザー名)> docker cp php82:/etc/apache2/apache2.conf C:/TEST
Successfully copied 9.22kB to C:\TEST
PS C:\Users\(ユーザー名)> docker cp php82:/etc/apache2/sites-available/000-default.conf C:/TEST
Successfully copied 3.07kB to C:\TEST
PS C:\Users\(ユーザー名)> docker cp php82:/usr/local/etc/php/php.ini-development C:/TEST
Successfully copied 75.3kB to C:\TEST
PS C:\Users\(ユーザー名)> docker cp php82:/usr/local/etc/php/php.ini-production C:/TEST
Successfully copied 75.8kB to C:\TEST
PS C:\Users\(ユーザー名)> ls C:\TEST


    ディレクトリ: C:\TEST


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----   2023/04/13 (木)     12:14           1286 000-default.conf
-a----   2023/04/13 (木)     12:26           7178 apache2.conf
-a----   2024/02/11 (日)     15:17             48 index.html
-a----   2023/11/21 (火)     23:50          73725 php.ini-development
-a----   2023/11/21 (火)     23:50          73871 php.ini-production

lsコマンドでコピーが正しく行えたかを見て、正しくコピーできたことが確認できます。

apache2.confファイルとは、私の記事、OpenSSLで証明書を作成してMAMPのローカル環境でSSL設定する方法(Windows)で言うところの、httpd.confファイルになります。

000-default.confファイルとは、MAMPで言うところの恐らく、httpd-vhosts.confファイルに相当すると思われます。

php.ini-developmentファイルは、dockerのコンテナ内の「/usr/local/etc/php/php.ini」ファイルに相当します。

私の場合、SSL環境でのWordPressのサイトの構築を目指しているので、更に続きを書いていきたいと思います。その前に次に行う環境構築でコンテナ名「php82」を再度使用しますので、「php82」のコンテナを停止し、削除しておきましょう。

docker stop php82
docker rm php82
docker ps -a

Apache+PHP+MySQLの環境を構築する

DockerでApache+PHP+MySQLの環境を構築してみる - Qiita
概要Dockerを使ってApache+PHP+MySQLの環境を構築してみたので手順を記載して行く。ディレクトリ構成ディレクトリ |_docker-compose.yaml |_Dockerf…

こちらを参考にしました。docker-compose.ymlファイルが鍵となります。※最近ではこのdocker-compose.ymlファイルは廃止される傾向にあり、変わりにcompose.ymlファイルを設定するようになっているようです。また、compose.ymlファイルはymlファイル自体のバージョン宣言行わなくてもよくなりました。

phpとmysqlの使用するバージョンについては、こちらのサイトを参考にさせていただきました。

【対応表】WordPressのPHPとMySQLの動作/推奨環境バージョン。PHPのサポート期間も確認!|WordPress特化型メディアサイト【WPWeb】
各WordPressのバージョンに応じた「PHPバージョン(推奨環境・動作環境)」「MySQL(推奨環境・動作環境)」について、表で見やすく紹介。PHPのリリース日、アクティブサポート期間、セキュリティサポート期間も合わせて確認。現最新バー...

phpのバージョンは8.2.12、mysqlのバージョンは5.7を使用します。

ディレクトリ構成(Apache+PHP+MySQL環境)

ディレクトリ
|_compose.yml(*)
|_Dockerfile(*)
|_config
|  |_mysql
|  |  |_my.cnf
|  |  |   |_my.conf(*)
|  |  |_init_scripts
|  |    |_01_give_full_privileges_to_mysql_user.sh(*)
|  |_php
|   |_php.ini(*)
|_htdocs
  |_index.php(*)
  |_connect.php(*)

ディレクトリ構成は、このようにします。さきほど作成した「C:\TEST」フォルダの下にファイルを置いていきます。今作成していないファイルは順を追って作成していきますのでご安心ください。ディレクトリ(フォルダ)は作成しておいてください。(*)が付いているものがファイルで、それ以外はディレクトリ(フォルダ)となります

compose.ymlファイルの作成

ファイルは「C:\TEST」フォルダの下に作成します。

services:
    php:
        build: .
        container_name: php82
        volumes:
            - ./config/php/php.ini:/usr/local/etc/php/php.ini
            - ./htdocs/:/var/www/html
        privileged: true
        ports:
            - 8080:80
        depends_on:
            - mysql
    mysql:
        image: mysql:5.7
        container_name: mysql57
        volumes:
            - ./mysql:/var/lib/mysql
            - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
            - ./config/mysql/init_scripts:/docker-entrypoint-initdb.d
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=test_db
            - MYSQL_USER=test_user
            - MYSQL_PASSWORD=test_password
        ports:
            - 3306:3306
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        volumes:
            - ./phpmyadmin/sessions:/sessions
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mysql
            - PMA_USER=root
            - PMA_PASSWORD=root
        links:
            - mysql
        ports:
            - 4040:80

Dockerfileの作成

ファイルは「C:\TEST」フォルダの下に作成します。

FROM php:8.2.12-apache
RUN apt-get update && apt-get install -y \
    libonig-dev \
  && docker-php-ext-install pdo_mysql mysqli opcache

opcache」をおまじないのようにいれているのは、これを入れておくと、ローカル環境でも、多少の高速化が図れるからです。

configファイルの作成(my.conf)

my.confファイルの作成

ファイルは「C:\TEST\config\mysql\my.cnf」フォルダの下に作成します。

[mysqld]
default_autentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-charctrer-set=utf8mb4
php.iniファイルの作成

ファイルは「C:\TEST\config\php」フォルダの下に作成します。

[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

[size]
memory_limit = "80G"
post_max_size = "80G"
upload_max_filesize = "100G"

phpファイルの作成

index.phpの作成

ファイルは「C:\TEST\htdocs」フォルダの下に作成します。

内容はなんでもいいのですが、とりあえずphpに設定されている情報を確認するための、phpinfoを表示させるページを作っておきます。※締めの「?>」がないのはわざとです。最近は閉じ忘れ防止のため、敢えて締めないという方法が主流です

<?php
    phpinfo();
connect.phpの作成

ファイルは「C:\TEST\htdocs」フォルダの下に作成します。
DBとの接続確認用のコードを記述します。

<?php 
    try {
        $dsn = 'mysql:host=mysql;dbname=test_db;charset=utf8';
        $db = new PDO($dsn, 'test_user', 'test_password');
        $sql = 'SELECT version();';
        $contact = $db->prepare($sql);
        $contact->execute();
        $result = $contact->fetchAll(PDO::FETCH_ASSOC);
        var_dump($result);
    } catch (PDOException $e) {
        echo $e->getMessage();
        exit;
    }

作成したcompose.ymlを実行

作業フォルダは「C:\TEST」とします。「cd C:\TEST」コマンドで移動しておいてください。作成したcompose.ymlを実行します。

docker-compose up -d

PS C:\TEST> docker-compose up -d
[+] Running 3/3
 ✔ Container php82       Started                                                                                   2.8s
 ✔ Container mysql57     Started                                                                                   1.3s
 ✔ Container phpmyadmin  Started                                                                                   1.1s
composeに失敗した場合

Error response from daemon: Conflict. The container name "コンテナ名" is already in use by container "コンテナID". You have to remove (or rename) that container to be able to reuse that name.

白川秋
白川秋

このメッセージが出るのは、コンテナ名が重複しているから同じものは

作れないよということを指しています。

既にあるコンテナ名を削除するか、新たに作るコンテナ名を変更しましょう。

docker stop php82
docker rm php82

実行に成功したかを確認

docker ps

PS C:\TEST> docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS         PORTS                               NAMES
842c7caaa701   test-php                "docker-php-entrypoi…"   3 minutes ago    Up 3 minutes   0.0.0.0:8080->80/tcp                php82
fefe1d160d35   phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   59 minutes ago   Up 3 minutes   0.0.0.0:4040->80/tcp                phpmyadmin
4f31e510d09a   mysql:5.7               "docker-entrypoint.s…"   59 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql57

docker ps」コマンドで、コンテナが立ち上がっていることを確認できました。

環境が整ったかの確認作業

phpinfoの確認

http://localhost:8080」へ接続します。

phpinfoが表示されたことが確認できました。

DBの接続確認

「http://localhost:8080/connect.php」を実行

バージョン情報など、dumpが表示されます。

array(1) { [0]=> array(1) { ["version()"]=> string(6) "5.7.44" } }
エラーが出る場合

エラー内容

could not find driver

このエラーの原因は、compose.ymlファイルで、

php:
  build: .

とするところを、

php:
  build: php:8.2.12-apache

としていたときに出ました。(修正済みです)

phpMyAdminへの接続

http://localhost:4040」へ接続したところ、無事画面が出ました。

DBへの接続はできているということでしょうか。実は「データベースを作成する権限がありません」と表示される問題が出ていたのですが、ymlファイルのphpMyAdminの部分を、「PMA_USER=root」「PMA_PASSWORD=root」としたところ解決しました。

倉庫クエを参考に、接続できるかを確認してみました。すると、DBの設定のところでdocker独自の癖のようなものがあることがわかりました。

<?php
// DBのユーザー名とパスワード
$user = "root";     // docker環境
$pass = "root";     // docker環境
// DB接続(ローカル、ネットワーク切り替え)
$dbh = new PDO('mysql:host=mysql;dbname=moyasea_kanbi;charset=utf8', $user, $pass);
//$dbh = new PDO('mysql:host=(サーバーのホスト名);dbname=moyasea_kanbi;charset=utf8', $user, $pass);

$user$passymlファイルで設定した、phpMyAdminのユーザーとパスである「root」を指定する必要がありました。

また「mysql:host=localhost」と通常書くところを「mysql:host=mysql」とする必要がありました。

参考になれば幸いです。

これで、PHPの動作と、DBの動作を確認することができました。
次は、いよいよSSL接続について触れていきたいと思います。

docker環境で、SSL接続を行おう!

Chocolateyをインストールする

ターミナルを管理者権限で開き、次の文言を書いて実行します。「;(セミコロン)」で文章は終わりではないので注意してください。

Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

PS C:\WINDOWS\system32> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

すると、次のような文字が表示されて、Chocolateyのインストールが完了します。

PS C:\WINDOWS\system32> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Forcing web requests to allow TLS v1.2 (Required for requests to Chocolatey.org)
Getting latest version of the Chocolatey package for download.
Not using proxy.
Getting Chocolatey from https://community.chocolatey.org/api/v2/package/chocolatey/2.2.2.
Downloading https://community.chocolatey.org/api/v2/package/chocolatey/2.2.2 to C:\Users\ryu\AppData\Local\Temp\chocolatey\chocoInstall\chocolatey.zip
Not using proxy.
Extracting C:\Users\ryu\AppData\Local\Temp\chocolatey\chocoInstall\chocolatey.zip to C:\Users\ryu\AppData\Local\Temp\chocolatey\chocoInstall
Installing Chocolatey on the local machine
Creating ChocolateyInstall as an environment variable (targeting 'Machine')
  Setting ChocolateyInstall to 'C:\ProgramData\chocolatey'
WARNING: It's very likely you will need to close and reopen your shell
  before you can use choco.
Restricting write permissions to Administrators
We are setting up the Chocolatey package repository.
The packages themselves go to 'C:\ProgramData\chocolatey\lib'
  (i.e. C:\ProgramData\chocolatey\lib\yourPackageName).
A shim file for the command line goes to 'C:\ProgramData\chocolatey\bin'
  and points to an executable in 'C:\ProgramData\chocolatey\lib\yourPackageName'.

Creating Chocolatey folders if they do not already exist.

chocolatey.nupkg file not installed in lib.
 Attempting to locate it from bootstrapper.
PATH environment variable does not have C:\ProgramData\chocolatey\bin in it. Adding...
警告: Not setting tab completion: Profile file does not exist at
'C:\Users\ryu\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'.
Chocolatey (choco.exe) is now ready.
You can call choco from anywhere, command line or powershell by typing choco.
Run choco /? for a list of functions.
You may need to shut down and restart powershell and/or consoles
 first prior to using choco.
Ensuring Chocolatey commands are on the path
Ensuring chocolatey.nupkg is in the lib folder

警告がでましたが、インストールできたと思います。確認するには、「choco list」を入力します。

choco list

PS C:\WINDOWS\system32> choco list
Chocolatey v2.2.2
3 validations performed. 2 success(es), 1 warning(s), and 0 error(s).

Validation Warnings:
 - A pending system reboot request has been detected, however, this is
   being ignored due to the current command being used 'list'.
   It is recommended that you reboot at your earliest convenience.

chocolatey 2.2.2
mkcert 1.4.4
2 packages installed.

このchocolatyは、SSL認証のkeyの発行をするためだけに使用するものです。

mkcertをインストールする

choco install mkcert」コマンドと「mkcert --install」コマンドで、インストールを行います。

choco install mkcert

PS C:\WINDOWS\system32> choco install mkcert
Chocolatey v2.2.2
Installing the following packages:
mkcert
By installing, you accept licenses for the packages.
Progress: Downloading mkcert 1.4.4... 100%

mkcert v1.4.4 [Approved]
mkcert package files install completed. Performing other installation steps.
 ShimGen has successfully created a shim for mkcert.exe
 The install of mkcert was successful.
  Software installed to 'C:\ProgramData\chocolatey\lib\mkcert'

Chocolatey installed 1/1 packages.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

mkcert --install

PS C:\WINDOWS\system32> mkcert --install
Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️
Note: Firefox support is not available on your platform. ℹ️

インストール中、恐らく警告が出ると思いますが、気にせず「OK」を押してください。これで、mkcertがインストールできました。

SSL環境を作る

mkcertを使用して証明書を発行する

作業フォルダは「C:\TEST\certs」となります。「cd C:\TEST\certs」と打って移動しておいてください。

mkcert localhost

PS C:\TEST\certs> mkcert localhost

Created a new certificate valid for the following names 📜
 - "localhost"

The certificate is at "./localhost.pem" and the key at "./localhost-key.pem" ✅

It will expire on 12 May 2026 🗓
SSL設定を作成する

作業フォルダは「C:\TEST\config」フォルダです。「cd ../config」で移動してください。
000-default.conf」ファイルと「default-ssl.conf」を作成します。

ファイル名:000-default.conf

<VirtualHost *:80>
	ServerName localhost
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html
</VirtualHost>

ファイル名:default-ssl.conf

<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
		ServerName localhost
		ServerAdmin webmaster@localhost
		DocumentRoot /var/www/html

		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined
		SSLEngine on
		SSLCertificateFile      /etc/ssl/certs/localhost.pem
		SSLCertificateKeyFile   /etc/ssl/private/localhost-key.pem
		<FilesMatch "\.(?:cgi|shtml|phtml|php)$">
			SSLOptions +StdEnvVars
		</FilesMatch>
		<Directory /usr/lib/cgi-bin>
			SSLOptions +StdEnvVars
		</Directory>
	</VirtualHost>
</IfModule>

ディレクトリ構成(SSL環境)

ディレクトリ
|_compose.yml(*)
|_Dockerfile(*)
|_certs 
|  |_localhost-key.pem(*)
|  |_localhost.pem(*)

|_config
|  |_mysql
|  |  |_my.cnf
|  |  |   |_my.conf(*)
|  |  |_init_scripts
|  |    |_01_give_full_privileges_to_mysql_user.sh(*)
|  |_php
|   |_php.ini(*)
|_htdocs
  |_index.php(*)
  |_connect.php(*)

ディレクトリ構成は、このようにします。SSL認証ファイルを作るために「private」「certs」フォルダを作成しました。「C:\TEST」フォルダの下にファイルを置いていきます。今作成していないファイルは順を追って作成していきますのでご安心ください。ディレクトリ(フォルダ)は作成しておいてください。(*)が付いているものがファイルで、それ以外はディレクトリ(フォルダ)となります

サーバー証明書を発行する

発行する前に、「cd C:\TEST\certs」コマンドでディレクトリを移動させておきます。

サーバー証明書を発行します

mkcert localhost」と打って、サーバー証明書を発行します。

mkcert localhost

PS C:\TEST\certs> mkcert localhost

Created a new certificate valid for the following names 📜
 - "localhost"

The certificate is at "./localhost.pem" and the key at "./localhost-key.pem" ✅

It will expire on 12 May 2026 🗓

ファイルが作成されたかを確認します。

PS C:\TEST\certs> ls


    ディレクトリ: C:\TEST\certs


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----   2024/02/12 (月)     22:09           1704 localhost-key.pem
-a----   2024/02/12 (月)     22:09           1566 localhost.pem

localhost-key.pem」ファイルと「localhost.pem」ファイルが作成されました。

Dockerfileの修正

FROM php:8.2.12-apache
RUN apt-get update && apt-get install -y \
    libonig-dev \
  && docker-php-ext-install pdo_mysql mysqli opcache \
  && rm -rf /var/lib/apt/lists/* \
  && a2enmod ssl \
  && a2enmod rewrite
COPY ./config/php/php.ini /usr/local/etc/php/

# SSLが使えるようにする
RUN /bin/sh -c a2enmod include

# mod_sslを有効化
RUN /bin/sh -c a2ensite ssl

# apache2.confをコンテナにコピー
#COPY /apache2.conf /etc/apache2/apache2.conf

# SSL証明書、秘密鍵をコピー
COPY ./certs/localhost.pem /etc/ssl/certs/
COPY ./certs/localhost-key.pem /etc/ssl/private/

# 000-default.conf、default-ssl.confをコンテナにコピー
COPY ./config/000-default.conf /etc/apache2/sites-available/000-default.conf
COPY ./config/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf

# SSLの有効化
RUN sed -i 's!/etc/ssl/certs/ssl-cert-snakeoil.pem!/etc/ssl/certs/localhost.pem!g' /etc/apache2/sites-available/default-ssl.conf \
    && sed -i 's!/etc/ssl/private/ssl-cert-snakeoil.key!/etc/ssl/private/localhost-key.pem!g' /etc/apache2/sites-available/default-ssl.conf
RUN a2enmod ssl \
    && a2ensite default-ssl

ここで、コンテナを停止させておきます。

docker-compose down

PS C:\TEST\certs> docker-compose down
[+] Running 4/4
 ✔ Container php82       Removed                                                                                   2.9s
 ✔ Container phpmyadmin  Removed                                                                                   3.0s
 ✔ Container mysql57     Removed                                                                                   2.5s
 ✔ Network test_default  Removed                                                                                   0.3s

compose.ymlファイルの修正

services:
    php:
        build: .
        image: php82_ssl
        container_name: php82_ssl
        volumes:
            - ./config/php/php.ini:/usr/local/etc/php/php.ini
            - ./config:/etc/apache2/sites-enabled
            - ./htdocs:/var/www/html
            - ./certs:/etc/ssl/local/certs
        privileged: true
        ports:
            - 8080:80
            - 443:443
        depends_on:
            - mysql
    mysql:
        image: mysql:5.7
        container_name: mysql57
        volumes:
            - ./mysql:/var/lib/mysql
            - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
            - ./config/mysql/init_scripts:/docker-entrypoint-initdb.d
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=test_db
            - MYSQL_USER=test_user
            - MYSQL_PASSWORD=test_password
        ports:
            - 3306:3306
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        volumes:
            - ./phpmyadmin/sessions:/sessions
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mysql
            - PMA_USER=root
            - PMA_PASSWORD=root
        links:
            - mysql
        ports:
            - 4040:80

dockerのバージョンをチェックしておく

次の「コンテナを再度立ち上げる」の作業でエラーが出ていたのですが、バージョンアップをしたら解決しました。アップデートで直ることもありますので、対処法のひとつとして心に留めておいてください。

コンテナを再度立ち上げる

作業フォルダに移動する。

cd C:\TEST

コンテナを立ち上げます。

docker-compose up -d --build

PS C:\TEST> docker-compose up -d --build
[+] Building 3.4s (12/12) FINISHED                                                                       docker:default
 => [php internal] load build definition from Dockerfile                                                           0.1s
 => => transferring dockerfile: 738B                                                                               0.0s
 => [php internal] load metadata for docker.io/library/php:8.2.12-apache                                           0.0s
 => [php internal] load .dockerignore                                                                              0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [php 1/7] FROM docker.io/library/php:8.2.12-apache                                                             0.0s
 => [php internal] load build context                                                                              0.1s
 => => transferring context: 3.83kB                                                                                0.0s
 => CACHED [php 2/7] RUN apt-get update && apt-get install -y     libonig-dev   && docker-php-ext-install pdo_mys  0.0s
 => [php 3/7] COPY ./config/php/php.ini /usr/local/etc/php/                                                        0.2s
 => [php 4/7] COPY ./certs/localhost.pem /etc/ssl/certs/                                                           0.2s
 => [php 5/7] COPY ./private/localhost-key.pem /etc/ssl/private/                                                   0.2s
 => [php 6/7] RUN sed -i 's!/etc/ssl/certs/ssl-cert-snakeoil.pem!/etc/ssl/certs/localhost.pem!g' /etc/apache2/sit  0.7s
 => [php 7/7] RUN a2enmod ssl     && a2ensite default-ssl.conf                                                     1.1s
 => [php] exporting to image                                                                                       0.6s
 => => exporting layers                                                                                            0.6s
 => => writing image sha256:89ec12dbc1e15a18bba1c86ddb714c5ace0579f67020398cfdd4a930d93153bb                       0.0s
 => => naming to docker.io/library/test-php                                                                        0.0s
[+] Running 3/4
 - Network test_default  Created                                                                                   3.3s
 ✔ Container mysql57     Started                                                                                   2.2s
 ✔ Container phpmyadmin  Started                                                                                   2.8s
 ✔ Container php82_ssl   Started                                                                                   2.9s

https://localhostにアクセスしてみます。

はい!うまく動いた!

大変苦労しましたが、無事SSL認証に成功です。

次は、いよいよ、WordPressをSSL環境下で動かすといったことに挑んでいきたいと思います。

WordPressをSSL環境下で動かす

ディレクトリ構成

ディレクトリ
|_compose.yml(*)
|_Dockerfile(*)
|_phpmyadmin
|  |_session
|  |_phpmyadmin-misc.ini(*)

|_certs 
|  |_localhost-key.pem(*)
|  |_localhost.pem(*)
|_config
|  |_mysql
|  |  |_my.cnf
|  |  |   |_my.conf(*)
|  |  |_init_scripts
|  |    |_01_give_full_privileges_to_mysql_user.sh(*)
|  |_php
|   |_php.ini(*)
|_htdocs
  |_index.php(*)
  |_connect.php(*)

phpmyadmin-misc.iniファイルの追加

このままでは、WordPressのデータベースからエクスポートしたデータ容量がでかすぎるとのエラーが出るので、それを解決していきます。

phpmyadmin」フォルダの下に、「phpmyadmin-misc.ini」ファイルを追加します。以下、内容です。

allow_url_fopen = Off
max_execution_time = 1800
memory_limit = 16G
post_max_size = 50G
upload_max_filesize = 50G

compose.ymlファイルの修正

services:
    php:
        build: .
        image: php82_ssl
        container_name: php82_ssl
        volumes:
            - ./config/php/php.ini:/usr/local/etc/php/php.ini
            - ./config:/etc/apache2/sites-enabled
            - ./htdocs:/var/www/html
            - ./certs:/etc/ssl/local/certs
        privileged: true
        ports:
            - 8080:80
            - 443:443
        depends_on:
            - mysql
    mysql:
        image: mysql:5.7
        container_name: mysql57
        volumes:
            - ./mysql:/var/lib/mysql
            - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
            - ./config/mysql/init_scripts:/docker-entrypoint-initdb.d
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=test_db
            - MYSQL_USER=test_user
            - MYSQL_PASSWORD=test_password
        ports:
            - 3306:3306
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        volumes:
            - ./phpmyadmin/phpmyadmin-misc.ini:/usr/local/etc/php/conf.d/phpmyadmin-misc.ini
            - ./phpmyadmin/sessions:/sessions
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mysql
            - PMA_USER=root
            - PMA_PASSWORD=root
        links:
            - mysql
        ports:
            - 4040:80

準備ができたら、コンテナを停止し、再起動します。

docker-compose down

PS C:\TEST> docker-compose down
[+] Running 4/4
 ✔ Container phpmyadmin  Removed                                                                                   2.0s
 ✔ Container php82_ssl   Removed                                                                                   2.2s
 ✔ Container mysql57     Removed                                                                                   2.5s
 ✔ Network test_default  Removed                                                                                   0.3s

docker-compose up -d --build

PS C:\TEST> docker-compose up -d --build
[+] Building 0.3s (16/16) FINISHED                                                                       docker:default
 => [php internal] load build definition from Dockerfile                                                           0.0s
 => => transferring dockerfile: 1.09kB                                                                             0.0s
 => [php internal] load metadata for docker.io/library/php:8.2.12-apache                                           0.0s
 => [php internal] load .dockerignore                                                                              0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [php  1/11] FROM docker.io/library/php:8.2.12-apache                                                           0.0s
 => [php internal] load build context                                                                              0.0s
 => => transferring context: 288B                                                                                  0.0s
 => CACHED [php  2/11] RUN apt-get update && apt-get install -y     libonig-dev   && docker-php-ext-install pdo_m  0.0s
 => CACHED [php  3/11] COPY ./config/php/php.ini /usr/local/etc/php/                                               0.0s
 => CACHED [php  4/11] RUN /bin/sh -c a2enmod include                                                              0.0s
 => CACHED [php  5/11] RUN /bin/sh -c a2ensite ssl                                                                 0.0s
 => CACHED [php  6/11] COPY ./certs/localhost.pem /etc/ssl/certs/                                                  0.0s
 => CACHED [php  7/11] COPY ./certs/localhost-key.pem /etc/ssl/private/                                            0.0s
 => CACHED [php  8/11] COPY ./config/000-default.conf /etc/apache2/sites-available/000-default.conf                0.0s
 => CACHED [php  9/11] COPY ./config/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf                0.0s
 => CACHED [php 10/11] RUN sed -i 's!/etc/ssl/certs/ssl-cert-snakeoil.pem!/etc/ssl/certs/localhost.pem!g' /etc/ap  0.0s
 => CACHED [php 11/11] RUN a2enmod ssl     && a2ensite default-ssl                                                 0.0s
 => [php] exporting to image                                                                                       0.0s
 => => exporting layers                                                                                            0.0s
 => => writing image sha256:82321a8799e5b6e23b19dcbb2c61a19e6c5f64bc017d1cb088ce0e18e7aafe24                       0.0s
 => => naming to docker.io/library/php82_ssl                                                                       0.0s
[+] Running 3/4
 - Network test_default  Created                                                                                   1.9s
 ✔ Container mysql57     Started                                                                                   1.0s
 ✔ Container phpmyadmin  Started                                                                                   1.6s
 ✔ Container php82_ssl   Started                                                                                   1.7s

http://localhost:4040へアクセスします。

インポートタブを見ます。インポートできる容量が、50GByteに増えたことが確認できました。※50Gはちょっと多めの実験的な設定です。通常は128M程度の容量を設定してあげれば良いでしょう。

サーバー環境でエクスポートしたWordPressのデータベースをローカル環境にインポートする

サーバー環境でSQL形式でエクスポートしたデータをローカル環境へインポートします。

インポートが成功しました。※エラーが出てるのは気にしないでください。

ローカル環境のデータベースの変更を行います

本番環境のドメイン(shirakawaroom.com)をローカル環境サイトURL(localhost/shirakawaroom.com)に変更します。

変更は、「phpMyAdmin」から行います。次のSQL文を流します。

UPDATE `wp_options` SET option_value=REPLACE (option_value,'shirakawaroom.com','localhost/shirakawaroom.com');
UPDATE `wp_posts` SET guid=REPLACE (guid,'shirakawaroom.com','localhost/shirakawaroom.com');
UPDATE `wp_posts` SET post_content=REPLACE (post_content,'shirakawaroom.com','localhost/shirakawaroom.com');
UPDATE `wp_postmeta` SET meta_value=REPLACE (meta_value,'shirakawaroom.com','localhost/shirakawaroom.com');

「実行」をクリックします。

変更が完了しました。

ローカル環境のWordPress設定ファイル「wp-config.php」の変更を確認します
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'shirakawa_room' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'root' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'root' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'mysql' );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
.htaccessの作成
#SITEGUARD_PLUGIN_SETTINGS_START
#SITEGUARD_PLUGIN_SETTINGS_END
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<ifmodule mod_rewrite.c="">
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /moyashihome/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /moyashihome/index.php [L]
</ifmodule>
# END WordPress

この設定は一例です。恐らく、本番環境とほぼ同じ設定で動くと思います。

ローカル環境での動作確認

アドレスバーに「https://localhost/shirakawaroom.com/」と入力してアクセスをします。

MAMP」環境下でもそうだったのですが、時間がかかります。

恐らく、ネット上では通信ができていた何かが、ローカル環境になり通信ができなくなったことで、リロードを繰り返している場所があるのではないかと推測しています。

ここが解消できれば、もしかすると「MAMP」環境下でも速く動作するようになるかもしれません。

完全な表示はできませんでしたが、ひとまず完成ということで!

ということでしたが、解決策がありました。

wp-configファイルに次の文言を追加

/* 追加 2022/05/15 */
define('WP_HOME','https://shirakawaroom.com/');
define('WP_SITEURL','https://shirakawaroom.com/');

これで、ネットとローカルをリロードルームせずに、時間短縮してローカル環境でサイトを開くことができました。

解決できてよかったです。

白川秋
白川秋

長々とお読みいただき、ありがとうございました。

コメント