Heroku CLI(コマンドラインツール)をdockerから使う

Web開発

(Macでdockerを使う場合について書いています。)

Herokuにシンプルなruby製アプリをデプロイしたい

Ruby on Railsアプリの開発環境をDockerで構築してHerokuへデプロイする、という記事は結構あるのですが、ruby製アプリをHerokuにデプロイしたいだけの場合にどうすればいいのか迷ったので備忘録を残しておきます。

ruby製アプリをサーバーで公開したい場合、一番簡単なのがHerokuだと思います。無料でもあまり重くないアプリなら軽快に動いてくれます。有料プランにすればスペックもグレードアップできて手軽です。

HerokuのCLIをMacではなくdockerにインストール

Herokuへのデプロイ自体は「Herokuへデプロイ」ボタンがあったりするとすぐにデプロイできたりしますが、それがない場合やアップした後にカスタマイズしたい場合などはコマンドラインツールがあると便利です。

The Heroku CLI | Heroku Dev Center
How to download, install, and start using the Heroku CLI. The Heroku CLI used to be part of the Heroku Toolbelt.

自分の場合、Macをあまりゴチャゴチャさせたくないので、たまにしか使わないものはdocker上に入れて整理したいと思ってしまいます。なので軽く検索したものの見つからなかったので自分でやりました。

docker-compose.yml

docker-compose用の設定です。ubuntuではなくrubyイメージをベースにします。でないとbundleなどが使えません。

version: '3'
services:
ruby:
build:
context: .
dockerfile: Dockerfile-ruby
volumes:
- ./dev:/home/app/dev

Dockerfile-ruby

公式のrubyイメージに必要な処理を追加しました。

FROM ruby:2.6.4

RUN apt-get update \
  && apt-get install -y sudo \
  && useradd -G sudo --user-group --create-home --shell /bin/false app \
  && echo 'app:apppass' | chpasswd \
  && bundle config --global frozen 1 \
  && curl https://cli-assets.heroku.com/install.sh | sh

ENV HOME=/home/app

COPY ./Gemfile ./Gemfile.lock $HOME/
RUN chown -R app:app $HOME/*

USER app
WORKDIR $HOME
RUN bundle install

USER root
COPY . $HOME
RUN chown -R app:app $HOME/*
USER app

apt-get install -y sudo

Herokuコマンドラインツールをインストールする際にsudoが必要になりますが、rubyイメージにはsudoがないので追加しています。

useradd -G sudo –user-group –create-home –shell /bin/false app

ユーザ「app」を追加しています。sudoが使えるように、useraddに「-G」をつけてsudoを使用できるようにしておきます。

echo ‘app:apppass’ | chpasswd

chpasswdでパスワード設定しておくことも忘れずに。

curl https://cli-assets.heroku.com/install.sh | sh

Herokuコマンドラインツールをインストールしています。これでインストール済みのdockerイメージを作成できます。

dockerを立ち上げる

上記のファイルを作成した上でdocker-composeを起動すれば、herokuコマンドが使えて、rubyも実行できる環境が立ち上がります。

% docker-compose build

:
Installing CLI from https://cli-assets.heroku.com/heroku-linux-x64.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17.0M  100 17.0M    0     0  2084k      0  0:00:08  0:00:08 --:--:-- 2781k
v11.14.0
heroku installed to /usr/local/bin/heroku
:

% docker-compose run --rm ruby /bin/bash

「run –rm」で実行すると、exitで終了したときにイメージを破棄してくれるので楽です。

$ heroku
CLI to interact with Heroku

VERSION
  heroku/7.29.0 linux-x64 node-v11.14.0

USAGE
  $ heroku [COMMAND]

COMMANDS
  access          manage user access to apps
  addons          tools and services for developing, extending, and operating your app
  apps            manage apps on Heroku
:

まとめ

使う度にインストールして、必要なくなれば全部削除する、というのでももちろん問題ないと思います。

公式に削除方法も説明されています。

% rm -rf /usr/local/heroku /usr/local/lib/heroku /usr/local/bin/heroku ~/.local/share/heroku ~/Library/Caches/heroku

homebrewでインストールした場合の削除方法もあります。

% brew uninstall heroku
% rm -rf ~/.local/share/heroku ~/Library/Caches/heroku

The Heroku CLI | Heroku Dev Center
How to download, install, and start using the Heroku CLI. The Heroku CLI used to be part of the Heroku Toolbelt.

自分としてはdockerでできるようにすることで、他にも応用が効くのでやってみたかったというのが一番の理由です。Herokuのように削除方法が載っていないようなツールをインストールする必要がある場合、消しきれないファイルが残ってしまったりするのが以前からどうにかしたいと思っていました。

ただ、やりたいことは実現できたものの、今回の方法ではdockerイメージが1GBくらいになります。rubyではなくruby:alpineを使用したり、キャッシュを消したりすれば容量はもっと減らせるようですが、今回はCLIをdockerに入れるのが目的なので、これで良しとしています。

コメント

タイトルとURLをコピーしました