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

97

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

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

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


Изменить: официальная документация по созданию базового образа

Flimm
источник
Неважно. :-) Вопросы здесь все равно должны быть по теме в соответствии с правилами сайта. Они описаны в справочном центре и на страницах туров . (Ссылка там, кажется, также относится к разработчикам контейнеров Docker.) Если вы спрашиваете о своем собственном образе контейнера, на их сайте
Кен Уайт
@KenWhite: соответствующий мета-вопрос: meta.stackexchange.com/questions/179249/…
Flimm
:-) Соответствующий мета ответ на данный момент, это ответ прямо над вашим. (См., В частности, второй комментарий к ответу, который я связал, о ясности того, что задает ваш вопрос.)
Кен Уайт,
9
@Ken White: вопрос в том, как «создать» базовый образ, а не в том, как развернуть «образ». Flimm пытается запрограммировать что-то, что впоследствии может быть развернуто им или другими. Amazon EC2 связан с развертыванием, но я думаю, что у них все еще есть пара программистов, которые занимаются программированием :). Я бы сказал, что создание базовых образов - это пример программных вещей.
qkrijger
@qkrijger: это обсуждается в связанном мета-вопросе. Поскольку это обсуждение является открытым, пожалуйста, размещайте здесь любые обсуждения актуальности (там, где консенсус кажется, что это не "программная тема").
Кен Уайт

Ответы:

38

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

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

скрип
источник
1
Скрипты mkimage- * были перемещены и переименованы (как и официальное репо) сюда
tsalaroth
32

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

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

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase
Flimm
источник
Возможно, вместо этого опубликуйте изменение / обновление в комментарии, чтобы другие могли его увидеть и, возможно, кто-то может повторно отправить изменение.
Bdoserror
1
@Flimm Зачем мне использовать sudo в этом случае? Запустите эти команды в своем пользовательском каталоге, и у вас не должно быть причин для повышения привилегий. Вы создаете образ, а не устанавливаете его.
rancidfishbreath
Для обычного использования Docker вам даже не нужен root; просто добавьте себя в dockerгруппу.
tekknolagi
1
Но дефис в команде импорта, рекомендованной Flimm, необходим: docker import - flimm/mybaseвместоdocker import flimm/mybase
Daniel Alder
Право собственности на файлы в tar будет зависеть от того, работаете вы как root или нет. Если не как root, то debootstrapи tarдолжен хотя бы запускаться под fakeroot.
clacke
21

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

  1. Создайте файлы tar для своей файловой системы, просто можно

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

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

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

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

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

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

Ларри Кай
источник
14

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

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

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

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

Майк
источник
1
Этот плюс importиз файла tar - это два канонических ответа, и эта ссылка является каноническим ресурсом.
clacke
7

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

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

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

Джесси Фразель
источник