Closed3

【Ruby / Docker】さくっとRubyのDocker環境を作成して実行する

だーら(Flamers / Memotia)だーら(Flamers / Memotia)

モチベーション

  • 10枚ほどのPNG画像をJPGに変換する必要が生じた。プログラムに書かせよう。
  • せっかくなら、Docker環境の構築をさくっと出来るようにしたい
  • docker compose周りの環境が変わっているのでそのあたりにキャッチアップしたい(docker-composeではなくdocker composeに変化しているなど)

環境

  • MacBook (M2)
  • Ruby
  • Docker

バージョン

だーら(Flamers / Memotia)だーら(Flamers / Memotia)

実装

ファイル構造

  • png-jpg-converterプロジェクトを新規作成
.
├── Dockerfile
├── Gemfile
├── compose.yml
├── converter.rb

Dockerfile

# Rubyのイメージを指定
FROM ruby:3.1.2

# 必要なパッケージのインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev imagemagick libmagickwand-dev

# ワーキングディレクトリの作成
WORKDIR /app

# ローカルマシン上のGemfileとGemfile.lockをコピー
COPY Gemfile* /app/

# Gemfileのインストール
RUN bundle install

# すべてのファイルをコピー
COPY . /app/

compose.yml

compose.yml
version: "3.9"
services:
  app:
    build: .
    volumes:
      - .:/app
      - /path/to/png-images:/app/data
    command: ruby converter.rb

Gemfile

source 'https://rubygems.org'
gem 'rmagick'

Rubyのコード

converter.rb
require 'rmagick'
require 'find'

dir = '/app/data'

Find.find(dir) do |path|
  if FileTest.directory?(path)
    next
  else
    if File.extname(path) == ".png"
      img = Magick::Image.read(path).first
      img.format = 'JPEG'
      img.write(path.sub(/\.png$/i, '.jpg'))
    end
  end
end

実行!

$ docker compose up
[+] Running 1/0
 ⠿ Container png-to-jpg-convert-app-1  Created                                                                                       0.0s
Attaching to png-to-jpg-convert-app-1
png-to-jpg-convert-app-1 exited with code 0
だーら(Flamers / Memotia)だーら(Flamers / Memotia)

Docker Compose V2について

  • docker-composeからdocker composeになった件(Compose V2への移行)
  • 公式doc
  • Compose V2は、Compose Specificationに準拠しているらしい

compose.ymlのファイル名について

  • Compose SpecificationのGitHubには以下のように記載されている。compose.yamlが推奨とのこと。

The default path for a Compose file is compose.yaml (preferred) or compose.yml that is placed in the working directory. Compose also supports docker-compose.yaml and docker-compose.yml for backwards compatibility of earlier versions. If both files exist, Compose prefers the canonical compose.yaml

  • しかし、記事執筆時点では、docker docsでは、docker-compose.ymlと書かれている。
  • おそらくこの辺はまだ移行の更新や連携が完了していない?のかと思った。
  • yamlとymlの違いも好みっぽい?参考

参考

https://zenn.dev/miroha/articles/whats-docker-compose-v2
https://qiita.com/tearoom6/items/b06118acb801bd918f35

このスクラップは2023/08/06にクローズされました