HerokuがDockerに対応したようです。
ためした時、若干ハマったのでメモします。
環境
MacOSX
Docker: 1.6.0
Heroku client: 3.35.0
事前にDocker-machineでローカルに環境を構築済み
インストール
Dockerのpluginをインストールします。
$ heroku plugins:install heroku-docker
使い方
適当なディレクトリにプロジェクトをcloneします。
すでに自分がやってるプロジェクトがあるならそっちを使ってもいいかもしれませんね。
$ git clone https://github.com/heroku/node-js-getting-started.git
$ cd node-js-getting-started.git
以下のコマンドでDockerfileを作ります。
$ heroku docker:init
ただ自動生成されたDockerfileではnpm install
でパーミッションエラーが出るのとpackage.jsonがキャッシュされないので修正を加えます。
FROM heroku/cedar:14
RUN useradd -d /app -m app
+ RUN chown app:app -R /app
USER app
WORKDIR /app
ENV HOME /app
ENV NODE_ENGINE 0.12.2
ENV PORT 3000
RUN mkdir -p /app/heroku/node
RUN curl -s https://s3pository.heroku.com/node/v$NODE_ENGINE/node-v$NODE_ENGINE-linux-x64.tar.gz | tar --strip-components=1 -xz -C /app/heroku/node
ENV PATH /app/heroku/node/bin:$PATH
RUN mkdir -p /app/.profile.d
RUN echo "export PATH=\"/app/heroku/node/bin:/app/bin:/app/node_modules/.bin:\$PATH\"" > /app/.profile.d/nodejs.sh
RUN echo "cd /app/src" >> /app/.profile.d/nodejs.sh
EXPOSE 3000
ONBUILD RUN mkdir -p /app/src
- ONBUILD COPY . /app/src
ONBUILD WORKDIR /app/src
+ ONBUILD COPY package.json /app/src/package.json
ONBUILD RUN npm install
+ ONBUILD COPY . /app/src
次のコマンドでbuildと実行をします。
$ heroku docker:start
ローカルサーバーをブラウザで見てHelloWorldと出てくればとりあえずOKです。
公開
以下のコマンドでherokuのアプリを作ります。
$ heroku create
そして以下のコマンドでDocker imageからslugを作りdeployします。
$ heroku docker:release
そのまま$ heroku open
で確認してHello WorldとでればOKです。
気になったのはgit push
せずにdeployなんだなーと行った感じです。
最近herokuをちゃんと勉強しだしたのでよくわかってないんですが...
まとめ
環境によるのか$ heroku docker:exec
が使えなかったりしました
どうしても必要なら$ docker exec
でいいと思いますが。
一番気になるのはAdd-oneとかの連携はブログに書かれてなかったので
それをどうするかですね
たぶんdocker-composeと連携させる方法でいいのではないかと思うのですが
もしかしたらheroku側でその辺をサポートするかもしれないので様子見です。
試せたらメモしておきます。
とりあえずHerokuの実行環境に近い環境で試せるというのはまぁまぁメリットかなと思います。