awesome-compose/nginx-nodejs-redis/README.md

121 lines
2.9 KiB
Markdown
Raw Normal View History

## Compose sample application
### Node.js application with Nginx proxy and a Redis database
Project structure:
```
.
├── docker-compose.yml
├── nginx
│   ├── Dockerfile
│   └── nginx.conf
├── web
│   ├── Dockerfile
│   ├── package.json
│   └── server.js
├── web1
│   ├── Dockerfile
│   ├── package.json
│   └── server.js
└── web2
├── Dockerfile
├── package.json
└── server.js
4 directories, 12 files
```
[_docker-compose.yaml_](docker-compose.yaml)
```
version: '3.9'
services:
redis:
image: 'redis:alpine'
ports:
- '6379:6379'
web1:
restart: on-failure
build: ./web1
ports:
- '81:5000'
web2:
restart: on-failure
build: ./web2
ports:
- '82:5000'
nginx:
build: ./nginx
ports:
- '80:80'
depends_on:
- web1
- web2
```
The compose file defines an application with four services `redis`, `web`, `web1` and `web2`.
When deploying the application, docker-compose maps port 80 of the web service container to port 80 of the host as specified in the file.
Redis runs on default port 6379. Make sure port 6379 on the host is not being used by another container, otherwise the port should be changed.
## Deploy with docker-compose
```
$ docker-compose up -d
```
```
Creating nginx-nodejs-redis_redis_1 ... done
Creating nginx-nodejs-redis_web1_1 ... done
Creating nginx-nodejs-redis_web2_1 ... done
Creating nginx-nodejs-redis_nginx_1 ... done
```
## Expected result
Listing containers must show three containers running and the port mapping as below:
```
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
nginx-nodejs-redis_nginx_1 /docker-entrypoint.sh ngin Up 0.0.0.0:80->80/tcp
...
nginx-nodejs-redis_redis_1 docker-entrypoint.sh redis Up 0.0.0.0:6379->6379/tcp
...
nginx-nodejs-redis_web1_1 docker-entrypoint.sh npm Up 0.0.0.0:81->5000/tcp
start
nginx-nodejs-redis_web2_1 docker-entrypoint.sh npm Up 0.0.0.0:82->5000/tcp
start
```
## Testing the app
After the application starts, navigate to `http://localhost:80` in your web browser or run:
```
curl localhost:80
curl localhost:80
web1: Total number of visits is: 1
```
```
curl localhost:80
web1: Total number of visits is: 2
```
```
$ curl localhost:80
web2: Total number of visits is: 3
```
```
$ curl localhost:80
web2: Total number of visits is: 4
```
## Stop and remove the containers
```
$ docker-compose down
```