개발/docker
docker/nodejs/nginx 로드 밸런싱 및 무중단 배포
2어진
2021. 11. 2. 19:24
1. 엔진x 설정파일 작성
- nginx.conf
worker_processes 4;
events {
worker_connections 1024;
}
http {
upstream appname {
# 연결이 적은 서버 사용
least_conn;
server IP:30060 weight=6 max_fails=3 fail_timeout=10s;
server IP:30061 weight=3 max_fails=3 fail_timeout=10s;
server IP:30062 weight=3 max_fails=3 fail_timeout=10s;
}
server {
listen 3006;
location / {
# 업로드 용량 지정
client_max_body_size 20M;
proxy_pass http://appname
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
max_fails 및 fail_timeout
max_fails 의 수 만큼 실패하면 fail_timeout 에 지정된 초 만큼 해당 서버를 사용하지 않는다.
2. Dockerfile 작성
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 3006
3. 도커 빌드
sudo docker build . -t 이미지명:태그
sudo docker build . -t dockerId/imgName:nginx
저장소 업로드를 고려해서 이미지명을 도커아이디/이미지명 형식으로 함
4. 컨테이너 생성
- nginx 컨테이너
sudo docker create --name 컨테이너명 -p 외부포트:내부포트 이미지명:태그
sudo docker create --name conName -p 3006:3006 dockerId/imgName:nginx
- nodeapp 컨테이너
sudo docker create --name 컨테이너명 -p 외부포트:내부포트 이미지명:태그
sudo docker create --name node0 -p 30060:3006 dockerId/imgName:test
sudo docker create --name node1 -p 30061:3006 dockerId/imgName:test
sudo docker create --name node2 -p 30062:3006 dockerId/imgName:test
dockerId/imgName:test 라는 노드 이미지가 있다 가정
xxx.xxx.xx.x:외부포트 로 접속시 도커 내부포트 로 연결됨
5. 컨테이너 실행
sudo docker start 컨테이너명
sudo docker start conName
sudo docker start node0
sudo docker start node1
sudo docker start node2