はじめに
さて、こちらの記事は前回の【Mac】dockerでWordPressを構築内で案内していた、docker-compose.ymlの書き方についての解説記事です。
Docker初心者には特に難解ですが、少しでも理解が深まれば今後の発展に役立つはずです。
この記事だけで理解し切るのは無理だと思うので、ご自身で他記事などを見ながら理解を深めましょう。
![](https://kuro-suke.com/prod/wp-content/uploads/2022/08/d3118abdb146869b6f35ba87dfd35855-300x169.jpg)
今回使うdocker-compose.yml
【Mac】dockerでWordPressを構築から来た方にも分かりやすいよう、前回の記事でも使った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: {}
解説
versionとは?
docker-compose(コマンド)で使用するバージョンを定義します。
ここではバージョン3を指定していますが、他のバージョンだとdocker-compose.ymlの書き方が異なるので、バージョン3以外を使う場合は、それぞれのバージョンに合わせた書き方を調べてください。
Servicesとは?
開発するアプリケーション(ここではWordPress)を実行するための各要素をServiceと呼びます。
ここでのServiceとは、db:
、wordpress:
、phpmyadmin:
の3つが挙げられます。
つまりService(要素)をまとめるので、Services(複数形)となるのです。
このService名は他のServiceとの関連付けで使用するキーであり、任意で決めることができます。
Serviceで指定しているイメージは以下のとおりです。
db:
がMySQL 8.0wordpress:
がWordPress 6.0.1phpmyadmin:
がphpMyAdmin
そしてServiceごとに、使用するイメージや、イメージの設定(下記のimageなど)を記述します。
imageとは
各Service内にimage: ○○○○
と記述されている箇所があります。
これはServiceで使用するイメージを指定します。
イメージはDocker Hub(要ログイン)で見つけることができます。
![](https://d36jcksde1wxzq.cloudfront.net/hub-ui/_assets/docker-hub-thumbnail-FR544YPQ.png)
例で言えば、image: wordpress:6.0.1
と記述されている場所の、wordpressがイメージ名、6.0.1がイメージのバージョンです。
container_nameとは?
指定したイメージごとに設定したものです。
いろいろとごっちゃになって理解しにくいですが、Serviceの中身=コンテナと覚えてもらえば分かりやすいかもしれません。
つまりcontainer_nameとは、イメージに設定を施したコンテナ名のことです。
volumesとは?
これまた理解するのに難しい厄介な存在ですが、例えばDockerを使ってホームページを作ったとします。
このとき、index.htmlやstyle.cssを作成してソースコードを記述していくのですが、これらのファイルが存在する場所は、あくまでもローカルのプロジェクトフォルダ内です。
ですがDockerの開発環境で実行(ブラウザで表示させる)するときに参照されるのは、プロジェクトフォルダではなく、コンテナ(仮想のプロジェクトフォルダのようなもの)の中身を参照しているのです。
なので普通は実行してもコンテナ内には何もファイルが存在しないので、ブラウザで表示することができません。
そこで、volumesを指定してあげることで、ローカルのプロジェクトフォルダをコンテナ内にマウントすることができます。
マウントすることで、コンテナ内でローカルのプロジェクトフォルダが同期され、コンテナを参照されても(ショートカットのように)ファイルを読み込むことができるのです。
要するに、ローカルのどこを参照するか指定しているのです。
restartとは?
手動や何らかのエラーにより、対象のコンテナが停止した際の再起動の挙動を指定します。
ここではalwaysと指定しますが、その他の挙動については以下のとおりです。
restart policy | 挙動 |
---|---|
no | 再起動しません。※デフォルト値 |
on-failure[:max-retries] | プロセスが0以外のステータスで終了した場合に、:max-retries (最大再試行回数)の分だけ再起動を試みます。on-failure[10] と指定すれば、10回再起動を試み、それまでに起動が成功すれば、処理を中断します。なお、1回ごとに100msずつ遅延処理時間が増加します。 |
always | 明示的にstop ($ docker-compose stop)されない限り、常に再起動を行います。 |
unless-stopped | 最後にdocker deamon が起動していた際に、ステータスが終了状態であれば、再起動しません。なお、それ以外では always と同じ挙動をします。 |
environmentとは?
environmentとはそのコンテナに対して渡す環境変数を指定します。
# db:(Service)内より
environment:
MYSQL_ROOT_PASSWORD: somewordpress
上ではMYSQL_ROOT_PASSWORD: somewordpress
と指定されていますが、ここではMySQLのルート用のパスワードをsomewordpressと指定しています。
その他にもwordpress:
なら接続するDBのホストやログイン用のユーザー名、パスワードなどを指定しています。
depends_onとは?
名前の通り、depends(依存する)の関係を指定します。
wordpress(Service)では- db
と指定されています。
これは、「wordpressのコンテナを起動するために、dbを先に起動させろ」ということです。
なお、dockerを停止(stop)させた場合は、起動の逆でwordpress→dbの順番で停止します。
なお、依存先の指定方法は-(ハイフン)+スペースに続けてサービス名を指定します。
services:
service1:
image: sample_image1
service2
image: sample_image2
depends_on:
- service1 # 依存先のService名
# 起動:service2 → service1
# 停止:service1 → service2
portsとは?
MAMPを触ったことがある人なら何となく分かるかと思いますが、portsで指定したポート番号からアクセスすることができます。
wordpressでは- "8000:80"
と指定していますので、http://localhost:8000と打ち込めば、WordPressへアクセスすることができます。
このあたりを触ることができれば、お名前.comなどで取得したドメインを使うこともできます。
phpmyadminでは- "8001:80"
と指定していますので、http://localhost:8001でphpMyAdminの見慣れた画面へアクセスできます。
最後に
ここまで如何でしたでしょうか。
少しはみなさんの理解を深めることに貢献できたでしょうか。
今後も皆さんの役に立つ情報を発信していきますので、今後ともよろしくお願いいたします。
コメント