koukiblog

たぶんweb系の話題

kubernetesにRailsをデプロイするときには、l.gcr.io/google/rubyは使わない方がいい

運用しているGKE上にコンテナ化されていないRailsアプリをデプロイすることになり、コンテナ化を進めていたときに気づいた話。

デプロイしたいアプリはRailsアプリはGAE上で動いていて、GAEで動作するときにどうもコンテナ化されているらしい。

そこでたどり着いたのが、このレポジトリ。

github.com

RubyとNode.jsがインストールされていて、Railsのための設定もすでに行われているのでそのまま使えそうです。 ruby-baseディレクトリのREADMEにもGKEで動作させるため記載がありました。

# Use the Ruby base image
FROM l.gcr.io/google/ruby:latest

# Copy application files and install the bundle
COPY . /app/
RUN bundle install && rbenv rehash

# Default container command invokes rackup to start the server.
CMD ["bundle", "exec", "rackup", "--port=8080"]

https://github.com/GoogleCloudPlatform/ruby-docker/tree/master/ruby-ubuntu16

ところが、この通りDockerfileを記述してビルドすると、bundlerが存在しないエラーになります。

この事象は下記Issueで報告されていました。 github.com

Issueを読むと、こんな記述があります

Hmm. Looks like that readme is incorrect: I don't think gcr.io/google/ruby is the correct image. Generally, we should probably remove that section on GKE from the readme, as this docker image has generally evolved to be pretty app engine specific. If you want to roll your own docker image, I recommend using the canonical ruby images from DockerHub.

要約すると、gcr.io/google/rubyを使うこと自体が間違い。READMEから削除すべき。gcr.io/google/rubyは、GAE独自の仕様にあわせたコンテナになっている。ということっぽい。

google/rubyを仕様を調べれば対応できるとは思うけど、このコンテナ自体汎用的な用途を想定しているわけではなく、GAE用のランタイムとして設計されているようなので、使うべきではないと判断し、DockerHubにあるrubyのオフィシャルイメージ使って自前で構築することにした。