Dockerfiles
Vamos a probar Docker con un ejemplo con php y dockerfiles con mariaDB.
Última actualización
Vamos a probar Docker con un ejemplo con php y dockerfiles con mariaDB.
Última actualización
Un Dockerfile es un archivo de texto que contiene una serie de instrucciones para construir una imagen de Docker. Estas instrucciones describen cómo configurar un entorno desde cero (o a partir de una imagen base) para ejecutar una aplicación específica. Es la base para automatizar la creación de imágenes Docker.
Imagen de Docker: Una imagen es una plantilla que contiene todo lo necesario para ejecutar una aplicación: sistema operativo, dependencias, librerías, y la propia aplicación.
Contenedor de Docker: Es una instancia ejecutable de una imagen, funcionando de manera aislada.
El Dockerfile es donde defines cómo se crea la imagen, paso a paso.
Cuando ejecutas un comando como docker build
, Docker:
Lee el Dockerfile línea por línea.
Construye una imagen Docker siguiendo las instrucciones del archivo.
Crea una capa en la imagen por cada instrucción del Dockerfile:
Estas capas se almacenan en caché para optimizar futuras construcciones.
Si el contenido de una capa no cambia, se reutiliza en lugar de reconstruirse.
Finalmente, obtienes una imagen que puedes usar para lanzar contenedores.
Un Dockerfile tiene una serie de instrucciones clave que definen cómo construir la imagen. Aquí está un desglose de las más comunes:
1. Especificar una imagen base
La imagen base es el punto de partida para tu imagen. Por ejemplo:
Esto indica que usarás la imagen oficial de Python 3.10 en su versión minimalista como base.
2. Agregar metadatos (opcional)
Puedes agregar información sobre la imagen usando etiquetas como:
3. Copiar archivos al contenedor
Para copiar archivos desde tu máquina al contenedor:
Esto copia el contenido de la carpeta app/
en tu máquina al directorio /app/
dentro de la imagen.
4. Ejecutar comandos durante la construcción
Puedes instalar dependencias, descargar archivos o configurar el sistema operativo usando RUN
:
Cada comando crea una nueva capa en la imagen.
5. Configurar el directorio de trabajo
El comando WORKDIR
establece el directorio en el que se ejecutarán los comandos posteriores:
6. Definir variables de entorno
Puedes configurar variables de entorno dentro del contenedor:
7. Exponer puertos
Indica qué puertos estarán disponibles para conexiones externas:
8. Definir el comando de inicio
Usa CMD
para definir el comando que se ejecutará cuando se inicie el contenedor:
O usa ENTRYPOINT
si quieres que ciertos comandos sean fijos, permitiendo añadir parámetros adicionales al ejecutar el contenedor:
A continuación tienes todos los argumentos que puede admitir un dockerfile
:
Para evitar que el comando que se escribe en el Para mitigar estos errores, se puede crear un archivo llamado Dockerfile
con la configuración que queramos tener en el contenedor:
Vamos a revisar como funciona Dockerfile creando un contenedor de MySQL.
Dentro de este archivo escribiremos:
Donde:
FROM
: Le indica la imagen que se va a usar en el contenedor, en este caso MySQL oficial en última versión
ENV
: Hace referencia a variables de entorno del contenedor que se configurarán al iniciarse.
EXPOSE
: Indica el puerto en el que será visible, en este caso el de por defecto de mysql. Este es importante para conectar luego las apps cliente.
A continuación tienes algunos parámetros más comunes de un fichero dockerfile:
FROM
FROM mysql
Indica la imagen base desde la que se construye.
ENV
ENV HOME=/home/app
WORKDIR
WORKDIR /home/app
Indica el directorio de trabajo para los siguientes comandos.
COPY
COPY *.txt /doc/
Copia archivos desde el anfitrión al contenedor
VOLUME
VOLUME /myvol1
Crea un punto de montaje accesible por otros contenedores.
RUN
RUN npm install
Ejecuta un comando en el contenedor.
EXPOSE
EXPOSE 3000
Abre un puerto para ese contenedor.
ARG
ARG NAME
Indicamos el argumento que deseamos para nuestra imagen. Con esto le decimos: esperará un argumento personalizado al momento de crear la imagen.
Ahora toca construir el contenedor en si según los parámetros definidos, para ello ejecutamos:
Al final del proceso obtendremos un codigo que será el ID de la imagen de docker o puedes listar las imágenes como hemos visto antes.
Al ejecutar la imagen en un contenedor se puede verificar la versión de MySQL y, como tenemos los datos de conexión, entrar a verificar las bases de datos creadas por defecto. Ejecute el comando sustituyendo [IMAGE ID] por el valor que tiene su imagen:
Esto lanzará el docker en segundo plano.
Para hacer la conexión a la base de datos tendrá que ejecutar lo siguiente:
Tras acceder al shell del contenedor, ya puedes hacer pequeñas comprobaciones:
El segundo comando te permitirá acceder mediante el usuario root
al CLI de mysql teniendo que poner la contraseña antes descrita. Si se realiza correctamente la conexión, se mostrará una información de bienvenida.
Para comprobar las bases de datos que están creadas, incluida la configurada en el Dockerfile, se puedes escribir:
Referencia:
Creamos el archivo dockerfile en una carpeta recién creada que queramos como la que hemos creado en la guía de donde tenemos creado el volumen llamado "wordpress-db
":
VOLUME
: Se crea una zona fuera del contenedor para almacenar el contenido de la ruta escrita. Esto se hace para almacenar los datos (de mysql en este caso) incluso si se borra o para el contenedor. Tienes la explicación de donde ha salido de la .
Añade una variable de entorno. Las variables de entorno las puedes encontrar en las páginas respectivas del .
Docker labs: