Primeros pasos con 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