web-dev-qa-db-fra.com

Comment puis-je exécuter un système d'exploitation complet dans un conteneur Docker, sans spécifier de commande?

Je suis le CoreOS Docker Documentation et il mentionne le démarrage des conteneurs avec des commandes comme:

docker run someImageName /bin/somebinary

someImageName est une image. Lorsque/bin/somebinary se ferme, l'image ne sera plus en cours d'exécution.

Je voudrais simplement exécuter une image, sans spécifier de binaires à exécuter. Au lieu de cela, je veux simplement exécuter les services (par exemple, systemd/sysvinit) qui sont normalement exécutés à l'intérieur du système d'exploitation des images .

Cela semble être la chose la plus courante que quiconque voudrait faire avec Docker, mais essayer d'exécuter une image sans commande renvoie:

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

Comment puis-je démarrer un conteneur Docker et exécuter un système d'exploitation complet, plutôt que de spécifier une commande ?

26
mikemaccana

Comme indiqué ici, vous exécutez simplement /sbin/init comme commande, comme tout autre démarrage unix du mode mono-utilisateur au mode multi-utilisateurs.

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

Les conteneurs peuvent être des OS à part entière, ils n'ont tout simplement pas à l'être (pas plus que les VM d'ailleurs, c'est juste plus compliqué à configurer et à gérer).

Je dirais que le but de Docker est de rendre les conteneurs d'applications faciles, afin que vous n'ayez qu'à configurer une application, pas tout le système d'exploitation.

24

Docker est un système de gestion et de déploiement de conteneurs d'application , et non du système d'exploitation conteneurs. Il semble que vous confondiez l'exécution d'un conteneur Docker avec le démarrage d'un système d'exploitation.

Vos conteneurs Docker doivent être des applications à usage unique à portée très étroite pouvant être démarrées avec une seule commande. Si vous recherchez quelque chose de plus complexe que cela, Docker n'est pas la solution que vous recherchez. Dans ce cas, consultez KVM, ESXi, OpenVZ, LXD etc.

Si vous cherchez simplement comment spécifier un CMD et ENTRYPOINT par défaut pour vos conteneurs, vous pouvez le faire à build-time en utilisant un Dockerfile.

11
EEAA

Pour exécuter un système d'exploitation complet dans un conteneur, créez le Dockerfile suivant:

FROM Fedora:25

CMD /sbin/init

Ensuite, créez et démarrez le conteneur et entrez un shell à l'intérieur pour explorer les services qui y sont exécutés:

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

Services systemd complets à l'intérieur du conteneur. Beau.

5
Markus Hallmann
docker pull ubuntu

Exécutez simplement la même image autant de fois que nécessaire. De nouveaux conteneurs seront créés et ils pourront ensuite être démarrés et arrêtés chacun enregistrant sa propre configuration. Pour votre commodité, il serait préférable de donner à chacun de vos conteneurs un nom avec "--name".

Fi:

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

C'est ça.

$ 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

Après cela, vos conteneurs sont créés pour toujours et vous pouvez les démarrer et les arrêter comme des machines virtuelles.

docker start MyContainer1

Pour entrer dans le conteneur et faire ce que vous voulez faire:

docker exec -it MyContainer1 bash
0
DimiDak