Categories
Tags
Alamofire Android AppStoreConnect AWS Bun C++ cAdvisor CFW Cloudflare Cloudflare Access Cloudflare KV Cloudflare Tunnel Cloudflare Workers D1 Deno DevContainer Discord Docker ECR ECS Edizon Emulator EmuMMC Fastlane Firestore Frida Ghidra Git GitHub GitHub Actions GitLab GPG Grafana HACGUI Heroku Homebrew Hono IDA Pro iOS IPSwitch Jailbreak Javascript JSON JWT LanPlay Linode macOS Mirakurun MongoDB NestJS NextJS Nintendo Nintendo Switch NodeJS PHP PostgreSQL Prisma Programming Prometheus Python React Realm RealmSwift Ruby Salmon Run Salmonia3+ Shogi Sideload Snap Splatoon Splatoon2 Splatoon3 SSH Stable Diffusion Starlight Swift Swift Package SwiftUI Switch TensorRT Turf War Typescript TypeScript Ubuntu Ubuntu Server VNC VPN VSCode Vue WARP Wireguard XCode Xcode yarn zsh 家電 横歩取り
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/