Build docker image with volume mount

Build docker image with volume mount

Docker Build시에 volume mount가 당연히 가능할 줄 알고 inference model이나 pip cache 등을 volume 으로 넣어주려고 했으나…

impossible

그러던 차에 StackOverFlow의 글을 발견했다.

BuildKit을 사용하면 가능하다고.

  • dockerfile:experimental을 Pull 하고
docker pull docker/dockerfile:experimental
  • Dockerfile 상단에 다음과 같은 주석을 추가해 주고
# syntax = docker/dockerfile:experimental
FROM some/docker:image
  • 필요한 곳에 RUN 대신 RUN --mount=........를 사용한다.
  • 안타깝게도 bind는 read만 가능한듯?
  • type=cache가 유용해 보임
  • 더 자세한 옵션은 이 곳 참조
# Cache pip packages
RUN --mount=type=cache,target=/root/.cache/pip pip install some-package
# Cache apt packages
RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \
  apt update && apt-get --no-install-recommends install -y gcc
  • 실행시 DOCKER_BUILDKIT을 1로 주면 된다. (docker-compose build도 동일하게 가능)
# set env variable $DOCKER_BUILDKIT to 1
DOCKER_BUILDKIT=1 docker build -t my-image .
Copyright © 2020 H.John Choi