[Docker] Docker image で用意した Ruby バージョンでスクリプトを実行する

docker desktop (Docker for mac) を利用します。

準備

インストールは終わっているものとします。

% docker version
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:21:11 2020
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:29:16 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

ruby image を探します。

% docker search ruby
NAME                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ruby                         Ruby is a dynamic, reflective, object-orient…   1897                [OK]
    :

最新の Ruby を pull image します。

% docker pull ruby:2.7.1-alpine

実行するサンプルスクリプトを作成します。

% mkdir myapp
% touch myapp/sample.rb
% echo 'p Time.now' >  myapp/sample.rb

docker run コマンドでの実行

まず最初に Ruby のバージョンを確認して見ます。

  • --rm … 実行後にコンテナをクリーンアップするオプション。

Docker run リファレンス — Docker-docs-ja 17.06 ドキュメント

% docker container run --rm ruby:2.7.1-alpine ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux-musl]

用意したバージョンで動いているようですので、次にサンプルスクリプトを動かしてみます。

  • --workdir … コンテナ上のワーキングディレクトリを指定するオプション。
  • --volume … ホストのディレクトリを指定したコンテナのディレクトリにマウントするオプション。

ruby – windows上で作ったrubyスクリプトをrubyコンテナ上で実行したい – スタック・オーバーフロー

% docker container run --rm --workdir=/myapp --volume="/Users/deadwood/my_projects/myapp:/myapp" ruby:2.7.1-alpine ruby sample.rb
2020-07-17 03:12:35.355957628 +0000