awesome-compose/nginx-nodejs-redis at master · docker/awesome-compose · GitHub
여기의 docker를 생플을 가지고 스터디를 진행한다.
nginx/Dockerfile을 사용하여 이미지를 생성하지 않고 docker hub의 이미지로 컨테이너만 만들어서 돌려보자..
/docker-compose.yml 의 내용을 일부 아래처럼 수정하면 된다...
Before:
nginx:
build: ./nginx
ports:
- '80:80'
depends_on:
- web1
- web2
After: nginx의 버전을 명기하는게 좋겠다.
nginx:
image: nginx:1.21.6
ports:
- '80:80'
depends_on:
- web1
- web2
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
nginx를 다른 compose 파일로 변경해보자.. nginx는 proxy 서버이므로 수정될 일이 없으므로 개발 단계에서 매번 start /stop을 반복할 필요가 없다.
/nginx/docker-compose.yml 생성
services:
nginx:
image: nginx:1.21.6
ports:
- '80:80'
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
nginx-nginx-1 | 2022/10/20 16:37:39 [emerg] 1#1: host not found in upstream "web1:5000" in /etc/nginx/conf.d/default.conf:2
nginx-nginx-1 | nginx: [emerg] host not found in upstream "web1:5000" in /etc/nginx/conf.d/default.conf:2
nginx.conf에 정의되어 있는 web1, web2 호스트를 를 찾을 수 없다는 에러..
/nginx/docker-compose.yml 수정
services:
nginx:
image: nginx:1.21.6
ports:
- '80:80'
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- backend
networks:
backend:
driver: bridge
external: true
internal: true
nodejs를 돌리는 compose 와 네트워크를 공유해야 하므로 backend 네트워크를 생성하고, netwoks: 로 backend 지정
# docker network create backend
그래도 에러나네... 아마도 web1, web2가 실행중이지 않아서 인듯..
nginx-nginx-1 | 2022/10/20 16:51:18 [emerg] 1#1: host not found in upstream "web1:5000" in /etc/nginx/conf.d/default.conf:2
nginx-nginx-1 | nginx: [emerg] host not found in upstream "web1:5000" in /etc/nginx/conf.d/default.conf:2
/docker-compose.yml 수정
services:
redis:
image: 'redislabs/redismod'
ports:
- '6379:6379'
networks:
- backend
web1:
restart: on-failure
build: ./web
hostname: web1
ports:
- '81:5000'
networks:
- backend
web2:
restart: on-failure
build: ./web
hostname: web2
ports:
- '82:5000'
networks:
- backend
networks:
backend:
driver: bridge
external: true
internal: true
두개의 node 서버와 redis를 묶은 compose를 실행한 후.. nginx/docker-compose.yml를 실행하면 정상동작한다..
proxy 용 nginx
app1용 node 서버
app2용 node 서버
app1과 app2가 동시에 사용하는 mongodb
이런식으로 4개의 켄테이너를 각각 띄울 수 있게되었고. 순서대로 한다면 db -> app1 -> app2 -> nginx 실행시키면 문제 없이 동작 할 듯..
Docker overview | Docker Documentation 도커 공부는 이걸로 시작.
Docker Compose와 버전별 특징 : NHN Cloud Meetup (toast.com)
Multi container apps | Docker Documentation