例えばあのメソッド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 RegistryのRun 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'
コマンドを実行
の意味になる。