개발/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