Я слежу за Документация 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