kubernetesにRailsをデプロイするときには、l.gcr.io/google/rubyは使わない方がいい
運用しているGKE上にコンテナ化されていないRailsアプリをデプロイすることになり、コンテナ化を進めていたときに気づいた話。
デプロイしたいアプリはRailsアプリはGAE上で動いていて、GAEで動作するときにどうもコンテナ化されているらしい。
そこでたどり着いたのが、このレポジトリ。
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のオフィシャルイメージ使って自前で構築することにした。