First, lets create a network to make all the containers accesible by name.
# docker network create <network-name>
docker network create nginx-network- Run an
App1binded tonginx-network
docker run \
--name app1 \
--net nginx-network \
-d \
-w /usr/src/app \
-v $(pwd)/app:/usr/src/app \
-p 3001:3000 \
mhart/alpine-node \
node server.js- Run an
App2binded tonginx-network
docker run \
--name app2 \
--net nginx-network \
-d \
-w /usr/src/app \
-v $(pwd)/app:/usr/src/app \
-p 3002:3000 \
mhart/alpine-node \
node server.jsCreating a nginx config for each app, inside the conf.d
- Run nginx.
docker run \
--name nginx \
--net nginx-network \
-d \
-p 80:80 \
-p 443:443 \
-v $(pwd)/conf.d:/etc/nginx/conf.d:ro \
nginx:alpineIf you add a new server, just reload the nginx server
docker exec -it nginx nginx -s reload- Should return Nginx page
curl http://192.168.99.100
# with a DNS config
curl http://docker.dev- Should return App1 page
curl -H "Host: app1.docker.dev" http://192.168.99.100
# or (with a DNS config)
curl http://app1.docker.dev- Should return App2 page
curl -H "Host: app2.docker.dev" http://192.168.99.100
# or (with a DNS config)
curl http://app2.docker.dev