Je connais LXC et je voulais essayer docker. Le problème auquel je suis confronté est que je ne trouve pas de moyen de simplement dire à docker de démarrer un conteneur en arrière-plan, sans exécuter de commande. Par exemple, avec LXC je ferais:
lxc create -t ubuntu -n my_container
lxc-start -n my_container -d
À ce stade, j'aurais un conteneur en cours d'exécution que je peux utiliser comme n'importe quel VM (ssh, installez-y des éléments ...) Il semble que le docker empêche ce type d'utilisation. quelque chose ?
Avec docker, à partir de la CLI, vous ne pouvez pas créer un conteneur sans exécuter une commande dessus. Si vous souhaitez utiliser l'API REST Api, vous pouvez appeler le point de terminaison 'create' sans 'start'.
Cependant, ce ne serait pas bon pour vous, je pense.
Dans la plupart des cas, vous souhaitez probablement simplement exécuter un conteneur avec bash docker run -t -i ubuntu bash
et faites des choses là-bas. Une fois que vous avez fait tout ce dont vous aviez besoin, vous pouvez simplement vous engager et exécuter à partir de ce point.
Cependant, il est généralement préférable de faire une étape à la fois afin de garder un historique clair. Jetez un œil au constructeur Docker :)
Vous pouvez créer une image Docker qui inclut une commande d'exécution et une autre configuration, de sorte qu'un docker run <image>
démarrera le conteneur. Le moyen le plus simple de le faire est d'utiliser CMD
de Docker Builder . Vous aurez besoin d'une version récente de Docker (> 0.4.6?).
En dehors de l'utilisation de Docker Builder, consultez les indicateurs pour docker commit
et docker run
(où les arguments de la commande sont facultatifs).
Ajoutant quelques pensées supplémentaires ici alors que je jouais avec cela moi-même.
Disons que je veux travailler avec 3 conteneurs docker:
blong@mycomputer:~$ docker run --name ubuntuContainer1 -itd ubuntu
2ce602710fb9b84b6530e5a1072961627e91731aba8f8b019f346fc78df08d7c
blong@mycomputer:~$ docker run --name ubuntuContainer2 -itd ubuntu
e32b0eb72456fc23222f3915c91afc77e06a7e37a073b11f7088fabe8fa4bf20
blong@mycomputer:~$ docker run --name ubuntuContainer3 -itd ubuntu
40574f704dceb0378f48ebe01d014d598434093d649be13573911d9833d9825d
Voyez qu'ils continuent à fonctionner, même si je n'ai pas demandé d'exécuter/bin/bash explicitement
blong@mycomputer:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40574f704dce ubuntu "/bin/bash" 2 seconds ago Up 1 seconds ubuntuContainer3
e32b0eb72456 ubuntu "/bin/bash" 5 seconds ago Up 4 seconds ubuntuContainer2
2ce602710fb9 ubuntu "/bin/bash" 8 seconds ago Up 7 seconds ubuntuContainer1
Je peux Shell dans les conteneurs
blong@mycomputer:~$ docker attach ubuntuContainer1
root@2ce602710fb9:/#
Je peux exécuter des commandes (par exemple, installer des packages) dans le conteneur
root@2ce602710fb9:/# apt-get update
# ... omitting output
root@2ce602710fb9:/# apt-get install nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libc-ares2 libv8-3.14.5
The following NEW packages will be installed:
libc-ares2 libv8-3.14.5 nodejs
0 upgraded, 3 newly installed, 0 to remove and 5 not upgraded.
Need to get 1912 kB of archives.
After this operation, 7538 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
# ... omitting output
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
root@2ce602710fb9:/# nodejs --version
v0.10.25
Ensuite, je peux quitter et continuer à fonctionner en appuyant sur CTRL-p CTRL-q
root@2ce602710fb9:/# blong@mycomputer:~/$
blong@mycomputer:~/$
Voir également: