Docker совет №20: Используйте WORKDIR
Apr 5, 2018 08:02 · 192 words · 1 minute read
Если вы заметили, что часто меняете каталоги своем Dockerfile (инструкции по сборке docker-образа), то самое время познакомиться с использованием инструкции WORKDIR. Давайте разберемся!
Инструкция WORKDIR в Dockerfile позволяет один раз указать конкретный путь (каталог на диске), после чего большинство инструкций (например, RUN и COPY) будут выполняться в контексте этого каталога.
Пример инструкций по сборке docker-образа без использования WORKDIR может выглядеть так:
FROM python:2.7-alpine
RUN mkdir /app
COPY requirements.txt /app/requirements.txt
RUN cd /app && pip install -r requirements.txt
COPY . /app
CMD /app/gunicorn -b 0.0.0.0:8000 --access-logfile - "foo.app:create_app()"
Как видим, в данном Dockerfile пришлось несколько раз упомянуть /app. Можно значительно улучшить приведенный выше пример, используя WORKDIR:
FROM python:2.7-alpine
# We don't even need to run mkdir /app since WORKDIR will make it for us.
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD gunicorn -b 0.0.0.0:8000 --access-logfile - "foo.app:create_app()"
Ключевым моментом здесь является указание инструкции WORKDIR /app - все следующие шаги будут выполняться в каталоге /app.
Вы даже можете указать более одной инструкции WORKDIR в своем Dockerfile (если вам это действительно нужно):
WORKDIR /foo/bar
WORKDIR baz
RUN pwd
В данном случае команда pwd выведет на экран каталог /foo/bar/baz.