Configuración del servidor Docker
Iniciaservidores de base de datos con un solo comando
Configuración del Servidor Docker
Nota histórica: esta es una referencia de desarrollo local de 2015. Es útil para comprender el flujo de trabajo antiguo, pero no trate estos fragmentos como consejo de producción actual. Los archivos modernos de Docker Compose, redes personalizadas, versiones de imágenes fijadas, autenticación, secretos y automatización de actualizaciones revisada son valores predeterminados más seguros hoy en día.
¿Para quién es esta guía?
- ¿Alguna vez quiso probar una aplicación con una base de datos “desechable”?
- ¿Heredó una base de código sospechosa? ¿Prefiere no compartir acceso a su base de datos existente?
- ¿Trabaja con clientes sensibles a la seguridad? ¡No arriesgue la contaminación cruzada! Use contenedores y controle la persistencia de datos.
- ¿No puede actualizar su entorno de desarrollo a la última versión de la base de datos porque sus aplicaciones heredadas dependen de una versión de MySQL de hace 12 años?
¡Nunca deje que esas razones le vuelvan a bloquear el camino!
Enlaces rápidos a los comandos de una línea
Esta artículo presenta comandos de una sola línea para iniciar algunas de las bases de datos más populares, incluyendo:
Nota: Estos comandos fueron escritos como atajos para desarrollo local. Si los adapta para producción, añada autenticación, gestión de secretos, copias de seguridad, políticas de red, imágenes con versiones fijas y un plan de actualizaciones primero.
Usuarios avanzados de Docker: Si está familiarizado con
docker-composepuede que quiera convertir los comandos de shell a su archivodocker-compose.yml.
Servidor Postgres
Inicie un contenedor, nombrándolo
pg-localhost
# Almacene los archivos de la base de datos en una ruta local, fuera del contenedormkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'Ajuste las opciones de la línea de comandos según sea necesario. (Los argumentos del demonio de postgres comienzan después del nombre de la imagen Docker
postgres:16-alpine. Véasepostgres -c 'listen_addresses=*'...)
Acceda al prompt de
psqlcomo usuario postgres
docker exec --user postgres -it pg-localhost psqlAcceda al shell del contenedor como root
docker exec -it pg-localhost bashNota: El comando anterior usa las imágenes base oficiales de Alpine Linux. No es el típico entorno Debian.
Para usar la imagen base debian/ubuntu, cambie
postgres:12-alpineporpostgres:12.
Servidor MongoDB
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'Una vez que el servidor esté listo, verifica que los datos estén en $HOME/.mongodb con:
ls -lach $HOME/.mongodbConectémonos al servidor usando la herramienta de línea de comandos mongosh. (Si no la tienes instalada, consulta más abajo.)
#> Usando los argumentos por defecto:mongoshY deberías ver algo similar a esto:

Configurar herramientas CLI de Mongo
Usando brew y macOS
brew tap mongodb/brewbrew install mongodb-community-shellServidor MySQL
ADVERTENCIA: MODIFICA LA CONTRASEÑA EN
MYSQL_ROOT_PASSWORDA CONTINUACIÓN.
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8Servidor ElasticSearch
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs 'Notas de seguridad
NOTA: la opción de puerto del tipo
-p 127.0.0.1:27017:27017impide el acceso a tu instancia salvo desde la red localhost del servidor Docker.
Para “publicar” los puertos expuestos, elimina el prefijo de dirección IP local y permite el acceso externo:-p 27017:27017. Asegúrate de haber tomado las precauciones de seguridad necesarias.
Recomendado: Usa siempre una herramienta de escaneo de puertos (como nmap/masscan) para verificar tu configuración de red (desde un sistema separado en otra red).
Ahora que tienes los comandos para iniciar tus servidores de bases de datos, el siguiente paso es empaquetar tu aplicación como una imagen Docker. La Parte 2 continúa a continuación:
Empaquetando una aplicación web NodeJS
- Añade un archivo vacío llamado
Dockerfileen la raíz de tu proyecto. - (Opcional, recomendado) Añade un
.dockerignoreusando las reglas de.gitignorepara excluir rutas grandes y no esenciales. Por defecto se incluyen todos los archivos del proyecto.
Crear un Dockerfile en la raíz de tu aplicación
# Example for NodeJSFROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# Overridable CommandCMD ["npm", "start"]Resulta más sencillo mostrar cómo iniciar usando el Dockerfile y demostrar los resultados mediante la consola (ver comandos más abajo).
En la terminal, cd a la carpeta de tu proyecto y ejecuta el siguiente comando build cada vez que despliegues cambios — o quieras cambiar/actualizar el SO o la configuración del entorno.
docker build -t app-name-here .Referencia de comandos clave de Docker
Construir imagen Docker
docker build -t app-name-here .Crear/Ejecutar aplicación web con enlaces a servidores de bases de datos
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-hereEjecutar de forma interactiva (no daemon, en la terminal)
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashEliminar instancia de contenedor o imagen
Importante: ¡Cualquier dato que no esté almacenado en un volumen montado se perderá!
# Eliminar imagendocker rmi -f app-name-heredocker rm -f webapp01# ahora vuelve a ejecutar tu `docker run...` desde ^^^# Por ejemplo, para terminar tus instancias de base de datos anteriores, ejecuta: (comienza con algo como `docker stop {mongo,elastic}`)docker rm -f mongo elastic