Ejecutar un contenedor en Docker

Una vez instalado Docker siguiendo la guía anterior, os explico que pasos he seguido para levantar mi primer contenedor en Docker. Al ser el primero, he querido simplificar los pasos para ejecutar una imagen.

Descargaremos la imagen desde Docker Hub, que es el repositorio oficial de imágenes de Docker. Aquí podemos buscar imágenes de todo tipo, desde aplicaciones como Apache, Nginx o MySQL/MariaDB hasta imágenes básicas de Ubuntu u otras ediciones de Linux.

Además, una de las ventajas de los contenedores es que permite ejecutar varias versiones de una misma aplicación, permitiendo hacer pruebas antes de lanzar una versión a producción.

Para la prueba vamos a desplegar una imagen del servidor web de Apache HTTP. En la pagina de la imagen oficial (https://hub.docker.com/_/httpd) podemos ver que tenemos las siguientes versiones disponibles (tags):

En nuestro caso, si queremos utilizar la ultima versión, podremos utilizar el tag «latest» (o no indicarlo y utilizara la ultima versión automáticamente, pero es una buena practica especificar siempre la imagen).

También, es importante leer las notas de la imagen para conocer que opciones podremos utilizar para parametrizar el contenedor y/o ejecutarlo correctamente.

Ejecutar un contenedor

Podemos lanzar nuestro contenedor ejecutando docker run + nombre de la imagen:

Ejecutar un contenedor en segundo plano

En este caso, como se puede observar, la imagen se queda ejecutándose en modo interactivo por lo que si salimos del terminal se apagara. Para que la imagen se ejecute en segundo plano debemos utilizar docker run -d en el comando de ejecución.

Ver los contenedor que tenemos en ejecución

Ahora, nuestro contenedor estará ejecutándose en segundo plano por lo que deberemos utilizar docker ps para ver los contenedores que hay ejecutándose en nuestra maquina.

Detener el contenedor

Si queremos parar este contenedor, podemos utilizar docker stop + id del contenedor como se muestra a continuación.

Redirección de puertos

Los contenedores, por defecto, están «aislados» por lo que no podemos acceder a los servicios que ellos contienen a menos que redireccionemos el trafico a ellos. Para ello, utilizaremos la opción -p indicando el puerto que queremos utilizar en nuestro equipo + el puerto que utilice el servicio de dicho contenedor. En nuestro caso, al ser un servicio HTTP, utilizaremos el puerto 80 del contenedor y lo redireccionaremos al puerto 8090 local.

Mediante curl, o un navegador, podremos validar el correcto acceso al servicio del contenedor.

Acceder a un contenedor

Vamos a modificar el fichero que muestra nuestro contenedor. Para ello, podemos utilizar el comando docker exec -it + comando a ejecutar. Con esto, podemos ejecutar un terminal bash sobre el contenedor.

Una vez dentro, podemos modificar el fichero

Copiar ficheros a un contenedor

Para copiar un fichero en el contenedor, podemos utilizar el comando docker cp origen destino. He creado un fichero «index.html» nuevo con el contenido «Hola Hugo. Copiado!» que vamos a copiar al contenedor para reemplazar el fichero index.html original.

Es importante recordar que los ficheros que copiemos se perderán una vez se apague el contenedor.

Montar un directorio local en un contenedor

Para mantener la consistencia de los ficheros, vamos a utilizar un directorio local del servidor

Para montar un directorio local en el contenedor debemos utilizar el comando docker run -v directorio_local:directorio_contenedor. Para la prueba, he creado un directorio llamado «datoscontenedor» con un fichero «index.html» nuevo. Este fichero contiene el texto «Hola Hugo. Ruta conectada.». También, utilizamos la opción -d para mantener la conexión en segundo plano y -p para redirigir el puerto.

Ahora, vamos a modificar el fichero index.html de mi equipo local para ver como cambia el contenido en el contenedor.

Con estos comando, ya podemos realizar acciones sobre nuestros contenedores. En próximas guías, veremos como ejecutar contenedores utilizando Docker Files y otros métodos.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.