はじめに
Web制作の現場では以前からDockerを使われてる方々が多くいましたが、遅ればせながら、この度私もMAMPからDockerへ移行を始めました!
そこで今回は、手始めにWordPressの環境を構築していきます。
その他に、Laravel 9.xとEC-CUBEの環境構築も今後書く予定ですので、よろしければそちらもよろしくお願いします。
ちなみに今回も初心者さんでも分かるよう心掛けますので、分かりにくいところがあればご連絡ください!
Dockerとは
そもそもDockerとは、PCのOS上に仮想の実行環境(コンテナ)を構築し、サーバーやOSを実行することができ、MAMPと似たようなもの、と捉えればいいと思います。
ただし、実際はMAMPなどとはまったくの別物ですので、詳しく知りたい方は「docker とは」とググってみてください。
Web制作の現場では基本的に、本番環境と同じサーバー環境を構築するのに使います。
MAMPではプロ版にしても、細かいところまでは実環境に揃えられないということがありますが、Dockerではそんな痒いところまで対応できます。
しかもプロジェクト(サイト)ごとに再現する機能やPHPのバージョンなどを細かく指定でき、設定ファイルさえあれば簡単に実行環境(ここでは実環境を再現したコンテナ)の再構築、複製ができるのです。
私も最初は「何を言ってるんだ?」と理解が追いつきませんでしたが、実際に使ってみるとすぐにその柔軟性に魅せられてしまいました。
以前の記事(MAMPのバーチャルホストで複数プロジェクト管理)では複数プロジェクトを用意するたびにファイルを開いて設定を追加しないといけないうえ、何のプロジェクトが稼働できるのかひと目では分からないという面倒なものでした。Dockerはプロジェクトごとに設定ファイルを用意でき、さらにはDocker Desktopというアプリを使えば何のプロジェクトが存在するのかひと目で分かります。
簡単に言うと、ターミナル(コマンド)で操作しないといけないところを、GUIにより直感的に操作しやすくしてくれた便利アプリです。
つまり、管理が煩雑にならず非常に楽です。
さて、Dockerの話はこのくらいにして、さっそく実行環境(コンテナ)を作っていきましょう。
環境構築
Dockerをインストール
まずは少しでもDockerの難易度を下げるため、先に少しだけ出てきたDocker Desktopのインストーラーを本家よりダウンロードし、インストールします。
このアプリにはGitで公開されているDocker本体等が含まれているので、ターミナルでインストールする必要がなくて楽です。
インストールができたら、アプリをさっそく起動してみましょう。
Dockerは本来コマンドを打って操作しますので、ターミナルからも見ることができます。
ターミナルを起動したら、$ docker version
と打ち込んで実行してみてください。
以下の様な結果が返って来れば、正しくインストールされてます。
$ docker version
Client:
Cloud integration: v1.0.28
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:04:45 2022
OS/Arch: darwin/amd64
Context: default
Experimental: true
Server: Docker Desktop 4.11.1 (84025)
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: ▲▲▲▲▲▲▲▲
Built: Mon Jun 6 23:01:23 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.6
GitCommit: ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
runc:
Version: 1.1.2
GitCommit: v1.1.2-0-ga916309
docker-init:
Version: 0.19.0
GitCommit: de40ad0
コンテナ、イメージの違いについて
さて、ここでちょっと脱線しますが、Dockerについて調べると、コンテナとイメージという2つの用語について解説された記事がたくさん上がってきます。
簡単に解説しますが、「イメージとはMariaDBやApacheなど各動作環境のテンプレートで、テンプレートごとに個別に設定したものをコンテナ」と呼びます。
よく勘違いしやすいのが、「複数のイメージをまとめたものをコンテナ」と呼ぶことです。
これはコンテナではなく、謂わばコンテナズ(複数形)です。
このあたりについては後半のdocker-compose.ymlの中身の解説で説明していますので、後ほどご覧ください。
この記事ではWordPress用のコンテナを作るので、最低限でもPHPとWordPressのイメージが必要ですが、データベースの中身を見たり編集したりすることがあるので、phpmyadminも追加しようと思います。
docker-compose.yml(設定ファイル)を作る
さて、ここで初めて出てきたdocker-compose.ymlですが、これはコンテナで使用するイメージと、コンテナ自身の設定をまとめた設定ファイルです。
このファイルを1つ作っておけば、他のWordPressのプロジェクトを作る際も、docker-compose.ymlを複製することで簡単に同じ環境を構築することができます。
ではまず、任意の場所にプロジェクトフォルダを用意したら、ターミナルでプロジェクトフォルダへ移動してください。
今回はサンプルとして、/user/ユーザー名
にwp-docker
というプロジェクトフォルダを用意して環境を構築していきます。
移動は$ cd wp-docker
でできます。
ターミナルでwp-dockerへ移動したら、$ touch docker-compose.yml
を実行してdocker-compose.yml
を作成します。
ファイルが作成されたら、続けて以下の内容をdocker-compose.ymlへ貼り付けて保存します。
version: "3.3"
services:
db:
image: mysql:8.0
container_name: wp_db_docker
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:6.0.1
container_name: wp_docker
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- "$PWD:/var/www/html"
- "$PWD/.docker/backup:/tmp/backup"
- "$PWD/.docker/log:/tmp/log"
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- db
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=db
- PMA_USER=wordpress
- PMA_PASSWORD=wordpress
ports:
- "8001:80"
volumes:
- ./docker/phpmyadmin/sessions:/sessions
volumes:
db_data: {}
これでdocker-compose.ymlの用意が完了しました。
docker-compose.ymlの中身の解説
この後はコマンド1つ叩くだけで終わるのですが、その前に先程作ったdocker-compose.ymlの中身を解説した記事を用意していますので、是非そちらもご覧ください。
docker-compose.ymlの書き方がある程度分かれば、オリジナル環境を構築しやすくなるはずです。
コンテナを起動
さて、docker-compose.ymlを設定したので、最後にコンテナを実行します。
プロジェクトフォルダに移動していることを確認し、$ docker-compose up -d
と実行してください。
コンテナを実行することで、CMSならWordPressやEC-CUBEなどのファイル郡をプロジェクトフォルダへインストールしてくれます。
処理にはダウンロードとインストールで少々時間がかかるので、気長に待ちましょう。
$ docker-compose up -d
# 以下、実行結果
Creating network "wp-docker_default" with the default driver
Creating volume "wp-docker_db_data" with default driver
Pulling db (mysql:8.0)...
8.0: Pulling from library/mysql
32c1bf40aba1: Pull complete
3ac22f3a638d: Pull complete
b1e7273ed05e: Pull complete
20be45a0c6ab: Pull complete
410a229693ff: Pull complete
1ce71e3a9b88: Pull complete
c93c823af05b: Pull complete
c6752c4d09c7: Pull complete
d7f2cfe3efcb: Pull complete
916f32cb0394: Pull complete
0d62a5f9a14f: Pull complete
Digest: sha256:ce2ae3bd3e9f001435c4671cf073d1d5ae55d138b16927268474fc54ba09ed79
Status: Downloaded newer image for mysql:8.0
Pulling wordpress (wordpress:6.0.1)...
6.0.1: Pulling from library/wordpress
1efc276f4ff9: Pull complete
3239fd0772e9: Pull complete
52ccb8ba6c06: Pull complete
e907707b68ee: Pull complete
f001901b2b66: Pull complete
3926f8e80674: Pull complete
abc6b8b3381c: Pull complete
f2aef5a590dd: Pull complete
4739a6591a8b: Pull complete
1c4c634ab8e6: Pull complete
d84f48c0548d: Pull complete
774f9d29e73c: Pull complete
06e87fefb4ab: Pull complete
382fb5566e86: Pull complete
b3b5294242c6: Pull complete
730f2c6e6033: Pull complete
019b868fd241: Pull complete
a217ccc0a4bc: Pull complete
8f70b51d2ae5: Pull complete
6c2fa69a7ed1: Pull complete
6a8eb3d78340: Pull complete
Digest: sha256:461fb4294c0b885e375c5d94521442fce329cc02ef3f49a8001ea342d14ab71a
Status: Downloaded newer image for wordpress:6.0.1
Creating wp_db_docker ... done
Creating wp_docker ... done
最後にCreating コンテナ名 ... done
と表示されれば成功です。
ちゃんとDockerが起動したか確認する
最後にdoneと表示されたので、ブラウザでhttp://localhost:8000へアクセスしてみましょう。
WordPressのインストール画面が表示されていれば、成功です!
Error establishing a database connection が出た!?
WordPressやEC-CUBEなどを含んでいる場合、以下のようなエラーがたまに出ることがあります。
そんなときは慌てず、エラー文をコピーしてグーグル先生に質問してみましょう。
この場合、エラーの内容は「データベースへの接続が失敗しました」という内容です。
つまり、データベースの指定先、またはIDやパスワードあたりが間違っていることが予想されます。
該当箇所を修正したら、$ dcoker-compose stop
でコンテナを停止させ、プロジェクトフォルダ内に生成されたファイル郡(docker-compose.ymlを除く)を削除してから、再度$ docker-compose up -d
を実行してください。
最後に
最後までお付き合いくださりありがとうございます。
こんな環境をDockerで再現してみたい!というようなご要望があれば、お気軽にお問い合わせください。
時間があればですが、環境を構築したdocker-compose.ymlを作って配布します。
※自己責任の元でご使用ください。
コメント