Монтирование репозитория CDROM во время docker сборки - PullRequest
1 голос
/ 03 февраля 2020

Я создаю docker изображение, которое также включает в себя маленькое yum install. В настоящее время я нахожусь в месте, где брандмауэр и контроль доступа делают docker pull, yum install и c чрезвычайно медленными.

В моем случае это изображение JRE8 docker с использованием этого официального сценарий изображения

Моя проблема:

Для создания образа требуется всего 2 библиотеки (gzip + tar), которые в совокупности составляют всего (132 кБ + 865 кБ) , Но скрипт yum внутри docker сначала загрузит информацию репо, размер которой превышает 80 МБ. Несмотря на то, что 80 МБ, как правило, мало, здесь для загрузки потребовалось более 1 часа. Если моим коллегам нужно строить, это будет пустой тратой продуктивного времени, не говоря уже о разочаровании.

Обходные пути, о которых я знаю:

  • Поскольку этому изображению может не потребоваться полная мощность ням, я могу просто получить файлы * .rpm, COPY в скрипте контейнера и используйте rpm -i вместо yum
  • Я могу сохранить встроенное изображение и локально распределить
  • Я также могу найти ближайшее зеркало для docker -hub, но не ням

Моя ставка:

  • У меня есть копия linux CD с примерно такой же версией
  • Я могу добавить команды в dockerfile, чтобы переименовать * .repo в * .repo.old
  • Добавить cdrom.repo в /etc/yum.repos.d/ внутри контейнера
  • Использовать yum загрузить наиболее распространенные библиотеки с CDROM вместо inte rnet

Моя проблема:

Я не могу разобрать, как создать точка монтирования на репозиторий cdrom изнутри сборки контейнера без использования httpd.

На простом linux Я делаю это:

mkdir /cdrom
mount /dev/cdrom /cdrom

cat > /etc/yum.repos.d/cdrom.repo <<EOF
[cdrom]
name=CDROM Repo
baseurl=file:///cdrom
enabled=1
gpgcheck=1
gpgkey=file:///cdrom/RPM-GPG-KEY-oracle
EOF

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 февраля 2020

Docker контейнеры не могут получить доступ к хост-устройствам. Я думаю, что вам придется написать скрипт-обертку вокруг команды docker build, чтобы сделать следующее:

  1. Сначала смонтируйте CD-ROM в каталог в контексте docker (это будет подпрограмма). -директория, в которой существует ваш DockerFile).
  2. вызовите docker команду сборки с использованием содержимого из этого каталога
  3. Смонтируйте компакт-диск.

так,

cd docker_build_dir
mkdir cdrom
mount /dev/cdrom cdrom
docker build "$@" .
umount cdrom

В DockerFile вы просто сделаете это:

RUN cd cdrom && rpm -ivh rpms_you_need
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...