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 --versionDeberí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 archivoDockerfileubicado 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.