¿Que es docker y como usarlo para ejecutar contenedores?
¿Qué es Docker?Docker ha acelerado el mundo de la tecnología, una gestión eficiente de aplicaciones y servicios es clave para el éxito. Docker, una potente herramienta de containerización, ha revolucionado la manera en que se despliegan las aplicaciones en entornos variados. En este artículo, exploraremos qué es Docker, cómo se utiliza, sus principales beneficios, los sistemas operativos compatibles, el archivo Dockerfile, Docker Compose, los volúmenes persistentes y, en general, el propósito de utilizar contenedores para optimizar el desarrollo y la implementación de aplicaciones.
Docker es una plataforma de containerization que permite empaquetar, distribuir y ejecutar aplicaciones de manera consistente en distintos entornos. En lugar de depender de las diferencias entre sistemas operativos y configuraciones, Docker encapsula una aplicación y sus dependencias en un contenedor, garantizando que se ejecute de manera idéntica en cualquier entorno compatible con Docker.
¿Cómo se utiliza Docker?
El proceso de utilizar Docker generalmente sigue estos pasos:
- Creación de un Dockerfile:El Dockerfile es un archivo de texto que contiene las instrucciones necesarias para construir una imagen de Docker. Esta imagen es un paquete ligero y ejecutable que incluye la aplicación junto con sus dependencias. Las instrucciones dentro del Dockerfile detallan cómo se debe configurar y preparar la imagen para su ejecución.
- Instalación de Docker:Antes de comenzar, es necesario instalar Docker en el sistema. Docker es compatible con varios sistemas operativos, como Linux, Windows y macOS. Aunque el proceso de instalación puede variar según el sistema operativo, generalmente se puede realizar descargando e instalando Docker desde su sitio web oficial.
dockerfile:
Ejemplo de un Dockerfile básico para una aplicación Node.js FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]
3. Construcción de la Imagen:
Utilizando el comando `docker build`, se construye una imagen a partir del Dockerfile. Este proceso puede llevarse a cabo en cualquier sistema compatible con Docker y garantiza que la aplicación se empaquete correctamente con todas sus dependencias.
4. **Ejecución del Contenedor:**
Una vez construida la imagen, se puede ejecutar un contenedor utilizando el comando `docker run`. Esto instancia el contenedor basado en la imagen creada, poniendo en marcha la aplicación encapsulada.
```bash
docker run -p 8080:80 my-app
```
En este ejemplo, se mapea el puerto 8080 del sistema host al puerto 80 del contenedor.
5 Beneficios de Utilizar Docker:
- Portabilidad:
Los contenedores de Docker son portátiles y pueden ejecutarse en cualquier entorno compatible con Docker, independientemente de las diferencias en el sistema operativo o la configuración. - Aislamiento:
Cada contenedor encapsula una aplicación y sus dependencias, proporcionando un entorno aislado. Esto previene conflictos entre aplicaciones y facilita la gestión de dependencias. - Escalabilidad:
Docker facilita la escalabilidad horizontal, permitiendo la replicación y distribución de contenedores para manejar cargas de trabajo más grandes. - Rapidez:
La creación, distribución y ejecución de contenedores son procesos rápidos debido a su naturaleza liviana. Esto acelera el ciclo de desarrollo y despliegue de aplicaciones. - Versionado:
Las imágenes de Docker son versionadas, lo que permite gestionar y controlar las versiones de las aplicaciones de manera efectiva.
Sistemas Operativos Compatibles con Docker
Docker es compatible con una amplia variedad de sistemas operativos, incluyendo, pero no limitándose a:
- Linux: Docker es nativo en sistemas Linux y puede ejecutarse sin virtualización adicional.
- Windows: Docker Desktop proporciona una experiencia completa de Docker en sistemas Windows 10 y Windows Server 2016 en adelante.
- macOS: Docker Desktop también es compatible con macOS, permitiendo la ejecución de contenedores en entornos macOS.
Archivo Dockerfile
Un Dockerfile es esencial en el proceso de creación de imágenes de Docker. Contiene un conjunto de instrucciones que Docker sigue para construir una imagen. Algunas de las instrucciones comunes incluyen `FROM` (especifica la imagen base), `COPY` (copia archivos al sistema de archivos del contenedor), `RUN` (ejecuta comandos durante la construcción), y `CMD` (define el comando predeterminado que se ejecuta al iniciar el contenedor).
Archivo Docker Compose
Docker Compose es una herramienta que facilita la definición y gestión de aplicaciones multi-contenedor. Se utiliza un archivo `docker-compose.yml` para especificar la configuración de la aplicación, incluyendo servicios, redes y volúmenes. Esto simplifica la ejecución de aplicaciones complejas que involucran varios contenedores.
Un ejemplo de un archivo docker-compose.yml para una aplicación web con un servidor backend y una base de datos podría ser:
yaml
version: '3'
services:
web:
image: my-web-app
ports:
- "8080:80"
database:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
Con un simple comando `docker-compose up`, Docker Compose instanciará ambos contenedores según la configuración proporcionada.
Volúmenes Persistentes en Docker
Un volumen persistente en Docker es una solución de almacenamiento que permite que los datos se conserven más allá del ciclo de vida de un contenedor. Mientras que los sistemas de archivos dentro de un contenedor son temporales, los volúmenes aseguran la persistencia de los datos. Esto resulta crucial para aplicaciones que requieren almacenamiento duradero, como bases de datos o sistemas de archivos compartidos entre contenedores.
Finalidad de Utilizar Contenedores
El propósito de los contenedores es proporcionar un entorno de ejecución consistente, eficiente y portátil para las aplicaciones. Al encapsular una aplicación junto con todas sus dependencias en un contenedor, se logran beneficios clave como la portabilidad, el aislamiento, la escalabilidad y la eficiencia en el desarrollo y despliegue de software.
Ejemplos de arquitectura en contenedores:
La imagen muestra un archivo Dockerfile. Este tipo de archivo es fundamental para construir imágenes de Docker, que son como plantillas para crear contenedores. Los contenedores son entornos aislados donde se ejecutan aplicaciones de forma consistente en cualquier sistema operativo.
Vamos a desglosar el contenido de este Dockerfile en particular:
FROM php:8.0.0-apache
- Inicia la construcción de la imagen: Indica que la nueva imagen se basará en una imagen existente de PHP versión 8.0.0 con un servidor web Apache preinstalado. Esto significa que nuestra nueva imagen heredará todas las características y paquetes de la imagen base.
Configuración inicial
ARG DEBIAN_FRONTEND=noninteractive
: Define una variable de entorno que se utilizará durante la construcción de la imagen. En este caso, se establece para evitar que se muestren mensajes interactivos durante la instalación de paquetes.RUN docker-php-ext-install mysqli
: Instala la extensión de MySQL para PHP. Esto permite que las aplicaciones que se ejecuten en el contenedor puedan interactuar con bases de datos MySQL.
Comentarios
# Include alternative DB driver
: Un comentario que indica que se podrían incluir extensiones para otros gestores de bases de datos, como PDO (PHP Data Objects).# RUN docker-php-ext-install pdo
: Un comentario que muestra una línea que podría utilizarse para instalar la extensión PDO.# RUN docker-php-ext-install pdo_mysql
: Otro comentario que muestra una línea para instalar la extensión PDO específica para MySQL.
Instalación de paquetes adicionales
RUN apt-get update && apt-get install -y sendmail libpng-dev ...
: Una serie de comandos que actualizan el gestor de paquetesapt
e instalan diversos paquetes necesarios para el funcionamiento de las aplicaciones PHP, comosendmail
,libpng-dev
(para manipulación de imágenes),libzip-dev
(para trabajar con archivos ZIP),zlib1g-dev
(para compresión),libonig-dev
(para expresiones regulares), y otros.&& rm -rf /var/lib/apt/lists/*
: Elimina los archivos de caché deapt
para reducir el tamaño de la imagen final.
Instalación de extensiones PHP adicionales
RUN docker-php-ext-install zip mbstring gd
: Instala las extensiones ZIP, MBString (para manejo de cadenas de caracteres multibyte) y GD (para manipulación de imágenes).
Configuración del servidor Apache
RUN a2enmod rewrite
: Habilita el módulo de reescritura de URL en Apache. Esto es útil para implementar enrutamiento personalizado en aplicaciones web.
En resumen, este Dockerfile crea una imagen de Docker que contiene un entorno PHP 8.0 con Apache y todas las extensiones y paquetes necesarios para ejecutar aplicaciones PHP que requieran interactuar con bases de datos MySQL, manipular imágenes, trabajar con archivos ZIP, y más.
Qué es un archivo docker-compose.yml
?
Es un archivo de configuración que se utiliza para definir y ejecutar aplicaciones multi-contenedor de Docker. En pocas palabras, nos permite definir todos los servicios (contenedores) que componen nuestra aplicación y cómo se relacionan entre sí.
Análisis del archivo:
Línea 1: services:
- Indica el inicio de la definición de los servicios.
Líneas 2-19: db:
- Definición del servicio de base de datos:
image: mysql:8.0
: Especifica que la imagen base para este servicio es MySQL versión 8.0.platform: linux/amd64
: Indica que la plataforma objetivo es Linux de 64 bits.container_name: mysql
: Asigna un nombre al contenedor.ports: "3306:3306"
: Mapea el puerto 3306 del host al puerto 3306 del contenedor, lo que permite conectarse a la base de datos desde el exterior.command: --default-authentication-plugin=mysql_native_password
: Establece el método de autenticación por defecto para MySQL.environment:
: Define variables de entorno para la base de datos:MYSQL_DATABASE
: Nombre de la base de datos.MYSQL_PASSWORD
: Contraseña del usuario principal.MYSQL_USER
: Nombre de usuario.MYSQL_ROOT_PASSWORD
: Contraseña del usuario root.
volumes:
: Monta volúmenes para persistir datos:vol_db:/dump:/docker-entrypoint-initdb.d
: Monta un volumen para almacenar scripts de inicialización de la base de datos.vol_db:/conf:/etc/mysql/conf.d
: Monta un volumen para personalizar la configuración de MySQL.vol_db:/var/lib/mysql
: Monta un volumen para almacenar los datos de la base de datos.
networks: wpsite
: Conecta el contenedor a una red llamadawpsite
.
¿Qué es un archivo .env?
Un archivo .env
es un simple archivo de texto que contiene pares clave-valor. Estos pares representan variables de entorno que pueden ser utilizadas en los servicios definidos en un archivo docker-compose.yml
. La principal ventaja de utilizar archivos .env
es que separamos la configuración de la aplicación de la definición de los servicios, lo que facilita la gestión y la actualización de las variables de entorno.
Análisis del contenido del archivo .env
:
En el ejemplo que nos muestras, el archivo .env
contiene las siguientes variables de entorno:
- Variables relacionadas con la base de datos:
DATABASE_CLIENT=mysql
: Indica que se está utilizando MySQL como cliente de base de datos.DATABASE_HOST=db
: Especifica el nombre del host donde se encuentra la base de datos.DATABASE_PORT=3306
: Define el puerto de conexión a la base de datos (el puerto estándar para MySQL).DATABASE_NAME=saedb
: Indica el nombre de la base de datos.DATABASE_USERNAME=root
: Especifica el nombre de usuario para la base de datos.DATABASE_PASSWORD=test
: Define la contraseña del usuario de la base de datos.
- Variables relacionadas con el entorno de la aplicación:
NODE_ENV=production
: Indica que la aplicación se encuentra en modo de producción.APP_ENVIRONMENT=production
: Otra variable que confirma que el entorno es de producción.
¿Cómo se utilizan estas variables en docker-compose.yml
?
En el archivo docker-compose.yml
correspondiente, puedes hacer referencia a estas variables utilizando la sintaxis ${VARIABLE_NAME}
. Por ejemplo, si tienes un servicio llamado "web" en tu docker-compose.yml
, podrías definir una variable de entorno para la aplicación web de la siguiente manera:
services:
web:
environment:
- DATABASE_URL=mysql://${DATABASE_USERNAME}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}
En resumen:
Este archivo docker-compose.yml
define un servicio de base de datos MySQL con las siguientes características:
- Imagen base: MySQL 8.0 para Linux de 64 bits.
- Puerto expuesto: 3306.
- Credenciales: Se establecen usuarios y contraseñas para la base de datos.
- Volúmenes: Se montan volúmenes para persistir datos y configuración.
- Red: El contenedor se conecta a una red llamada
wpsite
.
¿Para qué sirve este archivo?
Este archivo se utiliza para crear y administrar una instancia de MySQL en un contenedor Docker. Al ejecutar el comando docker-compose up -d
, se creará el contenedor con todas las configuraciones especificadas en el archivo. Esto es útil para desarrollar y desplegar aplicaciones que requieren una base de datos MySQL.
Ejecucion de docker compose
Para iniciar tus aplicaciones a partir de los contenedores definidos en docker-compose.yaml
, sigue estos pasos:
- Ubica tu proyecto:
- Abre una terminal o línea de comandos en la carpeta donde se encuentran los archivos
docker-compose.yaml
,Dockerfile
y.env
. Estos archivos son esenciales para configurar y ejecutar tu aplicación en Docker.
- Abre una terminal o línea de comandos en la carpeta donde se encuentran los archivos
- Descarga las imágenes:
- Ejecuta el siguiente comando en la terminal:
docker-compose pull
- Este comando se encargará de descargar todas las imágenes de Docker necesarias para construir los contenedores según lo especificado en el archivo
docker-compose.yaml
.
- Ejecuta el siguiente comando en la terminal:
- Inicia los contenedores:
- Una vez descargadas las imágenes, ejecuta el siguiente comando:
docker-compose up -d
. Este comando creará y iniciará los contenedores definidos en tu archivodocker-compose.yaml
en modo desacoplado (-d
), lo que significa que los contenedores se ejecutarán en segundo plano y podrás seguir utilizando la terminal.
- Una vez descargadas las imágenes, ejecuta el siguiente comando:
¿Qué hace cada archivo?
docker-compose.yaml
: Define los servicios (contenedores) de tu aplicación, sus imágenes, redes, volúmenes y otras configuraciones.Dockerfile
: Contiene las instrucciones para construir una imagen de Docker personalizada..env
: Almacena variables de entorno que pueden ser utilizadas en el archivodocker-compose.yaml
y en los contenedores.
¡Y listo! Con estos pasos, habrás iniciado tu aplicación en un entorno de contenedores de Docker. Puedes verificar el estado de tus contenedores utilizando el comando docker ps
.
Nota: Si deseas detener todos los contenedores, puedes ejecutar docker-compose down
.
Aqui se empezar hacer el pull de los contenedores.
Despues se empezaran a crear los contenedores.
Puedes ver los contenedores desde la aplicacion de docker en ejecución:
Conclusión
Docker ha transformado la manera en que se desarrollan, distribuyen y ejecutan las aplicaciones. Su capacidad para garantizar consistencia en diferentes entornos, así como para simplificar la gestión de aplicaciones, lo convierte en una herramienta indispensable en el panorama tecnológico actual.
DESCARGAR ARCHIVOS DE DOCKER FILE
Te recomendamos leer:
Deja tu cometario!