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

Я следую за Документация CoreOS Docker и в нем упоминается запуск контейнеров с помощью таких команд, как:

docker run someImageName /bin/somebinary

Где someImageName это образ. Когда /bin/somebinary завершится, изображение больше не будет запущено.

Я просто хотел бы запустить изображение, не указывая никаких двоичных файлов для запуска. Вместо, Я просто хочу запустить службы (например, systemd / sysvinit), которые обычно запускаются внутри ОС images.

Это кажется самой распространенной вещью, которую кто-либо когда-либо хотел бы сделать с Docker, но попытка запустить изображение без команды возвращает:

2014/02/05 14:49:19 Error: create: No command specified

Как я могу запустить контейнер Docker и запустить полную операционную систему, вместо того, чтобы указывать команду?

Как описано здесь, вы просто запускаете /sbin/init как команда, как и любая другая загрузка unix из однопользовательского в многопользовательский режим.

https://stackoverflow.com/questions/19332662/start-full-container-in-docker

Контейнеры могут быть полноценными ОС, они просто не должны быть (как и виртуальные машины, если на то пошло, их просто сложнее настраивать и управлять).

Я бы сказал, что весь смысл Docker заключается в том, чтобы упростить создание контейнеров приложений, так что вам нужно настроить только приложение, а не всю ОС.

Docker - это система для управления и развертывания приложение контейнеры, не операционная система контейнеры. Похоже, что вы сравниваете запуск контейнера docker с загрузкой операционной системы.

Ваши контейнеры Docker должны быть одноцелевыми приложениями с очень узкой областью применения, которые можно запускать с помощью одной команды. Если вы ищете что-то более сложное, чем это, то Docker - это не то решение, которое вы ищете. В этом случае ознакомьтесь с KVM, ESXi, OpenVZ, LXD и т.д.

Если вы просто ищете, как вы можете указать значение по умолчанию CMD и ENTRYPOINT для ваших контейнеров вы можете сделать это по адресу время сборки использование файла Dockerfile.

Чтобы запустить полноценную операционную систему в контейнере, создайте следующий файл Dockerfile:

FROM fedora:25CMD /sbin/init

Затем создайте и запустите контейнер и введите в него оболочку, чтобы изучить службы, работающие внутри него:

docker build -t os .docker run -d --privileged --name os osdocker exec -it os bash

Полные службы systemd внутри контейнера. Красивый.

docker pull ubuntu

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

Ф.я:

docker run --name MyContainer1 <ubuntu image>docker run --name MyContainer2 <ubuntu image>docker run --name MyContainer3 <ubuntu image>

Это оно.

$ docker psCONTAINER ID        IMAGE            CREATED          STATUS               NAMESa7e789711e62        67759a80360c   12 hours ago     Up 2 minutes         MyContainer187ae9c5c3f84        67759a80360c   12 hours ago     Up About a minute    MyContainer2c1524520d864        67759a80360c   12 hours ago     Up About a minute    MyContainer3

После этого ваши контейнеры будут созданы навсегда, и вы сможете запускать и останавливать их, как виртуальные машины.

docker start MyContainer1

Залезть в контейнер и делать то, что ты хочешь делать:

docker exec -it MyContainer1 bash

Это дубликат этого вопроса lxc - Start full container in Docker? - Stack Overflow

@FredtheMagicWonderDog Не совсем, хотя ответ тот же.