Ejecuta una imagen de Docker como contenedor


604

Construí una imagen Docker a partir de un dockerfile. Veo que la imagen se creó correctamente, pero ¿qué hago con ella? ¿No debería poder ejecutarse como un contenedor?

Respuestas:


855

La forma específica de ejecutarlo depende de si le dio a la imagen una etiqueta / nombre o no.

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

Con un nombre (usemos Ubuntu ):

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

Sin un nombre, solo usando la ID:

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

Consulte la referencia de ejecución de Docker para obtener más información.


44
Entonces, ¿los nombres amigables para los humanos impresos bajo 'NOMBRE' docker ps -ano son útiles aquí?
— ThorSummoner

11
docker psenumera contenedores, no imágenes. Si desea crear una imagen desde un contenedor, debe hacerlo docker commit. Puedes usar el NOMBRE en la confirmación (por ejemplo docker commit _NAME_ _imagename_)
— Andy

8
@Andy ¿Por qué usamos / bin / bash al final? Soy nuevo también
— Raheel

66
@RaheelKhan Debido a que su imagen acoplable necesita algo para ejecutarse. Puede reemplazar eso con un programa que haya instalado. / bin / bash es solo un práctico shell que ya está instalado.
— Ryan Shillington

Si necesita agregar una variable de entorno, puede ejecutar la ventana acoplable -i -t -e ROOT_PASSWORD = root ubuntu: 12.04
— Balaji Radhakrishnan

70

Haz los siguientes pasos:

  1. $ docker images

    Obtendrá una lista de todas las imágenes locales de Docker con las etiquetas especificadas.

  2. $ docker run image_name:tag_name

    Si no lo especificó tag_name, se ejecutará automáticamente una imagen con la etiqueta 'más reciente'.

    En lugar de image_name, también puede especificar una ID de imagen (sin nombre de etiqueta).


35
  • Para enumerar las imágenes de Docker

    $ docker images
    
  • Si su aplicación quiere ejecutarse con el puerto 80, y puede exponer un puerto diferente para enlazar localmente, diga 8080:

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

21

Puedes ver tus imágenes disponibles usando:

docker images

Luego puede ejecutar en modo separado para que su terminal todavía sea utilizable. Tiene varias opciones para ejecutarlo usando un nombre de repositorio (con o sin etiqueta) o ID de imagen:

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

Luego puede verificar que su contenedor se esté ejecutando usando

docker ps

docker psle da una identificación de contenedor. Puede usarlo o solo los 2/3 primeros caracteres para ingresar a su contenedor usando:

docker exec -it container_id /bin/bash

Y puedes detenerlo usando docker stop container_idy docker rm container_id.

También puede ejecutar su contenedor con -rmargumentos, por lo que si lo detiene, se eliminará automáticamente.


1
La opción --rm (nota: ¡2 guiones no solo!) Es oro !!!, mi sistema está lleno de contenedores detenidos (muertos).
— Johan Snowgoose

13

Obtenga el nombre o la identificación de la imagen que desea ejecutar con este comando:

docker images

El comando de ejecución Docker se utiliza de la siguiente manera:

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

A continuación, he incluido las opciones de despacho, nombre, publicación, volumen y reinicio antes de especificar el nombre o id de la imagen:

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

Dónde:

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

Para obtener más información, consulte la referencia oficial de ejecución de Docker .


5

Aquí hay un ejemplo para ejecutar un servicio webdev en Docker. El nombre de la imagen es morrisjobke / webdav . Puede extraerlo de Docker Hub .

Después de ejecutar estas imágenes, puede acceder a la instancia de WebDAV en http://localhost:8888/webdav. Internamente, la carpeta /var/webdavse utiliza como raíz de WebDAV.

Puede ejecutar este contenedor de la siguiente manera:

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

Re "ejecutar un servicio webdev" : ¿Quiere decir "ejecutar un servicio WebDAV" ? ¿O "ejecutar un servicio de desarrollo web" ?
— Peter Mortensen

5

Yo tuve el mismo problema. Ejecuté mi imagen Docker y creó un contenedor con un CONTAINER_ID específico. Quería trabajar con el mismo contenedor:

Primero ejecute su imagen Docker:

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

Luego, enumere todos los contenedores que ha hecho:

sudo docker ps -a

Y seleccione el contenedor con el que desea trabajar (el mío es 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

Como ha creado una imagen desde el Dockerfile, la imagen actualmente no está en estado activo. Para trabajar, necesita ejecutar esta imagen dentro de un contenedor.

El $ docker imagescomando describe cuántas imágenes están disponibles actualmente en el repositorio local. y

docker ps -a

muestra cuántos contenedores están disponibles actualmente, es decir, la lista de contenedores activos y salidos.

Hay dos formas de ejecutar la imagen en el contenedor:

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

En modo separado:

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

En modo interactivo:

-i :Keep STDIN open even if not attached

Aquí está el comando de ejecución Docker

$ docker run image_name:tag_name

Para obtener más aclaraciones sobre la ejecución de Docker, puede visitar la referencia de ejecución de Docker .

Es el mejor material para entender Docker.


2

Para ver una lista de todas las imágenes en su host Docker, ejecute:

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

Ahora puede ejecutar la imagen de Docker como contenedor en modo interactivo:

   $ docker run -it apache_snapshot /bin/bash

O si no tiene ninguna imagen localmente, busque Docker Hub para obtener una imagen para descargar:

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

Extraiga la imagen de Docker de un repositorio con el comando de extracción de docker:

     $ docker pull ubuntu

Ejecute la imagen de Docker como contenedor:

     $ 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 explicación estaría en orden.
— Peter Mortensen

-1

Para aquellos que también tuvieron el mismo problema, pero encontraron un error como

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"

Agregué un punto de entrada que me funcionó:

docker run -it --entrypoint /bin/sh para las imágenes sin Bash.

Ejemplo (del ejemplo aprobado):

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.