・SSL(Let's Encrypt)対応とリバースプロキシは https-portal にまかせる
・コンテナの監視はswarmで、アプリの監視は docker-autoheal にまかせる
・ホスト1台でswarmモードを使用
※swarmモードをする理由はコンテナのローリングアップデートがしたかったため
※swarmモードを使用しない場合はこちら(コンテナのローリングアップデートができない)
・検証環境
Ubuntu 20.04.2
Docker 20.10.6
$ docker swarm init
# アプリのイメージ作成
$ docker build -t batch -f ./batch/Dockerfile ./batch
$ docker build -t backend -f ./backend/Dockerfile ./backend
$ docker build -t frontend -f ./frontend/Dockerfile ./frontend
# 起動
$ docker stack deploy -c <(docker-compose -f docker-compose.yml --env-file .env config) app
# アプリのイメージ更新
$ docker build -t backend -f ./backend/Dockerfile ./backend
# サービスを更新(deply.replicasに2以上を指定すればローリングアップデートになる)
$ docker service update --force --image backend:latest app_backend
.env.sampleを.envにリネームして使用する .gitignoreの対象としているのでパスワードなど公開したくない情報をここに記述する
各コンテナのログの出力先をsyslogとしているためログの出力を制御する
# rsyslogの設定
$ vi /etc/rsyslog.d/10-docker.conf
$template DockerLogs, "/var/log/docker/%programname%_%$year%%$month%%$day%.log"
if $syslogfacility-text == 'daemon' and $programname contains 'docker_' then -?DockerLogs
& stop
# rsyslogの再起動
$ systemctl restart rsyslog