Dockerfile
Rails環境用のDockerfileで$GEM_HOME
に--mount=type=cache
を設定するには以下のようにします。
...
WORKDIR /home/${USER_NAME}/${PROJECT_NAME}
COPY --chown=${USER_NAME} Gemfile* /home/${USER_NAME}/${PROJECT_NAME}/
RUN --mount=type=cache,uid=1000,target=/home/${USER_NAME}/.cache/bundle <<-EOF
set -e
GEM_HOME=/home/${USER_NAME}/.cache/bundle bundle install
cp -aRT /home/${USER_NAME}/.cache/bundle ${GEM_HOME}
EOF
...
一度~/.cache/bundle
にインストールしてから$GEM_HOME
にコピーします。
-
GEM_HOME=/home/${USER_NAME}/.cache/bundle bundle install
GEM_HOME
を一時的に変更してbundle install
。 -
cp -aRT /home/${USER_NAME}/.cache/bundle ${GEM_HOME}
-a
はサブディレクトリや属性なども含め、可能な限りすべてを保持しながらコピーする。
-R
はコピー元にディレクトリを指定した場合、再帰的に(サブディレクトリも含めて)コピーする。
-T
はコピー先(最後の引数)がディレクトリでも特別扱いしない。