PHPシステムをコンテナで動かすための取り組みのすべて
取り上げるシステム構成
ログ収集用コンテナ
Goのアプリケーションを用いてる
Unitファイル is なんだ
メール送信用コンテナ
ssmtp
Dockerfile
構造
アプリケーション向け設定
アプリケーションが依存する外部ツール
OS/言語ランタイム
mitamaeを使っている
mitamae: itamae の mruby 実装
Chefの資産があったので採用した
BuildKit
experimental な構文を利用するため
有効にするには
code:bash
export DOCKER_BUILDKIT=1
mount_type: bind
code:Dockerfile
RUN --mount_type=bind
Entrykit
環境変数をattachするためのやつ?
コンテナの動作を変更するためにshellファイル内でserviceごとに動作を変更
/** これ、普通にDockerfileで別スクリプト呼び出すように分離したらよいのでは...?(まあひとつのimageを共有したかったのかな) */
CI/CD
CircleCI
docker executor でも mount は使えず(サービスの仕様上)
AWS Service Manager でデプロイコマンドの実行トリガーを管理
AWS Service Manager: オンプレミスなマシンもAWS上で管理できるやつ
Run Command を用いている
管理対象のサーバー上でスクリプトを実行してくれる
Blue-Green Deploy
リバースプロキシを噛ませているので、リバプロ側にコンテナのportを上書きしてあげる必要があった
Linux Virtual Server で リバプロから受け付ける port を用意して、 Load Balance してあげるイメージ
開発環境 (local)
docker-composeを用いて同じimageを作ってる
prodに近づけるためにリバプロやfluentdもコンテナで動作
PHPソースはローカルのものをマウント
メールは mailcatcher をコンテナで立てて、 MTA として ssmtp に設定してあげる