焼売飯店

GoとかTS、JSとか

SinatraアプリのHello world on Docker with Alpine

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)で動かしてみたいと思います。