Docker ComposeでSinatraの開発環境を構築する
2020/11/24
SinatraでちょっとしたAPIを作った時の構築メモ。
DBなど使わないシンプル構成。
手順
アプリのディレクトリを作って移動
$ mkdir docker-sinatra
$ cd docker-sinatra
必要なファイルを作成
- Dockerfile
- docker-compose.yml
- Gemfile
- app.rb
Dockerfile
FROM ruby:2.7.2
ADD . /app
WORKDIR /app
RUN bundle install -j4
docker-compose.yml
version: '3'
services:
web:
build: .
command: bundle exec ruby app.rb -o 0.0.0.0
ports:
- 4567:4567
volumes:
- .:/app
Gemfile
source 'https://rubygems.org'
ruby '2.7.2'
gem 'sinatra'
app.rb
require 'sinatra'
get '/' do
'Hello, World!'
end
ビルドと起動
$ docker-compose up --build
Creating network "docker-sinatra_default" with the default driver
Building web
Step 1/4 : FROM ruby:2.7.2
---> 09fcf72ff321
Step 2/4 : ADD . /app
---> b71bf29331d0
Step 3/4 : WORKDIR /app
---> Running in a54f49247e95
Removing intermediate container a54f49247e95
---> d4c279f6608b
Step 4/4 : RUN bundle install -j4
---> Running in 02cbb1b78c6c
Fetching gem metadata from https://rubygems.org/....
Resolving dependencies...
Using bundler 2.1.4
Fetching ruby2_keywords 0.0.2
Fetching rack 2.2.3
Fetching tilt 2.0.10
Installing ruby2_keywords 0.0.2
Installing tilt 2.0.10
Fetching mustermann 1.1.1
Installing rack 2.2.3
Installing mustermann 1.1.1
Fetching rack-protection 2.1.0
Installing rack-protection 2.1.0
Fetching sinatra 2.1.0
Installing sinatra 2.1.0
Bundle complete! 1 Gemfile dependency, 7 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Removing intermediate container 02cbb1b78c6c
---> efc5c16e07ff
Successfully built efc5c16e07ff
Successfully tagged docker-sinatra_web:latest
Creating docker-sinatra_web_1 ... done
Attaching to docker-sinatra_web_1
web_1 | [2020-11-24 14:12:29] INFO WEBrick 1.6.0
web_1 | [2020-11-24 14:12:29] INFO ruby 2.7.2 (2020-10-01) [x86_64-linux]
web_1 | == Sinatra (v2.1.0) has taken the stage on 4567 for development with backup from WEBrick
web_1 | [2020-11-24 14:12:29] INFO WEBrick::HTTPServer#start: pid=1 port=4567
動作確認
$ curl localhost:4567
Hello, World!