RailsのデプロイをDockerで行いたかったのですが、 色々躓いてしまったので、一度シンプルにSinatraで動く物から作って、一歩ずつ確認していこうと思います。
今回は、完全にHello worldだけなので超お手軽構成です。
コードはこちら https://github.com/syumai/sinatra-alpine
ファイルの中身
Gemfile
source 'https://rubygems.org' gem 'sinatra', '~> 1.4.7'
アプリ本体
0.0.0.0にホストをバインドしないと外からアクセス出来ないので、コード内で行っています。 ポート番号も同様にコード内で指定しました。(指定しなかった場合のポート番号は4567になります)
この二行を省略して、Dockerfile内で CMD ["ruby", "app.rb", "-o", "0.0.0.0", "-p", "80"]
としても同様の動作となります。
どちらを選ぶかはお好みで。
require 'sinatra' set :bind, '0.0.0.0' set :port, 80 get '/' do 'Hello, world!' end
Dockerfile
ベースイメージはRuby 2.4.0(Alpine)です。 ベースイメージのサイズは55.82MBでした(軽い!)
追加のパッケージも必要無しです。さすがSinatraと言ったところですね…。
FROM ruby:2.4.0-alpine RUN apk update && apk upgrade WORKDIR /app COPY Gemfile . RUN bundle install && bundle clean COPY . /app EXPOSE 80 CMD ["ruby", "app.rb"]
ビルドして動かす
docker build -t sinatra-alpine . docker run -p 80:80 sinatra-alpine -d curl localhost #=> 'Hello, world!'
ここまでアッサリ動いてくれました。
ビルド後のイメージサイズは72.07MBとなっています。ベースイメージから17MB増でした。 (.dockerignoreで.gitディレクトリはイメージに含まないようにしてあります。)
次は、こちらのイメージをAmazon EC2 Container Service (ECS) or Google Container Engine (GKE)で動かしてみたいと思います。