安易。
MariaDBとかは他コンテナで建てるものとします。
Dockerfile
FROM node:lts-slim AS nodeFROM ruby:3COPY --from=node /opt/ /opt/COPY --from=node /usr/local/lib/ /usr/local/lib/COPY --from=node /usr/local/bin/ /usr/local/bin/RUN apt update && apt upgrade -y&& apt install-y g++
RUN gem install rails
ちょっと説明
マルチステージビルドする
NodeイメージからNodeインタプリタのあるディレクトリをごっそりを持ってくる。
Nodeの特定バージョンを入れようと思うとcurlでインストーラとってきて、スクリプト実行して、必要ならyarnを別で入れるなどちょっとめんどくさい。
でもマルチステージビルドならDocker Official ImageのNodeインタプリタを拾えるし、バージョン指定はイメージのタグを変えればいいだけなのでちょっと楽。
# NodeインタプリタをとってくるイメージFROM node:lts-slim AS node# 最後に書いたFROMがイメージのベースになるFROM ruby:3# インタプリタの含まれるディレクトリをコピーCOPY --from=node /opt/ /opt/COPY --from=node /usr/local/lib/ /usr/local/lib/COPY --from=node /usr/local/bin/ /usr/local/bin/RUN apt update && apt upgrade -y&& apt install-y vim g++ # <- Nodeの駆動にg++が必要
参考: Multi-stage build でNode.jsのインストールをちょっぴり効率化する - アクトインディ開発者ブログ
railsのインストール
グローバルにインストール。
あとはdocker run -it <image name> bash
とかしてコンテナ内でrails new app
とかすると準備完了。
RUN gem install rails