Closed3
【Ruby / Docker】さくっとRubyのDocker環境を作成して実行する
モチベーション
- 10枚ほどのPNG画像をJPGに変換する必要が生じた。プログラムに書かせよう。
- せっかくなら、Docker環境の構築をさくっと出来るようにしたい
- docker compose周りの環境が変わっているのでそのあたりにキャッチアップしたい(
docker-compose
ではなくdocker compose
に変化しているなど)
環境
- MacBook (M2)
- Ruby
- Docker
バージョン
実装
ファイル構造
- 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
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の違いも好みっぽい?参考
参考
このスクラップは2023/08/06にクローズされました