Exécuter une image Docker en tant que conteneur


604

J'ai construit une image Docker à partir d'un fichier docker. Je vois que l'image a été créée avec succès, mais que dois-je en faire? Ne devrait-il pas pouvoir fonctionner comme un conteneur?

Réponses:


855

La manière spécifique de l'exécuter dépend de si vous avez donné à l'image un tag / nom ou non.

$ docker images
REPOSITORY          TAG                 ID                  CREATED             SIZE
ubuntu              12.04               8dbd9e392a96        4 months ago        131.5 MB (virtual 131.5 MB)

Avec un nom (utilisons Ubuntu ):

$ docker run -i -t ubuntu:12.04 /bin/bash

Sans nom, il suffit d'utiliser l'ID:

$ docker run -i -t 8dbd9e392a96 /bin/bash

Veuillez consulter Docker run reference pour plus d'informations.


4
Donc, les noms conviviaux imprimés sous «NOM» dans docker ps -ane sont pas utiles ici?
ThorSummoner

11
docker psrépertorie les conteneurs, pas les images. Si vous souhaitez créer une image à partir d'un conteneur, vous devez docker commit. Vous pouvez utiliser le NOM dans le commit (par exemple docker commit _NAME_ _imagename_)
Andy

8
@Andy Pourquoi utilisons-nous / bin / bash à la fin? Je suis nouveau aussi
Raheel

6
@RaheelKhan Becaue votre image docker a besoin de quelque chose pour fonctionner. Vous pouvez remplacer cela par un programme que vous avez installé. / bin / bash est juste un shell pratique qui est déjà installé.
Ryan Shillington

Si vous devez ajouter une variable d'environnement, vous pouvez exécuter docker run -i -t -e ROOT_PASSWORD = root ubuntu: 12.04
Balaji Radhakrishnan

70

Procédez comme suit:

  1. $ docker images

    Vous obtiendrez une liste de toutes les images Docker locales avec les balises spécifiées.

  2. $ docker run image_name:tag_name

    Si vous n'avez pas précisé tag_name il exécutera automatiquement une image avec la dernière balise.

    Au lieu de image_name, vous pouvez également spécifier un ID d'image (pas de tag_name).


35
  • Pour répertorier les images Docker

    $ docker images
    
  • Si votre application souhaite s'exécuter avec le port 80 et que vous pouvez exposer un autre port à lier localement, par exemple 8080:

    $ docker run -d --restart=always -p 8080:80 image_name:version
    

21

Vous pouvez voir vos images disponibles en utilisant:

docker images

Ensuite, vous pouvez exécuter en mode détaché afin que votre terminal soit toujours utilisable. Vous avez plusieurs options pour l'exécuter en utilisant un nom de référentiel (avec ou sans balise) ou un ID d'image:

docker run -d repository
docker run -d repository:tag
docker run -d image_id

Ensuite, vous pouvez vérifier que votre conteneur fonctionne en utilisant

docker ps

docker psvous donne un ID de conteneur. Vous pouvez l'utiliser ou simplement les 2/3 premiers caractères pour aller dans votre conteneur en utilisant:

docker exec -it container_id /bin/bash

Et vous pouvez l'arrêter en utilisant docker stop container_idet docker rm container_id.

Vous pouvez également exécuter votre conteneur avec des -rmarguments, donc si vous arrêtez votre conteneur, il sera automatiquement supprimé.


1
L'option --rm (note: 2 tirets pas simples) est en or !!!, mon système est jonché de conteneurs arrêtés (morts).
Johan Snowgoose

13

Obtenez le nom ou l'id de l'image que vous souhaitez exécuter, avec cette commande:

docker images

La commande Docker run est utilisée de la manière suivante:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Ci-dessous, j'ai inclus les options de répartition, de nom, de publication, de volume et de redémarrage avant de spécifier le nom ou l'identifiant de l'image:

docker run -d --name  container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name

Où:

--detach , -d        Run container in background and print container ID
--name                Assign a name to the container
--publish , -p        Publish a container’s port(s) to the host
--volume , -v        Bind mount a volume
--restart            Restart policy to apply when a container exits

Pour plus d'informations, veuillez consulter la référence officielle de l' exécution Docker .


5

Voici un exemple pour exécuter un service webdev dans Docker. Le nom de l'image est morrisjobke / webdav . Vous pouvez le retirer de Docker Hub .

Après avoir exécuté ces images, vous pouvez ensuite accéder à l' instance WebDAV à l' adressehttp://localhost:8888/webdav . En interne, le dossier /var/webdavest utilisé comme racine WebDAV.

Vous pouvez exécuter ce conteneur de la manière suivante:

$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav

Re "exécuter un service webdev" : Voulez-vous dire "exécuter un service WebDAV" ? Ou "exécuter un service de développement Web" ?
Peter Mortensen

5

J'ai eu le même problème. J'ai exécuté mon image Docker et elle a créé un conteneur avec un CONTAINER_ID spécifique. Je voulais travailler avec le même conteneur:

Exécutez d'abord votre image Docker:

docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning

Listez ensuite tous les conteneurs que vous avez fabriqués:

sudo docker ps -a

Et sélectionnez le conteneur avec lequel vous souhaitez travailler (le mien est 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

Puisque vous avez créé une image à partir du Dockerfile, l'image n'est actuellement pas en état actif. Pour fonctionner, vous devez exécuter cette image dans un conteneur.

La $ docker imagescommande décrit le nombre d'images actuellement disponibles dans le référentiel local. et

docker ps -a

indique le nombre de conteneurs actuellement disponibles, c'est-à-dire la liste des conteneurs actifs et sortis.

Il existe deux façons d'exécuter l'image dans le conteneur:

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

En mode détaché:

-d=false: Detached mode: Run container in the background, print new container id

En mode interactif:

-i :Keep STDIN open even if not attached

Voici la commande Docker run

$ docker run image_name:tag_name

Pour plus de précisions sur l'exécution de Docker, vous pouvez visiter la référence de l'exécution de Docker .

C'est le meilleur matériel pour comprendre Docker.


2

Pour afficher une liste de toutes les images sur votre hôte Docker, exécutez:

  $ docker images
   REPOSITORY          TAG           IMAGE ID            CREATED             SIZE
   apache_snapshot     latest        13037686eac3        22 seconds ago      249MB
   ubuntu              latest        00fd29ccc6f1        3 weeks ago         111MB

Vous pouvez maintenant exécuter l'image Docker en tant que conteneur en mode interactif:

   $ docker run -it apache_snapshot /bin/bash

OU si vous n'avez pas d'images localement, recherchez Docker Hub pour une image à télécharger:

    $ docker search ubuntu
    NAME                            DESCRIPTION             STARS  OFFICIAL  AUTOMATED
    ubuntu                          Ubuntu is a Debian...   6759   [OK]       
    dorowu/ubuntu-desktop-lxde-vnc  Ubuntu with openss...   141              [OK]
    rastasheep/ubuntu-sshd          Dockerized SSH ser...   114              [OK]
    ansible/ubuntu14.04-ansible     Ubuntu 14.04 LTS w...   88               [OK]
    ubuntu-upstart                  Upstart is an even...   80     [OK]

Tirez l'image Docker d'un référentiel avec la commande puller docker:

     $ docker pull ubuntu

Exécutez l'image Docker en tant que conteneur:

     $ docker run -it ubuntu /bin/bash

0
$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED            
jamesmedice/marketplace   latest              e78c49b5f380        2 days ago          
jamesmedice/marketplace   v1.0.0              *e78c49b5f380*        2 days ago          


$ docker run -p 6001:8585 *e78c49b5f380*

1
Une explication serait de mise.
Peter Mortensen

-1

Pour ceux qui ont eu le même problème, mais qui ont rencontré une erreur comme

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"

J'ai ajouté un point d'entrée qui a fonctionné pour moi:

docker run -it --entrypoint /bin/sh pour les images sans Bash.

Exemple (tiré de l'exemple approuvé):

run -it --entrypoint /bin/sh ubuntu:12.04

Référence: https://gist.github.com/mitchwongho/11266726

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.