LoginSignup
15
15

More than 5 years have passed since last update.

Dockerを使ってRubyスクリプトを任意のバージョンでワンライナーで実行する

Posted at

例えばあのメソッドRuby2.0だと使えたっけ、とか調べるのに便利。

Rubyは公式コンテナが配布されているのでそいつを使う。

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.2.2 ruby -e 'p RUBY_VERSION'
"2.2.2"

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.2 ruby -e 'p RUBY_VERSION'
"2.2"

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.1 ruby -e 'p RUBY_VERSION'
"2.1.6"

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.0 ruby -e 'p RUBY_VERSION'
"2.0.0"

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:1.9 ruby -e 'p RUBY_VERSION'
"1.9.3"

例えばFloat#prev_floatはRuby 2.1以前だと使えない。

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.2 ruby -e 'p 1.5.prev_float'
1.4999999999999998

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.1 ruby -e 'p 1.5.prev_float'
-e:1:in `<main>': undefined method `prev_float' for 1.5:Float (NoMethodError)

スクリプトも実行出来る。(hoge.rbはホストOS側に置いておけばよい)

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.2.2 ruby hoge.rb

仕組みの解説

ruby Repository | Docker Hub RegistryRun a single Ruby scriptを参考にしました

  • -v HOST_DIR:CONTAINER_DIR
    • ホストのディレクトリをコンテナ側のディレクトリにマウントする
    • "$PWD":/usr/src/myappは現在位置を /usr/src/myapp としてマウントする、の意味になる
  • -w DIR
    • ワーキングディレクトリの設定
    • 指定したディレクトリをカレントディクトリとして以下のコマンドを実行

まとめると

  • 現在ディレクトリを/usr/src/myapp としてマウント
  • /usr/src/myapp をカレントディレクトリにして
  • ruby:x.x.x コンテナを作成し
  • ruby -e 'p RUBY_VERSION' コマンドを実行

の意味になる。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15