Как я могу создать собственное базовое изображение для Docker?

В соответствии с Документацией Docker, чтобы создать собственное изображение, вы всегда должны указывать базовое изображение с помощью инструкции FROM.

Очевидно, что есть много изображений, которые можно выбрать из индекса Docker, но что, если я захочу создать собственный? Возможно ли это?

Изображение base построено на Ubuntu, если я правильно понимаю, и я хочу поэкспериментировать с изображением Debian. Кроме того, я хочу по-настоящему понять, как работает Docker, а образ base по-прежнему является черным ящиком для меня.

Ответ 1

Вы можете посмотреть, как создаются базовые изображения и идти оттуда.

Вы можете найти их здесь: https://github.com/dotcloud/docker/tree/master/contrib. Существует mkimage-busybox.sh, mkimage-unittest.sh, mkimage-debian.sh

Ответ 2

Цитата Соломон Хикс:

Вы можете легко создать новый контейнер из любого tarball с "импортом докеров". Например:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

Ответ 3

(кредит от отца) Получите информацию от http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/, что объясняет лучше

  • Создайте файлы tar для вашей файловой системы, просто может быть

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  • Перенесите файл tar в другую систему докеров, если он не установлен локально, и import it

    cat centos6-base.tar | docker import - centos6-base
    
  • Теперь вы можете проверить, запустив его.

    docker run -i -t centos6-base cat /etc/redhat-release
    

Скрипты из dotcloud объединяют первые два шага вместе, что заставляет меня запутаться и выглядит сложным в начале.

Официальное руководство docker с помощью debootstrap также пытается создать чистую файловую систему.

Вы сами можете судить, как сделать шаг 1.

Ответ 4

Чтобы создать собственное изображение с нуля, вы можете использовать образ scratch.

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

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch

Ответ 5

Если вы хотите создать свой собственный базовый образ, я бы сначала взглянул на Официальные изображения, в частности stackbrew внутри этого репо.

В противном случае есть несколько отличных ссылок для минимальных изображений ОС в докере-репо.

Например, здесь script для создания минимального изображения в арке, и есть более .