LoginSignup
3
1

Docker 環境別 CacheMount を用いた依存install

Last updated at Posted at 2021-08-14

DockerにはCacheMountという機能がある。

ものすごく雑に言うとdocker buildが爆速になるし、いちいちRUNの最後でcacheを消すことをしなくて良くなる神機能だ。

機能の概要は https://kotaroooo0-dev.hatenablog.com/entry/2020/06/19/110150

BuildKitの--mount=type=cacheによるキャッシュ

のところで解説されている。
この記事は、この機能がexperimentalだったときに書かれていたものだが、DockerEngineリリースノートによると

20.10.0

buildkit,dockerfile: Support for RUN --mount options without needing to specify experimental dockerfile #syntax directive. moby/buildkit#1717

とあるので、Version 20.10.0時点でexperimentalではなくなった。
Dockerfileの一行目に書く#syntaxも書かなくて良くなったらしい。

cacheディレクトリの内容はイメージレイヤーに残らないが、空ディレクトリ自体は残ってしまう模様。

cacheを削除するのは

docker builder prune --filter type=exec.cachemount

ちなみに

docker system df -v

で確認可能。

Dockerのツール別の動作報告

Docker Desktop for Mac

初期設定のままexperimental: falseでも、何もしなくてもうごいた。

Github actions

この記事を書いている時点のGithubActionsのUbuntu環境では、DOCKER_BUILDKIT=1を設定する必要があった。
ちなみにBUILDKITのlogは、ciのレポートとしては読みにくいので --progress=plain をつけると良い

--cache-fromの利用元のイメージを生成するときは、build時にdocker build --build-arg BUILDKIT_INLINE_CACHE=1 .というようにINLINE_CACHEオプションを有効化しないと、cacheとして扱えない地雷があるので注意
https://github.com/moby/moby/issues/39003

no cache install が不要になった

以前まで
https://qiita.com/hikaruna/items/e049e53b0147e37db977

という記事を書いていたが、今回のCacheMount機能によりこれは不要になった。代わりにCacheMountを用いたレシピを書き溜めたい。

apt

FROM ubuntu

RUN \
  --mount=type=cache,target=/var/cache/apt \
  --mount=type=cache,sharing=locked,target=/var/lib/apt \
  apt-get update && apt-get install -y \
    *

参考

sharing=lockedの参考

npm

# Dockerfile
FROM node

WORKDIR /app
COPY package.json yarn.lock ./
RUN \
  --mount=type=cache,target=/tmp/npm_cache \
  npm_config_cache=/tmp/npm_cache \
  npm install

編集リクエスト歓迎

yarn

# Dockerfile
FROM node

WORKDIR /app
COPY package.json yarn.lock ./
RUN \
  --mount=type=cache,target=/tmp/yarn_cache \
  YARN_CACHE_FOLDER=/tmp/yarn_cache \
  yarn install

gem

# Dockerfile
FROM ruby

RUN \
  --mount=type=cache,target=/usr/local/bundle/cache \
  gem install *

bundler

# Dockerfile
FROM ruby

WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN \
  --mount=type=cache,target=/usr/local/bundle/cache \
  bundle install

yum

TODO
編集リクエスト歓迎

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1