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


97

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

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

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


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


Неважно. :-) Вопросы здесь все равно должны быть по теме в соответствии с правилами сайта. Они описаны в справочном центре и на страницах туров . (Ссылка там, кажется, также относится к разработчикам контейнеров Docker.) Если вы спрашиваете о своем собственном образе контейнера, на их сайте
— Кен Уайт

@KenWhite: соответствующий мета-вопрос: meta.stackexchange.com/questions/179249/…
— Flimm

:-) Соответствующий мета ответ на данный момент, это ответ прямо над вашим. (См., В частности, второй комментарий к ответу, который я связал, о ясности того, что задает ваш вопрос.)
— Кен Уайт,

9
@Ken White: вопрос в том, как «создать» базовый образ, а не в том, как развернуть «образ». Flimm пытается запрограммировать что-то, что впоследствии может быть развернуто им или другими. Amazon EC2 связан с развертыванием, но я думаю, что у них все еще есть пара программистов, которые занимаются программированием :). Я бы сказал, что создание базовых образов - это пример программных вещей.
— qkrijger

@qkrijger: это обсуждается в связанном мета-вопросе. Поскольку это обсуждение является открытым, пожалуйста, размещайте здесь любые обсуждения актуальности (там, где консенсус кажется, что это не "программная тема").
— Кен Уайт

Ответы:



32

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

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

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

Возможно, вместо этого опубликуйте изменение / обновление в комментарии, чтобы другие могли его увидеть и, возможно, кто-то может повторно отправить изменение.
— 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внутри этого репо.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.