Este es un proyecto básico de ExpressJS con Docker y MySQL.
- Node.js
- Docker
- Docker Compose
-
Clona el repositorio:
git clone https://github.com/yourusername/docker-node-template.git cd docker-node-template -
Crea un archivo
.envbasado en el archivo.env.template:cp .env.template .env
-
Actualiza el archivo
.envcon tus variables de entorno. -
Construye y ejecuta los contenedores Docker:
docker-compose up
- La aplicación estará disponible en
http://localhost:3000. - phpMyAdmin estará disponible en
http://localhost:8080.
GET /- Devuelve "Hello, World!"GET /ping- Devuelve la marca de tiempo actual de la base de datos
my-express-app/
├── src/
│ ├── controllers/
│ │ └── exampleController.js
│ ├── models/
│ │ └── exampleModel.js
│ ├── routes/
│ │ └── exampleRoutes.js
│ ├── middlewares/
│ │ └── exampleMiddleware.js
│ ├── config/
│ │ └── database.js
│ ├── app.js
│ └── index.js
├── .env
├── .env.template
├── docker-compose.yml
├── docker-compose.prod.yml
├── Dockerfile
├── package.json
└── README.md
version: "3.8"
services:
mysqldb:
image: mysql:5.7
env_file: ./.env
environment:
- MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
- MYSQL_DATABASE=$MYSQLDB_DATABASE
- MYSQL_USER=$MYSQLDB_USER
- MYSQL_PASSWORD=$MYSQLDB_PASSWORD
ports:
- $MYSQLDB_LOCAL_PORT:$MYSQLDB_DOCKER_PORT
logging:
driver: none
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- mysqldb
environment:
- PMA_HOST=mysqldb
- MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
ports:
- 8080:80
app:
depends_on:
- mysqldb
- phpmyadmin
links:
- mysqldb
build: .
env_file: ./.env
ports:
- $NODE_LOCAL_PORT:$NODE_DOCKER_PORT
volumes:
- .:/myapp
command: sh -c "npm install && npm run dev"version: "3.8"
services:
mysqldb:
image: mysql:5.7
env_file: ./.env
environment:
- MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
- MYSQL_DATABASE=$MYSQLDB_DATABASE
- MYSQL_USER=$MYSQLDB_USER
- MYSQL_PASSWORD=$MYSQLDB_PASSWORD
ports:
- $MYSQLDB_LOCAL_PORT:$MYSQLDB_DOCKER_PORT
logging:
driver: none
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- mysqldb
environment:
- PMA_HOST=mysqldb
- MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
ports:
- 8080:80
app:
depends_on:
- mysqldb
- phpmyadmin
links:
- mysqldb
build: .
env_file: ./.env
ports:
- $NODE_LOCAL_PORT:$NODE_DOCKER_PORT
environment:
- DB_HOST=$MYSQLDB_HOST
- DB_USER=$MYSQLDB_USER
- DB_PASSWORD=$MYSQLDB_PASSWORD
- DB_NAME=$MYSQLDB_DATABASE
- DB_PORT=$MYSQLDB_DOCKER_PORTCrea un archivo .env en el directorio raíz con el siguiente contenido:
MYSQLDB_USER=newuser
MYSQLDB_PASSWORD=newpassword
MYSQLDB_ROOT_PASSWORD=root
MYSQLDB_DATABASE=mydatabase
MYSQLDB_LOCAL_PORT=3306
MYSQLDB_DOCKER_PORT=3306
NODE_LOCAL_PORT=3000
NODE_DOCKER_PORT=3000
MYSQLDB_HOST=mysqldbFROM node:14
WORKDIR /myapp
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]