Esegui un'immagine Docker come contenitore


604

Ho creato un'immagine Docker da un file docker. Vedo che l'immagine è stata creata correttamente, ma cosa devo fare con essa? Non dovrebbe essere in grado di funzionare come contenitore?

Risposte:


855

Il modo specifico per eseguirlo dipende dal fatto che tu abbia dato o meno un tag / nome all'immagine.

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

Con un nome (usiamo Ubuntu ):

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

Senza un nome, basta usare l'ID:

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

Per ulteriori informazioni, consultare il riferimento alla corsa Docker .


4
Quindi i nomi a misura di uomo stampati sotto 'NOME' in docker ps -anon sono utili qui?
ThorSummoner,

11
docker pselenca i contenitori, non le immagini. Se si desidera creare un'immagine da un contenitore, è necessario docker commit. Puoi utilizzare NAME nel commit (ad es. docker commit _NAME_ _imagename_)
Andy

8
@Andy Perché usiamo / bin / bash alla fine? Sono nuovo anche io
Raheel

6
@RaheelKhan Becaue l'immagine docker ha bisogno di qualcosa per funzionare. Potresti sostituirlo con un programma che hai installato. / bin / bash è solo una comoda shell già installata.
Ryan Shillington,

Se è necessario aggiungere una variabile d'ambiente, è possibile eseguire la finestra mobile -i -t -e ROOT_PASSWORD = ubuntu root: 12.04
Balaji Radhakrishnan,

70

Procedi come segue:

  1. $ docker images

    Otterrai un elenco di tutte le immagini Docker locali con i tag specificati.

  2. $ docker run image_name:tag_name

    Se non hai specificato tag_name , eseguirà automaticamente un'immagine con il tag "più recente".

    Invece di image_name, puoi anche specificare un ID immagine (no tag_name).


35
  • Per elencare le immagini Docker

    $ docker images
    
  • Se l'applicazione desidera eseguire con la porta 80 e puoi esporre una porta diversa da associare localmente, ad esempio 8080:

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

21

Puoi vedere le tue immagini disponibili usando:

docker images

Quindi è possibile eseguire in modalità staccata in modo che il terminale sia ancora utilizzabile. Sono disponibili diverse opzioni per eseguirlo utilizzando un nome di repository (con o senza tag) o un ID immagine:

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

Quindi è possibile verificare che il contenitore sia in esecuzione utilizzando

docker ps

docker psti dà un ID contenitore. Puoi usarlo o solo i primi 2/3 caratteri per entrare nel tuo contenitore usando:

docker exec -it container_id /bin/bash

E puoi fermarlo usando docker stop container_ide docker rm container_id.

È inoltre possibile eseguire il contenitore con -rmargomenti, quindi se si interrompe il contenitore verrà automaticamente rimosso.


1
L'opzione --rm (nota: 2 trattini non singoli) è oro !!!, il mio sistema è disseminato di contenitori fermi (morti).
Johan Snowgoose,

13

Ottieni il nome o l'id dell'immagine che desideri eseguire, con questo comando:

docker images

Il comando Esegui Docker viene utilizzato nel modo seguente:

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

Di seguito ho incluso le opzioni di spedizione, nome, pubblicazione, volume e riavvio prima di specificare il nome o l'id dell'immagine:

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

Dove:

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

Per ulteriori informazioni, consultare il riferimento ufficiale della corsa Docker .


5

Ecco un esempio per eseguire un servizio webdev in Docker. Il nome dell'immagine è morrisjobke / webdav . Puoi estrarlo dall'hub Docker .

Dopo aver eseguito queste immagini, è quindi possibile accedere all'istanza WebDAV in http://localhost:8888/webdav. Internamente la cartella /var/webdavviene utilizzata come root WebDAV.

È possibile eseguire questo contenitore nel modo seguente:

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

Ri "esegui un servizio webdev" : vuoi dire "esegui un servizio WebDAV" ? O "eseguire un servizio di sviluppo web" ?
Peter Mortensen,

5

Ho avuto lo stesso problema. Ho eseguito la mia immagine Docker e ha creato un contenitore con un CONTAINER_ID specifico. Volevo lavorare con lo stesso contenitore:

Prima esegui l'immagine Docker:

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

Quindi elenca tutti i contenitori che hai creato:

sudo docker ps -a

E seleziona il contenitore con cui vuoi lavorare (il mio è 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

Dal momento che è stata creata un'immagine dal Dockerfile, l'immagine attualmente non è nello stato attivo. Per funzionare devi eseguire questa immagine all'interno di un contenitore.

Il $ docker imagescomando descrive quante immagini sono attualmente disponibili nel repository locale. e

docker ps -a

mostra quanti contenitori sono attualmente disponibili, ovvero l'elenco dei contenitori attivi ed usciti.

Esistono due modi per eseguire l'immagine nel contenitore:

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

In modalità staccata:

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

In modalità interattiva:

-i :Keep STDIN open even if not attached

Ecco il comando di esecuzione Docker

$ docker run image_name:tag_name

Per ulteriori chiarimenti sulla corsa Docker, è possibile visitare il riferimento sulla corsa Docker .

È il materiale migliore per capire Docker.


2

Per visualizzare un elenco di tutte le immagini sull'host Docker, eseguire:

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

Ora puoi eseguire l'immagine Docker come contenitore in modalità interattiva:

   $ docker run -it apache_snapshot /bin/bash

OPPURE se non si dispone di immagini localmente, cercare Docker Hub per un'immagine da scaricare:

    $ 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]

Estrarre l'immagine Docker da un repository con il comando pull docker:

     $ docker pull ubuntu

Esegui l'immagine Docker come contenitore:

     $ 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
Una spiegazione sarebbe in ordine.
Peter Mortensen,

-1

Per coloro che hanno avuto lo stesso problema, ma hanno riscontrato un errore simile

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"

Ho aggiunto un punto di ingresso che ha funzionato per me:

docker run -it --entrypoint /bin/sh per le immagini senza Bash.

Esempio (dall'esempio approvato):

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

Riferimento: https://gist.github.com/mitchwongho/11266726

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.