Запуск Docker Parent image и Base image поверх родительского изображения

Я новичок в мире докеров. Итак, у меня есть существующий Dockerfile, который выглядит примерно так:

# Base image
FROM <OS_IMAGE>

# Install dependencies
RUN zypper --gpg-auto-import-keys ref -s && \
    zypper -n install git net-tools libnuma1

# Create temp user 
RUN useradd -ms /bin/bash userapp

# Creating all the required folders that is required for installment.
RUN mkdir -p /home/folder1/
RUN mkdir -p /home/folder2/
RUN sudo pip install --upgrade pip


RUN python3 code_which_takes_time.py

# Many more stuff below this.

Так code_which_takes_time.py требуется время для запуска, который загрузит много материала и выполнит его.
Таким образом, требование всегда, когда мы добавляем больше утверждений ниже RUN python3 code_which_takes_time.py ненужный будет выполнять этот скрипт Python каждый раз при создании изображения. Поэтому я хотел бы разделить это изображение на 2 файла Docker.

  1. Один файл вы можете запустить только один раз. Этот файл будет занимать много времени и может быть запущен только один раз при создании образа.
  2. Второй будет использоваться для добавления операторов, которые будут добавлены в виде большего количества слоев поверх существующего изображения.

Потому что, если я бегу docker build -t "test" . для текущего файла он снова и снова будет выполнять мой скрипт на python. Это отнимает много времени, и я не хочу запускать его снова и снова.

Мои вопросы:

  1. Как можно разбить Dockerfile, как я уже упоминал выше.?
  2. Как я могу построить изображение с 2 файлами изображений.?
  3. Как я могу запустить эти 2 файла?

На данный момент я делаю:

Сборка и запуск: docker build -t "test" . && docker run -it "test"
Просто построить: docker build -t "test" .
Просто беги: docker run -it "test"

1 ответ

После прочтения сценария я могу предложить следующее: вы хотите разделить рабочий процесс на два файла Docker. Насколько я знаю, вы можете легко их разбить.

Поддержите свой первый Dockerfile, который создаст образ с вашим кодом Python code_which_takes_time.py выполнено, передайте это изображение с именем "Root_image". После этого, когда вы хотите добавить другие задачи в этот "Root_image", как RUN python3 и т.д., просто создайте новый Dockerfile и используйте FROM Root_image в этом Dockerfile и делайте то, что вы хотите сделать в нем. После выполнения вашей задачи зафиксируйте вашу работу и назовите ее "Child_image", в конечном итоге ваш дочерний образ будет наследоваться от этого "Root_image".

Другие вопросы по тегам