Guía de inicio rápido de Docker: Comienza a contenerizar tus aplicaciones
# Guía de inicio rápido de Docker: Comienza a contenerizar tus aplicaciones
Docker se ha convertido en una parte indispensable del desarrollo e implementación de software moderno. A pesar de la avalancha de discusiones en torno a Kubernetes, Docker sigue siendo la herramienta preferida por muchas empresas para construir, probar e implementar aplicaciones. Este artículo te guiará a través de una introducción rápida a Docker, comprenderás sus conceptos centrales y te proporcionará un ejemplo práctico para ayudarte a comenzar a contenerizar tus aplicaciones.
## Conceptos centrales de Docker
Antes de comenzar a practicar, es fundamental comprender algunos de los conceptos centrales de Docker:
* **Imagen (Image):** Una imagen es una plantilla de solo lectura que contiene todo lo necesario para ejecutar una aplicación: código, entorno de tiempo de ejecución, herramientas del sistema, bibliotecas y dependencias. Similar a una imagen de máquina virtual, pero más ligera.
* **Contenedor (Container):** Un contenedor es una instancia en ejecución creada a partir de una imagen. Es una instancia en tiempo de ejecución de una imagen, que contiene la aplicación y todas sus dependencias. Los contenedores están aislados entre sí y tienen su propio sistema de archivos, procesos y espacio de red.
* **Docker Hub:** Docker Hub es un registro de imágenes público donde puedes descargar imágenes preconstruidas o cargar tus propias imágenes. Similar a GitHub, pero especializado en imágenes de Docker.
* **Dockerfile:** Un Dockerfile es un archivo de texto que contiene todas las instrucciones para construir una imagen de Docker. Al escribir un Dockerfile, puedes automatizar el proceso de creación de imágenes.
* **Docker Compose:** Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores. Te permite usar un archivo YAML para configurar los servicios de la aplicación y luego usar un solo comando para iniciar o detener todos los servicios.
## Instalación de Docker
Primero, debes instalar Docker. Docker proporciona paquetes de instalación para varios sistemas operativos. Visita el [sitio web oficial de Docker](https://www.docker.com/get-started/) y sigue las instrucciones correspondientes para la instalación.
Una vez completada la instalación, puedes verificar si Docker está instalado correctamente ejecutando el comando `docker --version`.
## Contenerización de una aplicación Python simple
Crearemos una aplicación Python simple y la contenerizaremos usando Docker.
### 1. Crear la aplicación Python
Crea un archivo llamado `app.py` que contenga el siguiente código:
```python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
Esta sencilla aplicación Flask devolverá "Hello, Docker!" en la ruta raíz /.
2. Crear el archivo requirements.txt
La aplicación depende de la biblioteca Flask, necesitamos crear un archivo requirements.txt para declarar estas dependencias.
Flask
3. Crear el Dockerfile
Crea un archivo llamado Dockerfile y agrega el siguiente contenido:
# Usar la imagen oficial de Python como imagen base
FROM python:3.9-slim-buster
# Establecer el directorio de trabajo
WORKDIR /app
# Copiar el archivo requirements.txt al directorio de trabajo
COPY requirements.txt .
# Instalar las dependencias
RUN pip install --no-cache-dir -r requirements.txt
```# Copiar el código de la aplicación al directorio de trabajo
COPY app.py .
# Exponer el puerto 5000
EXPOSE 5000
# Definir el comando de inicio
CMD ["python", "app.py"]
Explicación del Dockerfile:
FROM python:3.9-slim-buster: Especifica la imagen base como una versión reducida de Python 3.9.WORKDIR /app: Establece el directorio de trabajo dentro del contenedor como/app.COPY requirements.txt .: Copia el archivorequirements.txtdel directorio actual al directorio/appdel contenedor.RUN pip install --no-cache-dir -r requirements.txt: Ejecuta el comandopipdentro del contenedor para instalar las dependencias especificadas en el archivorequirements.txt. El parámetro--no-cache-dirpuede reducir el tamaño de la imagen.COPY app.py .: Copia el archivoapp.pydel directorio actual al directorio/appdel contenedor.EXPOSE 5000: Declara que el contenedor escuchará en el puerto 5000.CMD ["python", "app.py"]: Define el comando que se ejecutará cuando se inicie el contenedor.
4. Construir la imagen de Docker
En el directorio que contiene el Dockerfile, ejecuta el siguiente comando para construir la imagen de Docker:
docker build -t my-python-app .
docker build: El comando para construir la imagen.-t my-python-app: Asigna un nombre a la imagen (my-python-app)..: Especifica el directorio donde se encuentra el Dockerfile (el directorio actual).
El proceso de construcción puede tardar un tiempo, dependiendo de la velocidad de la red y el tamaño de las dependencias.
5. Ejecutar el contenedor de Docker
Utiliza el siguiente comando para ejecutar el contenedor de Docker:
docker run -d -p 5000:5000 my-python-app
docker run: El comando para ejecutar el contenedor.-d: Ejecuta el contenedor en modo detached (en segundo plano).-p 5000:5000: Mapea el puerto 5000 del host al puerto 5000 del contenedor.my-python-app: Especifica el nombre de la imagen a utilizar.
6. Verificar la aplicación
En un navegador, visita http://localhost:5000. Deberías ver "Hello, Docker!".
7. Detener y eliminar el contenedor
Utiliza el siguiente comando para detener el contenedor:
docker stop
`` Puedes encontrar el mediante el comando docker ps.
Utiliza el siguiente comando para eliminar el contenedor:
docker rm
Introducción a Docker Compose
Si tu aplicación está compuesta por múltiples servicios, puedes utilizar Docker Compose para gestionarlos.
1. Crear el archivo docker-compose.yml
Crea un archivo llamado docker-compose.yml y añade el siguiente contenido:
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
Explicación de docker-compose.yml:* version: "3.9": Especifica la versión del archivo Docker Compose.
services: Define los servicios de la aplicación.web: Define un servicio llamado "web".image: my-python-app: Especifica la imagen que utiliza el servicio.ports: Define el mapeo de puertos.
2. Iniciar la aplicación
En el directorio que contiene el archivo docker-compose.yml, ejecuta el siguiente comando para iniciar la aplicación:
docker-compose up -d
docker-compose up: Comando para iniciar la aplicación.-d: Ejecuta el contenedor en modo detached (en segundo plano).
3. Detener la aplicación
Utiliza el siguiente comando para detener la aplicación:
docker-compose down
Mejores prácticas de seguridad de Docker
Como se puede ver en la discusión, la seguridad de las imágenes de Docker es un problema importante. A continuación, se presentan algunas de las mejores prácticas de seguridad de Docker:
- Usar imágenes oficiales: Siempre que sea posible, utiliza las imágenes proporcionadas oficialmente, ya que estas imágenes generalmente se someten a escaneos de seguridad y mantenimiento.
- Escanear vulnerabilidades en las imágenes: Utiliza herramientas como Trivy para escanear las imágenes en busca de vulnerabilidades conocidas y actualiza las imágenes de manera oportuna.
- Usar el principio de mínimo privilegio: Evita ejecutar contenedores como usuario root.
- Limitar los recursos del contenedor: Utiliza cgroups para limitar el uso de CPU y memoria del contenedor.
- Actualizar las imágenes periódicamente: Mantén las imágenes actualizadas para corregir las vulnerabilidades de seguridad.
- Usar herramientas de escaneo de seguridad: Herramientas como Snyk, Clair, etc., se pueden integrar en tu flujo de CI/CD para escanear automáticamente las vulnerabilidades de las imágenes.





