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

Я новичок в мире докеров. Итак, у меня есть 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 файла Dockerfile.

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

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

Мои вопросы:

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

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

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

1 Ответ

0 голосов
/ 30 октября 2018

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

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

...