Запуск 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.
- Один файл вы можете запустить только один раз. Этот файл будет занимать много времени и может быть запущен только один раз при создании образа.
- Второй будет использоваться для добавления операторов, которые будут добавлены в виде большего количества слоев поверх существующего изображения.
Потому что, если я бегу docker build -t "test" .
для текущего файла он снова и снова будет выполнять мой скрипт на python. Это отнимает много времени, и я не хочу запускать его снова и снова.
Мои вопросы:
- Как можно разбить Dockerfile, как я уже упоминал выше.?
- Как я могу построить изображение с 2 файлами изображений.?
- Как я могу запустить эти 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".