2020年9月15日火曜日

Ruby から docker-compose を操作してみた

概要

docker-compose.yml を作成して CLI からではなく Ruby からコンテナの作成などを行ってみました
ただ使った gem のバージョンが古くあまり使えなさそうな印象です

環境

  • macOS 10.15.6
  • docker 19.03.12
  • Ruby 2.7.1p83
    • docker-compose-api 1.1.8

docker-compose.yml の作成

何でも OK です
今回は nginx が立ち上がるだけの YAML ファイルを作成しました

version: '3'
services:
  web:
    image: nginx
    ports:
      - 80:80

Ruby からコンテナを立ち上げてみる

では Ruby から docker-compose.yml を使ってコンテンを立ち上げてみます

  • vim app.rb
require 'docker-compose'

compose = DockerCompose.load('./docker-compose.yml')
ret = compose.start
puts ret

これで nginx のコンテナが立ち上がります

コンテナの一覧を確認する

containers を使います
ハッシュで返ってきます

require 'docker-compose'

compose = DockerCompose.load('./docker-compose.yml')
ret = compose.containers
pp ret

コンテナを停止する

stop を使うだけです
ラベルと名前でコンテナを指定することができます

require 'docker-compose'

compose = DockerCompose.load('./docker-compose.yml')
# compose.start
ret = compose.stop
puts ret

別プロセスになるとなぜかコンテナに振られるインデックスが変わるのでその場合は start した同じプロセス内で停止しましょう

Tips: バージョンの表示など

puts DockerCompose.version
puts DockerCompose.docker_client

Tip: AttributeError: ‘ComposeVersion’ object has no attribute ‘version’

なぜか Ruby で実行すると CLI 側で docker-compose を実行できなくなりました
おそらくバージョンの違いや Ruby 側だと処理が足りていないためだと思います

AttributeError: 'ComposeVersion' object has no attribute 'version'
[2692] Failed to execute script docker-compose

最後に

既存の docker-compose.yml があればそれを簡単に Ruby から呼び出すことはできそうです

ただ残念ですが現在は gem のバージョンが古くメンテナンスもされていないようです
docker-compose v3 に対応していませんでした
また docker-compose.yml なしで docker-compose 的なことをするのはこの gem ではできないようです

0 件のコメント:

コメントを投稿