未来の自分用のメモです。
ベースイメージが存在していないToyアプリなどで利用することが多いDockerfileについて紹介します。
Railsで動作させることが前提ですが、空行で表現しているグループごとに説明します。
- Localeの設定
- 設定しないとrails consoleなどでマルチバイト文字でエラー出がち
- Timezoneの設定
- 設定してもしなくてもOK
- 各種パッケージのインストール
- Rubyのビルドや利用したいDBのパッケージなどをインストール
- 場合によってはツールなどもインストールしても良いかもしれない
- UserやWorkdirの設定
- 移行のRUNがzshで動作することが前提になっているのでSHELLを指定
- それ以外は特になし
- asdfのインストール
- rbenvやnなどは利用せずasdfを使っている
- RubyやNode.jsをインストール
- .tool-versionsを解析して、plugin addやinstall、globalまで設定している
- Globalにしている理由としてはVSCodeのSteep拡張の呼び出しの問題に対しての対策
- yarnのインストール
- Railsだとyarnがデフォルトなので一応入れてる
- npmで動くように変えてるなら不要
これらをまとめたのが以下になります。
FROM mcr.microsoft.com/devcontainers/base:bookworm # Configure locales ENV LANG=en_US.UTF-8 ENV LANGUAGE=en_US.UTF-8 ENV LC_ALL=en_US.UTF-8 # Configure timezone ENV TZ=Asia/Tokyo RUN sudo ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # Install packages RUN apt-get update && apt-get install -y \ build-essential \ curl \ git \ libssl-dev \ zlib1g-dev \ libyaml-dev \ libreadline-dev \ libncurses5-dev \ libffi-dev \ libgdbm-dev \ libzmq3-dev \ libsqlite3-dev \ libpq-dev \ && apt-get clean && rm -rf /var/lib/apt/lists/* # Configure user and workspace USER vscode WORKDIR /workspace SHELL ["/bin/zsh", "-c"] # Install asdf ENV ASDF_VERSION=v0.14.1 RUN git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch $ASDF_VERSION \ && echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc \ && echo '. "$HOME/.asdf/asdf.sh"' >> ~/.zshrc # Install tools via asdf COPY .tool-versions /workspace/.tool-versions RUN . $HOME/.asdf/asdf.sh \ && cat .tool-versions | grep -v '#' | awk '{print $1}' | xargs -n 1 asdf plugin add RUN . $HOME/.asdf/asdf.sh \ && asdf install # Set global versions RUN . $HOME/.asdf/asdf.sh \ && cat .tool-versions | grep -v '#' | xargs -n 2 asdf global # Install yarn RUN . $HOME/.asdf/asdf.sh \ npm install -g yarn CMD ["bash"]
実際のプロダクト開発ではベースイメージを用意しているケースが多いので、このまま利用できるわけではないですが、 あくまでToyアプリなどでは比較的利用しやすいかなと思います。