
Докеризация проекта Kedro: пошаговое руководство
Docker стал важным инструментом для упаковки и развертывания приложений, обеспечивая согласованную среду в разных системах. В этом сообщении блога мы рассмотрим, как докеризировать проект Kedro с помощью Dockerfile. Докеризация вашего проекта Kedro позволяет вам легко делиться и распространять свои конвейеры данных, обеспечивая при этом воспроизводимость. Мы разберем каждую часть Dockerfile и объясним ее назначение.
Прохождение Dockerfile:
ARG BASE_IMAGE=python:3.10-slim FROM $BASE_IMAGE as runtime-environment
1. Мы начинаем с определения аргумента BASE_IMAGE и установки его значения по умолчанию в python:3.10-slim. Это позволяет гибко выбирать другой базовый образ, если это необходимо. Затем мы используем этот базовый образ для создания нового образа с именем runtime-environment.
RUN apt-get update && apt-get install -y build-essential
2. На этом шаге мы обновляем списки пакетов и устанавливаем необходимые библиотеки, такие как gcc и make. Эти библиотеки необходимы для успешной компиляции некоторых пакетов Python с собственными расширениями.
COPY src/requirements.txt /tmp/requirements.txt RUN pip install — no-cache -r /tmp/requirements.txt && rm -f /tmp/requirements.txt
3. Здесь мы копируем файл requirements.txt из каталога src нашего проекта в каталог /tmp образа Docker. Затем мы используем pip для установки требований к проекту, указанных в requirements.txt. Флаг --no-cache гарантирует, что установленные пакеты не кэшируются, что приводит к чистой установке. Наконец, мы удаляем временный файл requirements.txt.
ARG KEDRO_UID=999 ARG KEDRO_GID=0 RUN groupadd -f -g ${KEDRO_GID} kedro_group &&
useradd -m -d /home/kedro_docker -s /bin/bash -g ${KEDRO_GID} -u ${KEDRO_UID} kedro_docker
4. В этом разделе мы определяем два аргумента: KEDRO_UID и KEDRO_GID со значениями по умолчанию 999 и 0 соответственно. Затем мы создаем новую группу и пользователя в образе Docker. Имя пользователя kedro_docker и он принадлежит к группе kedro_group. При желании эти значения можно переопределить в процессе сборки.
WORKDIR /home/kedro_docker USER kedro_docker
5. Устанавливаем рабочий каталог /home/kedro_docker и переключаемся на пользователя kedro_docker. Это гарантирует, что последующие команды будут выполняться в контексте пользователя, которого мы создали ранее.
FROM runtime-environment
6. Здесь мы создаем новое изображение, начиная с изображения runtime-environment, определенного ранее. Это позволяет нам отделить этапы установки от фактической среды выполнения.
COPY — chown=${KEDRO_UID}:${KEDRO_GID} . .
7. На этом этапе мы копируем весь каталог проекта в образ Docker. Флаг --chown=${KEDRO_UID}:${KEDRO_GID} гарантирует, что скопированные файлы и каталоги принадлежат пользователю kedro_docker и группе kedro_group.
EXPOSE 8888
8. Выставляем порт 8888 в образе Docker. Это порт по умолчанию, используемый Kedro при запуске сервера Jupyter Notebook.
CMD [“kedro”, “run”]
9. Наконец, мы устанавливаем команду по умолчанию для запуска при запуске контейнера Docker. В этом случае он запускает команду kedro run, которая запускает конвейер проекта Kedro.
Вы можете найти полный файл Dockerfile ниже.
ARG BASE_IMAGE=python:3.10-slim
FROM $BASE_IMAGE as runtime-environment
# install essential libraries like gcc and make
RUN apt-get update && apt-get install -y build-essential
# install project requirements
COPY src/requirements.txt /tmp/requirements.txt
RUN pip install --no-cache -r /tmp/requirements.txt && rm -f /tmp/requirements.txt
# add kedro user
ARG KEDRO_UID=999
ARG KEDRO_GID=0
RUN groupadd -f -g ${KEDRO_GID} kedro_group && \
useradd -m -d /home/kedro_docker -s /bin/bash -g ${KEDRO_GID} -u ${KEDRO_UID} kedro_docker
WORKDIR /home/kedro_docker
USER kedro_docker
FROM runtime-environment
# copy the whole project except what is in .dockerignore
ARG KEDRO_UID=999
ARG KEDRO_GID=0
COPY --chown=${KEDRO_UID}:${KEDRO_GID} . .
EXPOSE 8888
CMD ["kedro", "run"]
Вы можете создать Dockerfile, используя:
docker build -t IMAGE_NAME .
Наконец, вы можете запустить образ Docker, используя:
docker run --rm --name CONTAINER_NAME -v .:/home/kedro_docker IMAGE_NAME:latest
Если вам понравился этот пост, поставьте ему лайк и подписывайтесь на меня здесь, на Medium и в Твиттере (https://twitter.com/royalty568). 🚀