0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[02] docker-composeを活用して即座に Ruby 3.0 slim-buster を立てる (説明あり)

Posted at

はじめに

限られた物理PC の中で各バージョンの Ruby プログラムを作成することになった.

ただし、これ以上 物理PC を汚染させるわけにもいかないので Docker を活用した.
(操作しやすいように docker-compose を導入した)

また、物理ホスト側からバッチを使って、極力コンテナに「手動で」ログインせずに
Ruby コードを実行するようにした.

今後もこの環境構築は頻発すると思うので書き残しておく.

今回は「ビルドコンテナ」を作成する場合についてである.
 

構築後のファイル構成

.
|-- PV ......................... 永続ボリューム
|   `-- rb
|       `-- app ................ この直下に *.rb を配置していく
|           `-- Gemfile
|-- assets
|   `-- rb
|       `-- Dockerfile
`-- docker-compose.yml

手順

1. 永続ボリュームを作成する

コードやデータを配置するために使用する.

$ mkdir -p PV/rb/app

2. Dockerfile を作成する

独自拡張するために使用する.

$ mkdir -p assets/rb/
$ vim assets/rb/Dockerfile

assets/rb/Dockerfile

FROM ruby:3.0-slim-buster

## プロキシサーバを使う場合
# ENV http_proxy="http://proxy.co.jp:8080"  
# ENV https_proxy="http://proxy.co.jp:8080"
  
# コンテナ内での作業場所を /usr/src/app とする
WORKDIR /usr/src/app
  
# Ruby に関する環境変数
  
# 日本環境に合わせる
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ENV LANGUAGE ja_JP.UTF-8
ENV LANG ja_JP.UTF-8

3. Gemfile を作成する

ここでは PV/rb/app/Gemfile に定義する

PV/rb/app/Gemfile

以下は例である.

# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

# gem "rails"
gem 'faker', '1.7.2'
gem 'elasticsearch', '7.14.0'
gem 'elasticsearch-api', '7.14.0'
gem 'multi_json'
gem 'faraday'
gem 'activesupport'
gem 'minitest'
gem 'jbuilder'
gem 'hashie'

4. docker-compose.yml を作成する

docker-compose.yml

version: '3.7'
services:
  rb:
    build: ./assets/rb
    image: myruby3.0
    container_name: myruby3.0
    tty: true
    volumes:
      - ./PV/rb/app/:/usr/src/app/
    command: >
      bash -c '
        bundle install
        while true; do sleep 3600; done
      '

5. イメージビルドをする

次のコマンドによって、Dockerイメージ「myruby3.0」が作られる

$ docker-compose build --no-cache

6. 常駐型コンテナを起動させる

次のコマンドによって、Dockerコンテナ「myruby3.0」が作られる

$ docker-compose up -d
$ docker-compose ps
  Name     Command   State   Ports
----------------------------------
piyoruby3.0   bash -c            Up           
                bundle install 

7. 所望のバージョンであることを確認する

デフォルトで使用される Ruby が 3.0 であることを確認する.

$ docker-compose exec rb bash -c 'which ruby' 
/usr/local/bin/ruby
$ docker-compose exec rb bash -c 'ruby --version' 
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]

8. サンプルコード a.rb を作成する

$ cat <<'EOL' | tee PV/rb/app/a.rb
#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-

p 'Hello Ruby'

EOL

$ chmod +x PV/rb/app/a.rb

9. 実行する

コンテナログイン時のパスは /usr/src/app である. (∵ Dockerfile の WORKDIR のため)

$ docker-compose exec rb bash -c './a.rb' 
"Hello Ruby"

 

補足

コンテナ内にログインするには

次を実行する

$ docker-compose exec rb bash

実行環境 (イメージとコンテナ) を一掃する

永続ボリューム (ここでは ./PV) は残るので問題ない

$ docker-compose down --rmi all  --volumes --remove-orphans
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?