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

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

## 準備

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

“`prettyprinted
% 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 を探します。

> – [ruby – Docker Hub](https://hub.docker.com/_/ruby?tab=description)

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

最新の Ruby を `pull image` します。

“`prettyprinted
% docker pull ruby:2.7.1-alpine
“`

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

“`prettyprinted
% mkdir myapp
% touch myapp/sample.rb
% echo ‘p Time.now’ > myapp/sample.rb
“`

## docker run コマンドでの実行

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

> – `–rm` … 実行後にコンテナをクリーンアップするオプション。
>
> [Docker run リファレンス — Docker-docs-ja 17.06 ドキュメント](https://docs.docker.jp/engine/reference/run.html#rm)

“`prettyprinted
% 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コンテナ上で実行したい – スタック・オーバーフロー](https://ja.stackoverflow.com/questions/51285/windows%E4%B8%8A%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9Fruby%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92ruby%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E4%B8%8A%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%9F%E3%81%84)

“`prettyprinted
% 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
“`