Как я могу создать собственный базовый образ для 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.