Introducción
Uno de los primeros y más importantes comandos que los usuarios de Docker aprenden es el comando docker run. Esto no es sorprendente, ya que su función principal es construir y ejecutar contenedores.
Hay muchas formas diferentes de ejecutar un contenedor. Al agregar atributos a la sintaxis básica, puedes configurar un contenedor para que se ejecute en modo desacoplado, asignarle un nombre, montar un volumen y realizar muchas otras tareas.
En este tutorial, aprenderás cómo utilizar los comandos docker run con ejemplos.
Prerrequisitos
- Acceso a una ventana de línea de comandos/terminal
- Una cuenta de usuario con privilegios de sudo
- Una instalación existente de Docker
Cómo utilizar el comando docker run
La sintaxis básica del comando es:
docker run [OPCIONES] IMAGEN [COMANDO] [ARG...]
Para ejecutar un contenedor, lo único que necesitas incluir en el comando es la imagen en la que se basa:
docker run [imagen_docker]
Puedes ejecutar contenedores a partir de imágenes de Docker almacenadas localmente. Si utilizas una imagen que no está en tu sistema, el software la descarga desde el registro en línea.
Como ejemplo, utilizamos un Dockerfile para crear una imagen de Docker de muestra con la tarea de imprimir el mensaje “Hola Mundo”. Para nosotros, la imagen tiene el ID e98b6ec72f51. Tu nombre de imagen será diferente según el contenedor que desees ejecutar.
El comando para ejecutar nuestro contenedor de muestra sería:
docker run e98b6ec72f51
El contenedor realiza la tarea prescrita (imprime el mensaje “Hola Mundo”) y luego se detiene.
Nota:
Con el lanzamiento de Docker 1.13, Docker introdujo una nueva CLI en la que agrupó los comandos según el objeto con el que interactúan. En consecuencia, “run” es ahora un subcomando de “docker container” y para usarlo debes escribir “docker container run”. Aunque Docker todavía admite “docker run”, recomienda acostumbrarse a la nueva sintaxis.
Ejecutar un contenedor con un nombre específico
Cuando utilizas el comando básico de ejecución, Docker genera automáticamente un nombre de contenedor con una cadena de números y letras seleccionados al azar.
Dado que es poco probable que puedas recordar o reconocer los contenedores por estos nombres genéricos, considera asignarles un nombre más fácil de recordar.
Usando el atributo –name puedes asignar un nombre al contenedor. El comando para ejecutar un contenedor con un nombre específico es:
docker container run --name [nombre_contenedor] [imagen_docker]
Por ejemplo, podemos ejecutar el contenedor de muestra y asignarle el nombre “container_instance” utilizando el comando:
docker container run --name container_instance e98b6ec72f51
Puedes verificar si has asignado correctamente un nombre de contenedor mostrando una lista de todos los contenedores (en ejecución y detenidos) con el comando:
docker ps -a
Como se muestra en la imagen a continuación, deberías ver tu contenedor recién creado.
Ejecutar un contenedor en segundo plano (modo desacoplado)
Hay dos formas de ejecutar un contenedor: en modo adjunto (en primer plano) o en modo desacoplado (en segundo plano).
De forma predeterminada, Docker ejecuta el contenedor en modo adjunto, lo que significa que está vinculado a la sesión del terminal, donde muestra la salida y los mensajes.
Si deseas mantener el contenedor y la sesión del terminal actual separados, puedes ejecutar el contenedor en segundo plano utilizando el atributo -d. El modo desacoplado también te permite cerrar la sesión del terminal abierta sin detener el contenedor.
El comando para ejecutar un contenedor en segundo plano es:
docker container run -d [imagen_docker]
Para nuestro ejemplo, el comando sería:
docker container run -d e98b6ec72f51
La salida que recibes será similar a la que se muestra en la imagen anterior. El contenedor ejecutará el proceso y luego se detendrá. No se mostrará ninguna otra salida dentro de la sesión del terminal.
Ejecutar un contenedor en modo interactivo
Docker te permite ejecutar un contenedor en modo interactivo. Esto significa que puedes ejecutar comandos dentro del contenedor mientras sigue en ejecución.
Al utilizar el contenedor de forma interactiva, puedes acceder a un símbolo del sistema dentro del contenedor en ejecución. Para hacerlo, ejecuta el siguiente comando:
docker container run -it [imagen_docker] /bin/bash
El símbolo del sistema cambiará, llevándote a la shell de bash como se muestra en el ejemplo a continuación.
Ejecutar un contenedor y publicar los puertos del contenedor
Cuando ejecutas un contenedor, la única forma de acceder al proceso es desde dentro del mismo. Para permitir conexiones externas al contenedor, debes abrir (publicar) puertos específicos.
Debes agregar la opción -p al comando docker run, así como la siguiente información:
-p [ip_anfitrión]:[puerto_anfitrión]:[puerto_contenedor]
El elemento ip_anfitrión es opcional y no necesitas especificarlo al ejecutar el comando.
Por ejemplo, para asignar el puerto TCP 80 en el contenedor al puerto 8080 en el host de Docker, ejecutarías:
docker container run -p 8080:80 [imagen_docker]
Ejecutar un contenedor y montar volúmenes del host
Los contenedores de Docker no guardan los datos que producen. Tan pronto como el proceso finaliza, el contenedor se detiene y todo lo que hay dentro de él se elimina.
Si deseas tener datos persistentes que se almacenen incluso después de que el contenedor se detenga, debes habilitar el uso compartido de volúmenes de almacenamiento.
Para montar volúmenes, utiliza el atributo -v con la ubicación especificada del directorio donde deseas guardar los datos, seguido de dónde se ubicarán esos datos dentro del contenedor.
-v [/ubicación/volumen/anfitrión]:[/almacenamiento/contenedor]
El comando completo de docker container run sería:
docker container run -v [/ubicación/volumen/anfitrión]:[/almacenamiento/contenedor] [imagen_docker]
Ejecutar un contenedor de Docker y eliminarlo una vez que el proceso esté completo
Una vez que un contenedor ejecuta sus tareas, se detiene, pero el sistema de archivos del contenedor sigue en el sistema.
Si solo necesitas que un contenedor ejecute la tarea descrita y no lo necesitas ni su sistema de archivos después, puedes configurarlo para que se elimine automáticamente una vez que haya finalizado.
Para ejecutar un contenedor que se eliminará automáticamente después de salir, utiliza el comando:
docker container run --rm [imagen_docker]
Conclusión
Docker ha ganado un lugar prominente en las tendencias de desarrollo. Cuanto antes te familiarices con su interfaz de línea de comandos, mejor. El primer paso es dominar el comando docker run.
Puedes utilizar esta guía para aprender lo básico o como un recordatorio útil cuando lo necesites.