Quantumleap
538 words
3 minutes
Linuxbrew+DockerでRubyが動作するコンテナを作る

目標#

  1. コンテナに入ったらすぐにbrewコマンドが叩けること
  2. which rubyrbenvでインストールしたrubyが指定されること

デフォルトで入っているRubyはシステム領域に書き込んだりしてヤバめな存在なので利用しません。

よって、RubyのDockerイメージが色々存在しますがそれも利用しません。

前任者#

調べてみるとちょくちょくDockerfileの中でbrewをインストールしている記事を見かけます。

DockerイメージにLinuxbrewをDockerfileでインストールする

しかしながら何だか長くてめんどくさそうです。

How to install brew into a Dockerfile (brew: not found)

しかもやればわかるのですがDockerfile内でbrew: not foundと表示されます。

それでは困るのでこの方法は諦めることにしました。

公式のイメージ#

調べてみると公式のDockerのイメージhomebrew/brewが転がっていました。

これで良さそうな気がするのですが、サイズを見ると1.04GBもあり無駄に大きいです。

開発用なので別に大きくても問題はないといえばないのですがUbuntuの最軽量のものだと30MBくらいしかないので、余計なものがいっぱい入っているのだろうことは想像が付きます。

なんで今回は可能な限り軽量なイメージを作成することを心がけます。

とはいえ、既にHomebrewがインストールされているイメージは有効活用したいですよね。

解決策#

FROM ubuntu:focal-20240216
COPY --from=homebrew/brew:4.2.11 /home/linuxbrew/.linuxbrew /home/linuxbrew/.linuxbrew

ENV PATH="$PATH:/home/linuxbrew/.linuxbrew/bin"
RUN apt-get update
RUN apt-get -y install git curl
RUN apt-get -y autoremove
RUN apt-get -y clean
RUN rm -rf /var/lib/apt/lists/*

というわけで実際にbrewがインストールされている/home/linuxbrew/.linuxbrewだけを公式のイメージからパクってくることにします。

このとき、homebrew/brewはlinux/amd64しかサポートしていないのでApple Siliconで動作させる場合には--platform=linux/amd64の指定が必須になります。

ベースのイメージはubuntuを利用しているので非常に軽量です。

Linuxbrew+DockerでRubyが動作するコンテナを作る
https://fuwari.vercel.app/posts/2024/03/docker_homebrew/
Author
tkgling
Published at
2024-03-08