Je suis le CoreOS Docker Documentation et il mentionne le démarrage des conteneurs avec des commandes comme:
docker run someImageName /bin/somebinary
Où 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 ?
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.
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.
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.
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