目標
- コンテナに入ったらすぐに
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-20240216COPY --from=homebrew/brew:4.2.11 /home/linuxbrew/.linuxbrew /home/linuxbrew/.linuxbrew
ENV PATH="$PATH:/home/linuxbrew/.linuxbrew/bin"RUN apt-get updateRUN apt-get -y install git curlRUN apt-get -y autoremoveRUN apt-get -y cleanRUN rm -rf /var/lib/apt/lists/*
というわけで実際にbrewがインストールされている/home/linuxbrew/.linuxbrew
だけを公式のイメージからパクってくることにします。
このとき、homebrew/brewはlinux/amd64しかサポートしていないのでApple Siliconで動作させる場合には--platform=linux/amd64
の指定が必須になります。
ベースのイメージはubuntu:focalを利用しているので非常に軽量です。