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
.