概要
Nginx の Docker イメージを Heroku へデプロイする方法について。
ベースイメージの作成
デプロイする Nginx の Docker イメージを作成します。
プロジェクトのルートに以下3つのファイルを用意します。
<!-- html/index.html -->
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
</head>
<body>
<h1>Hello, Heroku</h1>
</body>
</html>
## nginx.conf
server {
listen $PORT;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
## Dockerfile
FROM nginx
ENV PORT=8080
COPY html /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
CMD sed -i -e 's/$PORT/'"$PORT"'/g' /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'
Nginx の設定ファイル nginx.conf
では listen
するポートを動的に指定します。
これはこちらにあるように Heroku 側でポート番号がランダムで割り当てられるようになっているからです。
割り当てられたポート番号は環境変数 $PORT で参照できます。
よって、Dockerfile の CMD
実行時に設定ファイルのポート番号を書き換えるようにしています。
Heroku アプリの作成とデプロイ
ファイルの用意ができたら HerokuCLI を使ってデプロイします。
まず、デプロイ用の構成ファイル heroku.yml
をプロジェクトのルートに作成します。
# heroku.yml
build:
docker:
web: Dockerfile
次に、Heroku アプリを作成して、スタックを container
にセットします。
heroku create your-app-name
heroku stack:set container -a your-app-name
Docker イメージを HerokuContainerRegistry へプッシュします。
heroku container:login
heroku push web -a your-app-name
プッシュが完了したら、release
コマンドでデプロイできます。
heroku container:release web -a your-app-name