Primeros pasos con Docker

Author
Por Darío Rivera
Publicado el en Docker

En nuestro post anterior vimos cómo realizar nuestro primer Hola Mundo en Docker. Mediante un archivo Dockerfile sencillo creamos una imagen a partir de otra e inicializamos un servidor web que imprime "Hola Mundo".  En este post vermos cómo crear un contenedor de docker a partir de una imagin sin necesida de utilizar un Dockerfile.

Crear el contenedor

El primer paso será crear un contenedor de docker basado en la imagen httpd:2.4. Para esto podemos utilizar el siguiente comando.

docker container create httpd:2.4

Cabe anotar que el anterior comando solo creará el contenedor de docker sin de hecho inicializarlo. Es decir, no podremos ingresar a él ya que no está corriendo.

Correr el contenedor

Para iniciar el contenedor creado primero debemos ver cual es el identificador asignado con el siguiente comando:

$ docker container ls -a
CONTAINER ID   IMAGE       COMMAND             CREATED          STATUS   PORTS  NAMES
90b0b0c5aa65   httpd:2.4   "httpd-foreground"  41 seconds ago   Created

Una vez hecho esto podrás iniciar el contenedor así:

docker container start 90b0b0c5aa65

Entrar al contenedor

Para entrar al contenedor puedes usar el siguiente comando:

docker exec -it 90b0b0c5aa65 bash

La opción -t permite abrir una terminal dentro del contenedor, mientras que la opción -i permite activar el modo interactivo con el cual podrás digitar comandos y recibir una respuesta.

docker attach

Por defecto docker start no adjunta la salida del contenedor a la terminal en donde fue ejecutado el comando. Para ver en tiempo real la salida STDOUT/STDERR en la terminal actual debes agregar el parámetro --attach. Si no hace esto, como es de esperarse el comando se ejecutará en segundo plano.

Veamos que pasa cuando se adjunta la salida a la temrminal. Observa también que en este caso debido a las características de la imagen, la terminal queda en espera dando la posibilidad de ver cualquier log posterior a la inicialización del contenedor.

$ docker container start 90b0b0c5aa65 --attach
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Aug 22 02:13:01.881906 2023] [mpm_event:notice] [pid 1:tid 139989603112832] AH00489: Apache/2.4.57 (Unix) configured -- resuming normal operations
[Tue Aug 22 02:13:01.881959 2023] [core:notice] [pid 1:tid 139989603112832] AH00094: Command line: 'httpd -D FOREGROUND'

docker run

Un shortcut bastante útil para no tener que crear, inicializar y adjuntar la salida de un comando es simplemente utilizar docker run.

docker container run httpd:2.4

docker detach

Algo que debes saber de docker es que por defecto cuando se inicializa un contenedor y este no especifica ningún comando en pausa, como por ejemplo httpd (apache), automáticamente se terminará la ejecución del contenedor una vez se hayan ejecutado todas las instrucciones disponibles.

Para permitir que el contenedor siga corriendo en segundo plano, sin adjuntar la salida a la terminal, debe especificarse el parámetro --detach.

docker run alpine/git --detach

docker ps

Para ver todos los contenedores en ejecución el comando más útil suele ser docker ps. Sin embargo, puedes utilizar el flag --format para personalizar un poco el comando y ver información más resumida.

$ docker ps --format "table {{ "\{\{.ID\}\}" }}\t{{ "\{\{.Image\}\}" }}"
CONTAINER ID   IMAGE
09a693847c9c   alpine/git
9a6db2934c5d   laravel-sandbox-redis

Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.