0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Heroku上の既存のアプリケーションにDockerを使用してデプロイする

Last updated at Posted at 2022-05-28

はじめに

Heroku上の既存のアプリケーションにDockerを使用してデプロイを行った際の備忘録になります。

リポジトリ

事前準備

今回はnginxの公式イメージを使用して簡単なDockerイメージを作成します。

FROM nginx:latest

WORKDIR /usr/share/nginx/html

COPY src /usr/share/nginx/html
COPY default.conf.template /etc/nginx/conf.d/default.conf.template

# Herokuではポート番号が動的に割り当てられるため、ポート番号をListenするために起動時に $PORT という環境変数を読み込む必要がある。
CMD /bin/sh -c "envsubst '\$PORT' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf" && nginx -g 'daemon off;'

注意点として、コメントにもありますが、Herokuではポート番号が動的に割り当てられるため、nginxの設定ファイル内でListenするポート番号を指定する箇所に割り当てられたポート番号を記述する必要があります。

今回は下記の設定ファイルを用意して、$PORT に割り当てられたポート番号読み込み、コンテナ内の /etc/nginx/conf.d/default.conf にコピーしています。

server {
    listen       $PORT;
    server_name  localhost;

...以下略

ファイルの詳細は上述のリポジトリを参照してください。

手順

大まかに下記のような流れで行います。

  1. Heroku CLI をインストール
  2. Herokuにログイン
  3. コンテナイメージをデプロイ
  4. 表示を確認

1. Heroku CLI をインストール

Heroku CLI を入れていなかったので、下記コマンドでインストールします。

​$ ​brew tap heroku/brew && brew install heroku

参考: Heroku CLI のインストール - Heroku

2. Herokuにログイン

$ heroku login

参考: Heroku CLI の開始

3. コンテナイメージをデプロイ

Container Registr にログインします。

$ heroku container:login

既存のHerokuアプリケーションを対象のディレクトリと紐付けます。

$ cd path/to/directory
$ heroku git:remote -a <Herokuアプリケーション名>

上記により、リモートリポジトリに heroku という名前のリポジトリが追加されます。

$ git remote -v
heroku  https://git.heroku.com/<Herokuアプリケーション名>.git (fetch)
heroku  https://git.heroku.com/<Herokuアプリケーション名>.git (push)
...

イメージをビルドして Container Registry にプッシュするには、ディレクトリにDockerfileが存在していることを確認し、下記を実行します。
自分は M1 Mac を使用しているので、こちらの記事を参考にx86向けの Docker image をビルドしてpushしています。

$ docker buildx build . --platform linux/amd64 -t nginx_sample:latest
$ docker tag nginx_sample registry.heroku.com/<Herokuアプリケーション名>/<process-type>
$ docker push registry.heroku.com/<Herokuアプリケーション名>/<process-type>

イメージをpushしたら、そのイメージをアプリにリリースします。

$ heroku container:release <process-type>

参考: Container Registry および Runtime (Docker デプロイ) - Heroku

4. 表示を確認

下記コマンドでHerokuのアプリケーションをブラウザで開きます。

$ heroku open

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?