web-dev-qa-db-fra.com

Lancer un conteneur avec Docker sans spécifier de commande

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 ?

18
rmonjo

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 :)

10
creack

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).

2
gabrtv

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:

0
blong