538 words
3 minutes
Linuxbrew+DockerでRubyが動作するコンテナを作る
目標
- コンテナに入ったらすぐに
brew
コマンドが叩けること which ruby
でrbenv
でインストールしたrubyが指定されること
デフォルトで入っているRubyはシステム領域に書き込んだりしてヤバめな存在なので利用しません。
よって、RubyのDockerイメージが色々存在しますがそれも利用しません。
前任者
調べてみるとちょくちょくDockerfileの中でbrewをインストールしている記事を見かけます。
しかしながら何だか長くてめんどくさそうです。
しかもやればわかるのですが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/