Je suis la documentation CoreOS Docker et elle 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 dans le 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 ?
Réponses:
Comme indiqué ici, vous exécutez simplement
/sbin/init
la commande comme tout autre démarrage unix du mode mono-utilisateur au mode multi-utilisateurs./programming/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.
la source
docker ps -notrunc
, pour obtenir l'ID du conteneur, puissudo /usr/sbin/lxc-attach -n containerID
pour accéder à l'image en cours d'exécution. Comme le mentionne l'autre affiche, je n'ai pas vraiment besoin d'un deuxième init, donc je vais vérifier les conteneurs à commande unique ensuite ...Docker est un système de gestion et de déploiement de conteneurs d' applications , pas de conteneurs de système d'exploitation . 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 une valeur par défaut
CMD
etENTRYPOINT
pour vos conteneurs, vous pouvez le faire au moment de la construction à l' aide d'un Dockerfile.la source
/sbin/init
, mais il ne doit pas nécessairement l' avoir. Vous avez probablement utilisé un conteneur ubuntu par défaut ou quelque chose comme ça. Il y a beaucoup de morceaux dans ces conteneurs qui peuvent être retirés si vous le souhaitez.Pour exécuter un système d'exploitation complet dans un conteneur, créez le Dockerfile suivant:
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:
Services systemd complets à l'intérieur du conteneur. Beau.
la source
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:
C'est ça.
Après cela, vous avez créé vos conteneurs pour toujours et vous pouvez les démarrer et les arrêter comme des machines virtuelles.
Pour entrer dans le conteneur et faire ce que vous voulez faire:
la source