前のページまでに、Dockerインストール方法や、Docker上で最新版PHP環境のWordPressを構築する方法を紹介しました。
では、これから、ちょっとしたDocker Tipsや、個人的トラブルシューティング事例、およびコマンド種等を紹介したいと思います。
ファイルの所有者やパーミッションをDockerコンテナ内で確認する方法
先ほど述べたように、レンタルサーバーから移行してきたWordPressファイル群の所有者を変更できないと、プラグインが削除できないなどの問題がありました。
なので、docker-compose.yml
ファイルにコマンドを書いて、ファイル所有者を変更していました。
ならば、Dockerでファイルの所有者情報を見たい場合どうすれば良いでしょうか?
これはなかなか情報が無くて、かなり苦戦しました。
PowerShell上で、dir
というコマンドを打っても、所有者情報は表示されません。
なら、
Get-Acl | fl
というコマンドを打ってみましたが、これは、Windowsのファイルシステムの所有者情報しか表示してくれなかったので、的外れでした。
結局、わかったのは、DockerのWordPressコンテナに入って、Linux環境内でファイルのリストを見なければいけないということでした。
まず、以下のコマンド
docker ps -a
で、現在稼働中のコンテナ一覧を見ます。
そして、WordPressコンテナ名をコピーし、以下のコマンドを打って、WordPressコンテナ中のLinux環境に入り、bashコマンドが使える状態にします。
docker exec -it xxxxxxxx bash
xxxxxxxx
がWordPressコンテナ名です。
下図のようになります。
(図40)
すると、Linux bash のコマンドプロンプトになります。
次に、ファイル所有者やパーミッションの一覧を表示するLinuxでおなじみの以下のコマンドを打ちます。
ls -l
すると、こうなりました。
(図41)
所有者とグループ両方とも root
となっていました。
この場合ではなぜか、Docker WordPressではプラグイン削除ができませんでした。
ですから、このroot
を、www-data
に変えてやれば良いわけです。
この状態で、所有者を変更するコマンド、chownを使って、
chown -R www-data:www-data /var/www/html && apache2-foreground
と打っても良いですし、先ほど紹介したように、docker-compose.yml
のcommand:
のところでchownコマンドを使っても良いと思います。
exit 0
コマンドでbashを脱出できます。
実は、先ほど述べましたが、WSL2上でUbuntuをインストールすれば、WSLでls
コマンドが使えるそうです。
Twitterで、「しおじゃけ」さんから情報いただきました。
近々試してみたいと思います。
しおじゃけさん、ありがとうございました。
Dockerデータを外部ドライブに置き、ディスク容量を節約する
Dockerをしばらく使っていると、OSが入っているCドライブのディスクを圧迫してきます。
1週間くらいひたすら使い続けていると、Dockerデータが2GBから3.5GBまで膨れ上がりました。
毎回、イメージを削除していても、なぜか膨れ上がります。
よって、私はDockerデータをDドライブのハードディスクに移すことにしました。
こうすると、CドライブがSSDだった場合に、ハードディスクに移行することになり、動作が重くなると思います。
特に、WordPress記事を下書き保存したり、メディアから画像を追加する場合に、少々間ができます。
これが嫌なら、移行は止めた方が良いです。
ただ、私の場合は、WordPressのテスト環境用なので、速度は求めません。
よって、ハードディスクのDドライブに移行することにしました。
では、まず、Docker Desktopで、イメージやコンテナを事前に作成しておきます。
次に、タスクトレイのDockerアイコンを右クリックして、「Quit Docker Desktop」をクリックして、Dockerを停止しておきます。
(図50)
次に、PowerShellに以下のコマンド
wsl -l -v
と打って、起動中のWSLディストリビューションを確認します。
(図51)
このようにSTATEが「Stopped」になっていればOKです。
因みに、wsl --shutdown
でも停止できますが、タスクトレイのDocker Desktopを停止した方が確実だと思います。
このリストのうち、docker-desktop-data
の方だけ、Dドライブの好きなフォルダに移設したいと思います。
因みに、docker-desktop
の方も移設することは可能ですが、Docker Desktopを再起動したり、パソコンを再起動したりすると、消えてしまうので、やっても意味無かったです。
私のやり方が間違えていたのかも知れませんが、容量は100MB少々しかなく、増加することは無かったので、docker-desktop-data
だけで良いと思いました。
では、まず、docker-desktop-data
を保存する外部フォルダを決めます。
ここでは、例として、D:\docker
とした場合で説明します。
まず、念のため、cdコマンドで、d:\docker
フォルダに移動しておきます。
(図52)
次に、現在のdocker-desktop-data
をバックアップ保存します。
tar形式でエクスポートします。
以下のコマンドです。
wsl --export docker-desktop-data D:\docker\docker-desktop-data.tar
(図53)
すると、エクスプローラーでd:\docker
フォルダを開くと、下図の様にdocker-desktop-data.tar
ファイルができていると思います。
(図54)
その後、以下のコマンドでWSLからdocker-desktop-data
を登録解除します。
(図55)
docker-desktop-data
登録解除が終わったら、以下のコマンド
wsl -l -v
で確認します。
(図56)
このように、docker-desktop-data
が消えていればOKです。
次に、バックアップ保存したdocker-desktop-data
を、新たなフォルダを指定してインポートします。
以下のコマンドです。
wsl --import docker-desktop-data D:\docker D:\docker\docker-desktop-data.tar
このコマンドの意味はこんな感じです。
wsl --import <ディストリビューション名> <新規インストール場所> <元ファイル名> [オプション]
(図57)
このコマンドを実行すると、終了するまで20秒くらいかかりました。
では、wsl -l -v
コマンドで確認します。
以下のように、VERSIONが2になっていればOKです。
(図58)
もし、下図の様にVERSIONが1になっていたら、Dockerがフリーズしてまともに動きません。
(図59)
この原因は、先に紹介した、以下のコマンドが実行されていなかったためです。
wsl --set-default-version 2
この場合、このコマンドを実行してから、unregisterして再登録をやり直せばOKです。
結果、d:\docker
フォルダには下図の様な ext4.vhdx
というファイルができていればOKです。
(図60)
この状態で、Docker Desktopを起動すればOKです。
このファイルは、何度もDockerイメージを作成したり削除したりを繰り返すと、どんどんファイル容量が増加していきますので、十分なハードディスク空き容量が必要です。
また、先ほど述べたように、ハードディスクの場合は動作が重くなるということは頭に入れておいた方が良いです。
メモリ使用制限してくれる.wslconfigファイルについて
さきほど紹介したように、WSL2でDockerを使うと、メモリが鬼のように食われるので、それを抑える方法を探していました。
やっぱり、ちゃんとありました。
yoichiwo7さんの以下の記事を参考にさせて頂きました。
テキストエディタで、.wslconfig
というファイルを作り、以下のように入力します。
[wsl2] memory=2GB swap=0
2GB は、WordPressを使うなら最低限必要だと思います。
swap は、メモリが足りなくなったらディスク内の領域を使用するらしいのですが、SSDの場合は書き込み回数を増やすことになり、寿命を縮めてしまう可能性があるという情報があったので、ゼロにしておけば良いかと思います。
これを、C:\Users\User-Name
のところに保存します。User-Nameは自分のパソコンのユーザー名です。
実際にやってみると、確かに2GBに抑えてくれました。
しかし、私の場合、8GBしかメモリを積んでいないので、WordPressの1サイト分ならば、ほとんど変わらないので、結局、wslconfigファイルは使いませんでした。
NGINXサーバー構築は今後の課題
今、多くのレンタルサーバーではApacheではなく、NGINXだと思います。
そこで、docker-compse.yml
ファイルでNGINX対応の記述をしてみましたが、まだうまく動作するに至っていません。
うまくいったら、このブログで紹介したいと思います。
今後の課題とします。
個人的トラブルシューティング
Dockerを初めて使ってみて、個人的に遭遇したトラブルシューティングを紹介します。
あくまで備忘録です。
wslのコマンドラインで、’>>’ という表示になった場合
コマンドラインのコピー&ペーストで、改行コードまでPowerShellに貼り付けてしまうと、下図の様に’>>
’という表示のままになってしまいます。
(図80)
この場合、このまま普通にEnterキーを押せば脱出できました。
Dockerがフリーズしたら、Troubleshootを使う
Dockerでイメージやコンテナをマウントと削除を繰り返していると、何かを誤って、下図の様にDocker Engine starting という画面でフリーズしてしまうことがあります。
(図81)
その場合は、WindowsのタスクトレイのDockerアイコンを右クリックして、「Troubleshoot」をクリックします。
(図82)
そうすると、下図の様な画面になるので、「Clean / Purge data」をクリックします。
(図83)
すると、下図の様な画面が出るので、とりあえず全てにチェックを入れて、「Delete」をクリックします。
これをクリックしても、docker-compose.yml
は消えないので、特に問題無いと思います。
(図84)
すると、下図の様な警告が出ました。
この原因は不明なので、とりあえず「続行」をクリックします。
(図85)
すると下図の画面になるので、閉じます。
(図86)
すると、再起動を要求する画面が出るので、Docker Desktopを再起動します。
(図87)
その後は、
wsl -l -v
というコマンドを打って、WSLバージョンが2で変わっていないことを確認してください。
もし、変わっていたら、先に紹介したように、
wsl --set-default-version 2
を実行して、最初からセットアップした方が良いかと思います。
localhost:8000 が localhostにリダイレクトされてアクセスできなくなった。
これは、ブラウザをスパーリロード、つまり、ブラウザのキャッシュを削除してブラウザを再起動すれば治りました。
ブラウザからWordPress管理画面にアクセスすると、「このサイトで重大なエラーが発生しました。」というメッセージが出てアクセスできない
PHP8 でWordPressインストールした場合、ブラウザで以下のエラーが出ました。(2021/07/13時点)
このサイトで重大なエラーが発生しました。対応手順については、サイト管理者のメール受信ボックスを確認してください。
(図90)
これでは、何が原因だったのかまったくわからないので、WordPressデータ内の wp-config.php
ファイルをテキストエディタで開き、以下のデバッグモードをtrueにして、エラー表示させます。
define('WP_DEBUG', true);
そして、WordPress管理画面をブラウザで開くと、私の場合は以下のメッセージが出ました。
Parse error: syntax error, unexpected token “::”, expecting “(” in /var/www/html/wp/wp-content/plugins/search-regex/models/search.php on line 322 Notice: is_embed が誤って呼び出されました。条件付きクエリータグは、クエリーが実行される前には機能しません。それ以前では、常に false を返します。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 3.1.0 で追加されました) in /var/www/html/wp/wp-includes/functions.php on line 5313
これは、実はDocker Desktopのログにも出ていたのです。
どうやら、PHP8.0以上の場合、WordPressプラグインのSearch RegExが問題のようなので、WordPressデータ中のpluginフォルダ内のsearch-regexフォルダを削除します。
すると、管理画面に入れました。
コマンド集
今回使ったコマンドを集めてみました。
Docker コマンド集
PowerShell上で使うDockerコマンドです。
docker images
作成したイメージ一覧表示
docker ps -a
稼働中コンテナ一覧表示
docker rm
コンテナ削除
docker rmi
イメージ削除
docker exec -it xxxxxxxx bash
これは、コンテナ名xxxxxxxxに入って、Linuxのbashコマンドを打つためのコマンドです。
docker execについての詳細はこちらのページを参照してください。
オプションの -it
は、-i
と -t
のオプションを合わせたものです。
-i
はSTDIN(標準入力)をオープンにし続けて、-t
はpseudo-TTYを割り当てるということです。
意味不明ですが、このオプションを付けると、bashコマンド入力を待ち受ける状態になるということです。
こんな感じです。
(図40)
すると、ls -l
などのLinuxコマンドでファイル所有者やパーミッションなどをみることができます。
exit 0
で脱出することができます。
docker-compose コマンド集
PowerShell上で使う、docker-compose コマンドです。
docker-compose --version
docker-compose のバージョンを表示する。
このコマンドを打つと、5秒くらいタイムラグがあって表示される。
docker-compose up -d
docker-compose.yml
ファイルで作成した、イメージやコンテナを生成する。
-d
オプションは、バックグラウンドで実行するという意味
docker-compose down -v
docker-compose up
コマンドでマウントしたコンテナを削除する。
-v
オプションは、Docker内で生成したvolumesデータも削除する。
docker-compose down --rmi all -v
docker-compose down
だけではコンテナのみでイメージは削除してくれませんが、--rmi all -v
というオプションを入れると、イメージまで全て削除してくれる。
Linux bash コマンド集
私は、Dockerコンテナ内に入って、bashコマンドとして使いました。
ただ、WSL2でUbuntuをインストールすれば、WSL2上で以下のコマンドを使えるらしいです。
ls -l
lsコマンドは、Linuxの世界ではお馴染みのコマンドです。
-l や -a オプションを使えば、ファイルやフォルダの所有者やパーミッション情報をみることができます。
chown -R
そのディレクトリの配下ディレクトリ内全てのファイルの所有者とグループ名を変更する。
以下のコマンド
chown -R www-data:www-data /var/www/html && apache2-foreground
var/www/html
内のファイル全ての所有者とグループをwww-data
に変更し、apahe2をフォアグラウンドで実行するという意味。
WSL2コマンド集
PowerShell上で使うWSL2コマンドです。
wsl -l -v
現在稼働しているWSL2のディストリビューションを詳細表示する。
wsl --set-default-version 2
WSL ディストリビューションの既定バージョンを2にします。
最新のDockerを使う場合は2021/7月時点で全てWSL2なので、必ずこのコマンドを実行してからDockerをインストールすると良いと思います。
wsl --shutdown
稼働しているすべてのWSL2ディストリビューションを停止する。
でも、これはほとんど使わずに、Docker をQuitすれば良い。
PowerShell コマンド集
PowerShellのコマンドです。
cd
ディレクトリ移動。
cd d:\docker
cd..
とすると、一つ上位のディレクトリに移動。
cls
PowerShell の画面を一括クリアする
Get-Acl | fl
Windowsファイルシステムのファイル所有者情報表示できます。
Linuxのbashのlsコマンドとは異なるので要注意です。
tree (オプション無し)
ディレクトリ構成のみ表示
PS D:\docker\test_wp> tree
フォルダ パスの一覧: ボリューム Data ボリューム シリアル番号は C8A8-46FD です D:. ├─html │ └─wp ├─mysql ├─php └─phpmyadmin
tree /f
ファイルも表示
PS D:\docker\test_wp> tree /f フォルダー パスの一覧: ボリューム Data ボリューム シリアル番号は C8A8-46FD です D:. │ docker-compose.yml │ ├─html │ │ default_page.png │ │ index.php │ │ phpinfo.php │ │ │ └─wp ├─mysql ├─php └─phpmyadmin
まとめ
以上、Dockerを初めて使ってみた感想と、Dockerによる最新PHPバージョンによるローカルPCのWordPress環境構築の個人的備忘録でした。
今回の備忘録は、今まで以上に骨が折れました。
しかし、これで、Docker難民脱出です!
とにかく、PHPのバージョンを変えてサクッとWordPressサイトをテストできるのが最高ですね。
ただ、サクッと変えられる反面、メモリ8GBでは動作が重いです。
せめて16GBは欲しいですね。
でも、個人PCでDockerを試せるなら、私的にはそれで十分です。
そして、多少なりともLinux環境を勉強できたのや良い切っ掛けでした。
これで、Raspberry Piへの移行もし易くなったというものです。
これでローカルのサーバー環境で、Linuxを使っていろいろテストできそうです。
個人Web開発の道が少し開けたような気がします。
というわけで、今回はここまでです。
ではまた…。
コメント