IT/DevOps

[Docker] Docker File [5] (feat. nginx proxy)

알 수 없는 사용자 2023. 11. 4. 13:38
반응형

목차

    nginx proxy

    nginx의 프록시를 이용해 요청에 따라 서버 2개로 분배하는 예제

    lb Dockerfile(메인서버) 🤗

    예제에서는 lb가 메인서버를 뜻함

    클라이언트 요청을 제일 먼저 받는 서버

    FROM nginx
    
    #vim은 편의상 설치했음, 선택사항임
    RUN apt-get update
    RUN apt install -y vim
    
    # COPY index.html /usr/share/nginx/html
    #(메인서버 호출 시 index.html 없어서 404 페이지 보여서 만들었음)
    COPY index.html /etc/nginx/html/index.html
    COPY conf/nginx.conf /etc/nginx/conf.d/default.conf
    
    ENTRYPOINT [ "nginx", "-g", "daemon off;"]

    lb nginx.conf 😎

    #server1 ip(분배될 서버)
    #현재 예제에서는 서버 아이피를 직접 적었지만 서버가 많아질 경우를 대비해서 추후엔 gateWay로 적는 걸 권장
    upstream server1 {
    	#gateWay는 server 172.17.0.1:8001;			
        server 172.17.0.2:80;
    }
    
    #server2 ip(분배될 서버)
    upstream server2 {
    	#gateWay는 server 172.17.0.1:8002;
        server 172.17.0.3:80;
        
    }
    
    server {
        listen       80;
        server_name  localhost;
    
        #server1 /server1로 요청이 들어오면 위에 설정한 upstream {server1}로  
        location /server1 {
            proxy_pass http://server1/;
        }
    
        #server1 /server2로 요청이 들어오면 upstream {server2}로  
        location /server2 {
            proxy_pass http://server2/;
        }
    }

    lb index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1>Welcome Nginx!!!!!!!!!!</h1>
    </body>
    </html>

    server1,2 Dockerfile 🙂

    FROM nginx
    
    COPY webapp /usr/share/nginx/html
    
    ENTRYPOINT [ "nginx", "-g", "daemon off;"]

    server 1,2 index.html 🙄

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
    	<!-- 여기만 Server 1, 2로 다름 -->
        <h1>Welcome Nginx Server 1</h1>
    </body>
    </html>

    명령어 🤑

    #3개 한번에 이미지화
    #현재 경로: C:\Users\사용자명\DOCKER_LAB\ex04
    docker build -t server1 ./server1; docker build -t server2 ./server2; docker build -t lb ./lb
    
    #3개 한번에 컨테이너화
    docker run -d -p 8001:80 server1; docker run -d -p 8002:80 server2; docker run -d -p 8000:80 lb

    개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

    틀린 점 있을 경우 댓글 부탁드립니다.

    reference: https://www.youtube.com/watch?v=ZmqSOMlgZPU

     

    [Docker] Docker File [6] (feat. ENV, VOLUME)

    목차 Dockerfile 🙂 FROM mariadb #환경변수 세팅 ENV MYSQL_USER=son ENV MYSQL_PASSWORD=1234 ENV MYSQL_ROOT_PASSWORD=1234 ENV MYSQL_DATABASE=sondb #캐릭터셋 세팅 CMD [ "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci" ]

    yaga.tistory.com

     

    반응형