Назад | Перейти на главную страницу

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

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

docker run someImageName /bin/somebinary

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

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

Кажется, это самая обычная вещь, которую кто-либо когда-либо хотел бы делать с 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 - не то решение, которое вам нужно. В этом случае попробуйте KVM, ESXi, OpenVZ, LXD и т.п.

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

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

FROM fedora:25

CMD /sbin/init

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

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

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

docker pull ubuntu

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

F.i:

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

Вот и все.

$ docker ps
CONTAINER ID        IMAGE            CREATED          STATUS               NAMES
a7e789711e62        67759a80360c   12 hours ago     Up 2 minutes         MyContainer1
87ae9c5c3f84        67759a80360c   12 hours ago     Up About a minute    MyContainer2
c1524520d864        67759a80360c   12 hours ago     Up About a minute    MyContainer3

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

docker start MyContainer1

Чтобы сесть в контейнер и делать то, что вы хотите:

docker exec -it MyContainer1 bash