Файлы, упомянутые в главе
- Dockerfile
- werf.yaml
В этой главе мы начнём работу с werf: контейнизируем тестовое приложение, используя werf и Dockerfile, и запустим конечный образ локально в Docker.
Подготовка рабочего места
Мы предполагаем, что вы уже установили werf и Docker.
Создайте директорию на своём компьютере и выполните там следующие шаги:
git clone https://github.com/werf/werf-guides.git
cp -r werf-guides/examples/django/000_app ./
cd 000_app
git init
git add .
git commit -m "initial commit"
Так вы скопируете себе код приложения на Django и инициируете Git в каталоге с ним.
Реализация сборки в Dockerfile
Конфигурация сборки нашего приложения будет состоять из следующих шагов:
- взять базовый образ с Python3 (
python:3.9.1-alpine3.12
подойдёт); - добавить в него код приложения;
- установить зависимости npm.
Реализуем это в Dockerfile
:
FROM python:3.9.1-alpine3.12
WORKDIR /app
COPY project /app
RUN pip3 install -r requirements.txt
ENTRYPOINT ["python3", "manage.py"]
CMD ["runserver"]
Интеграция Dockerfile с werf
Подключим готовый Dockerfile к werf. Для этого, создадим в корне репозитория файл werf.yaml
, описывающий сборку всего проекта:
project: werf-guided-django
configVersion: 1
---
image: basicapp
dockerfile: Dockerfile
Сборка
Перед выполнением сборки необходимо добавить изменения в git-репозиторий проекта:
git add werf.yaml Dockerfile
git commit -m "Add build configuration"
Почему изменения должны добавляться в git-репозиторий, что такое гитерминизм и режим разработчика, а также другие особенности работы с файлами проекта будут разобраны далее в главе «Необходимо знать»
Сборка выполняется командой werf build
:
┌ ⛵ image basicapp
│ ┌ Building stage basicapp/dockerfile
│ │ basicapp/dockerfile Sending build context to Docker daemon 69.63kB
│ │ basicapp/dockerfile Step 1/16 : FROM python:3.9.1-alpine3.12
│ │ basicapp/dockerfile ---> b90fa0d7cbd1
│ │ basicapp/dockerfile Step 2/16 : WORKDIR /app
│ │ basicapp/dockerfile ---> Using cache
<..>
│ │ basicapp/dockerfile Successfully built 02a0a425890a
│ │ basicapp/dockerfile Successfully tagged a1cbf6dc-343f-4a77-b846-d0f12a700cb7:latest
│ ├ Info
│ │ name: werf-guided-django:a473b87e1ad65f102fa90f8c6647b03056e5ae95ff1ef3c5e7fd2c31-1605597979927
│ │ size: 953.1 MiB
│ └ Building stage basicapp/dockerfile (21.94 seconds)
└ ⛵ image basicapp (22.04 seconds)
Running time 22.07 seconds
Запуск
Запуск контейнера выполняется командой werf run:
werf run --docker-options="-d -p 8000:8000 --restart=always" -- runserver 0.0.0.0:8000
Обратите внимание, что параметры docker задаются опцией --docker-options
, а команда запуска после двух дефисов.
В werf.yaml
может описываться произвольное количество образов. Для запуска контейнера определённого image
из werf.yaml необходимо использовать позиционный аргумент команды (werf run basicapp ...
).
Можно заметить, что вызов werf run
осуществляет сборку, т.е. предварительная сборка не требуется.
Теперь приложение доступно локально на порту 8000: