En este tutorial, te enseñaremos cómo crear un contenedor Docker con NGINX Proxy Manager, phpMyAdmin, MySQL y FastAPI (con Python) utilizando Docker Compose. Esto te permitirá tener una pila completa para el desarrollo web y API en un solo contenedor.
Requisitos previos
Antes de comenzar, necesitarás tener Docker y Docker Compose instalados en tu máquina. Si aún no lo has hecho, sigue los siguientes pasos:
- Descarga e instala Docker Desktop desde el sitio web oficial: https://www.docker.com/products/docker-desktop
- Verifica que Docker se haya instalado correctamente ejecutando el siguiente comando en la terminal:css
docker --version
Deberías ver la versión de Docker que has instalado.
Instala Docker Compose siguiendo las instrucciones en la documentación oficial: https://docs.docker.com/compose/install/
Verifica que Docker Compose se haya instalado correctamente ejecutando el siguiente comando en la terminal:
docker-compose --version
Deberías ver la versión de Docker Compose que has instalado.
Paso 1: Crear el archivo docker-compose.yml
Lo primero que necesitamos hacer es crear un archivo docker-compose.yml
en un nuevo directorio. Puedes hacerlo ejecutando el siguiente comando en la terminal:
mkdir myapp && cd myapp touch docker-compose.yml
Luego, abre el archivo docker-compose.yml
en tu editor de texto favorito y agrega el siguiente contenido:
version: "3.8" services: proxy: image: jlesage/nginx-proxy-manager:latest container_name: proxy restart: always ports: - "80:80" - "443:443" - "81:81" environment: - TZ=America/New_York - PUID=1000 - PGID=1000 volumes: - ./data:/config - ./letsencrypt:/etc/letsencrypt - ./nginx.tmpl:/app/nginx.tmpl:ro phpmyadmin: image: phpmyadmin/phpmyadmin:latest container_name: phpmyadmin restart: always ports: - "8080:80" environment: - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=my-secret-pw mysql: image: mysql:8 container_name: mysql restart: always environment: - MYSQL_ROOT_PASSWORD=my-secret-pw volumes: - mysql-data:/var/lib/mysql app: build: ./app container_name: app restart: always ports: - "8000:8000" environment: - DATABASE_URL=mysql+pymysql://root:my-secret-pw@mysql:3306/mydatabase depends_on: - mysql volumes: mysql-data:
Este archivo define cuatro servicios:
proxy
: utiliza la imagen de NGINX Proxy Manager para manejar la gestión de proxy inverso y la gestión de certificados SSL.phpmyadmin
: utiliza la imagen de phpMyAdmin para proporcionar una interfaz gráfica de usuario para MySQL.mysql
: utiliza la imagen oficial de MySQL para el servidor de base de datos.app
: construye la imagen de la aplicación FastAPI utilizando el archivoDockerfile
ubicado en el directorio./app
.
Paso 2: Crear la aplicación FastAPI
Ahora necesitamos crear la aplicación FastAPI. En este tutorial, utilizaremos un ejemplo simple que muestra cómo conectarse a la base de datos MySQL.
Primero, crea un nuevo directorio app
dentro del directorio myapp
. Luego, crea un archivo app/main.py
con el siguiente contenido:
from fastapi import FastAPI from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker app = FastAPI() DATABASE_URL = "mysql+pymysql://root:my-secret-pw@mysql:3306/mydatabase" engine = create_engine(DATABASE_URL) SessionLocal = sessionmaker(bind=engine) @app.get("/") async def root(): return {"message": "Hello World"}
Este archivo define una aplicación FastAPI básica con una ruta raíz que devuelve un mensaje de saludo.
Luego, crea un archivo app/Dockerfile
con el siguiente contenido:
FROM python:3.9 WORKDIR /app COPY requirements.txt ./ RUN pip install -r requirements.txt COPY ./app . CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Este archivo define la imagen Docker para nuestra aplicación FastAPI, que utiliza Python 3.9 y se ejecuta en el puerto 8000.
Finalmente, crea un archivo app/requirements.txt
con el siguiente contenido:
fastapi uvicorn SQLAlchemy pymysql
Este archivo define las dependencias de nuestra aplicación, que incluyen FastAPI, Uvicorn, SQLAlchemy y PyMySQL.
Paso 3: Ejecutar el contenedor Docker
Ahora estamos listos para ejecutar el contenedor Docker utilizando Docker Compose.
Para hacerlo, asegúrate de que te encuentras en el directorio myapp
y ejecuta el siguiente comando en la terminal:
docker-compose up -d
Este comando iniciará los cuatro servicios definidos en el archivo docker-compose.yml
en modo detached, lo que significa que se ejecutarán en segundo plano.
Una vez que los contenedores estén en ejecución, puedes acceder a las siguientes URL desde tu navegador web:
- NGINX Proxy Manager: http://localhost:81
- phpMyAdmin: http://localhost:8080
- FastAPI: http://localhost:8000
Conclusión
En este tutorial, aprendiste cómo crear un contenedor Docker que incluye NGINX Proxy Manager, phpMyAdmin, MySQL y FastAPI. Utilizando Docker Compose, pudiste definir y ejecutar todos estos servicios en un solo comando. Este enfoque te permite crear aplicaciones web y API más complejas en un entorno controlado y escalable.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.