🤖

DockerでWordPressをFrom Scratchで作ったときに参考にしたリンク集

2022/10/16に公開

概要

Dockerの練習としてdebianのイメージからWordPressを構築したのでその際に参考にしたリンクなどを備忘としてまとめておきます。実装物は https://github.com/hayashi-ay/dwfs から見れます。

完成イメージ図。

参考実装

主にmariadbとnginxの公式のDockerfileを参考にしました。
テンプレートのDockerfileがあり、バージョンごとに可変な部分をパラメータとして与えて自動生成しています。
見る場合はテンプレートの方ではなく、生成物の方が良いと思います。

# mariadb-dockerの構造。説明に必要ない部分は除外している
.
├── 10.9 -- 各バージョンごとのDockerfile
│   ├── Dockerfile
│   ├── docker-entrypoint.sh
│   └── healthcheck.sh
├── Dockerfile.template -- テンプレート
├── docker-entrypoint.sh -- テンプレート
├── generate-stackbrew-library.sh
├── healthcheck.sh -- テンプレート
└── update.sh -- 自動生成用スクリプト

Docker全般

Docker EngineのAPIドキュメントを見てどういったことができるのかを大まかに把握して、Dockerfile, compose-fileのドキュメントを見て実際にDockerfile, compose.yamlでどう書くかを調べる感じで進めました。
dockerに限らずクライアントとバックエンドに分かれているサービスでバックエンドのAPIが公開されている場合は、クライアントツール側のドキュメントを読むよりバックエンドAPIのドキュメントを読む方が目的に早く到達できる所感があります。

Dockerfileのベストプラクティス

Shell Form vs Exec Form

RUN, ENTRYPOINT, CMDでそれぞれShell FormまたはExec Formを使うべきかの参考にしました。

network

volume

localマウントする際のdriver_optsがドキュメントに特に記述もないけれど、みんながtype:none, o: bindを使っているのが不思議で調べました。
unixに詳しい人がハック的な感じで使った解決策が広く広まったみたいな感じに思えます。

volumes:
  website:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: "${VOLUME_PATH}/website"

env

Dockerでは複数の場所、タイミングでenvを指定できるので、最終的にどのenv値が適用されているが分かりづらかったです。

nginx

nginxのディレクティブの設定はモジュールごとに分かれている記述されていますが、どのディレクティブがどのモジュールに属しているかが分かりにくいのでディレクティブ一覧ページから探すのが良いと思います。

FastCGI

FastCGIについては公式のサンプルだけで充分でした。
一応CGIプログラムがどのような値が渡ってくることを期待しているのかを把握するためにCGIのRFCも軽く目を通しました。

SSL/TLS

https://nginx.org/en/docs/http/configuring_https_servers.html
公式の記事。

SSL/TLSについても公式の記事だけで充分でした。
あまり証明証周りについても調べました。
証明証の作成にopensslを使ったのですが、今思うとMacOS標準で入っているLibreSSLでも良かったかもです。

mariadb

mariadbの公式ドキュメントはかなり分かりづらいので読むのを断念しました。
その他のネット検索で出てくる記事も有益なものが見つけれなかったので先述のmariadbのDockerライブラリの実装を参考にしました。
またaptでのインストール前後で行われている処理も確認しにいきました。mariadb-10.5レポジトリのdebian/mariadb-server-10.5.preinstdebian/mariadb-server-10.5.postinstあたりをみました。

WordPress

WordPressの構築はWP-CLIで行いました。公式ドキュメントがしっかり書かれているのでほかは特に参考にしませんでした。

php-fpm

一応リンクは貼っていますが、あまりドキュメントを参考にしませんでした。
aptでインストールしてくる際にあるwww.confにあるコメントを見ながら必要に応じて設定値を変えました。

bash

Dockerfileやdocker-entrypoint.shなどでシェルスクリプトを書く機会が多かったので参考にしました。

Makefile

元々は初期化処理をMakefileの中で書いていて.envを読み込みたかったので参考にしました。結局/etc/hostsを書き換えたりちゃんとわかっていないと危ない処理が結構多かったのでMakefileからは削除して手順をREADME.mdに移行するのにあたって不要になりました。

Discussion