Docker совет №20: Используйте WORKDIR

Apr 5, 2018 08:02 · 192 words · 1 minute read docker

Если вы заметили, что часто меняете каталоги своем 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.

tweet Share