devops

docker 를 활용하여 직접 msa 구성

khw7385 2025. 10. 20. 09:22

목표

docker 를 활용하여 직접 msa 를 구성해본다.

과정

1. nginx 이미지 준비

Dockerfile

FROM nginx

COPY default.conf /etc/nginx/conf.d/default.conf

default.conf

upstream blog_servs{
    server myblog-1:80;
    server myblog-2:80;
    # server myblog-3:80;
}

server{
    listen 80;
    location /{
        proxy_pass http://blog_servs;
    }
}

2. blog 서비스 구동

어제 실습 과 똑같기 때문에 패스한다.

3. nginx 컨테이너 구동

docker run -d -p 9050:80 --name nginx_lb_1 --link myblog-1 --link myblog-2 myblog:20251014.1

여기서 사용된 --link 옵션은 더 이상 사용되지 않은 docker 기능이다. 도커의 network 를 만들고 컨테이너들을 같은 네트워크에 두는 방법을 사용할 것을 권장한다.
참고로, docker network 의 종류로는 bridge, host, none가 존재한다.

  • bridge: 아무 설정하지 않으면 적용되는 네트워크 모드, 사용자가 직접 네트워크를 만드는 경우 bridge 모드가 적용되고 docker daemon 에 내부 DNS 서버를 구동하여 같은 네트워크 안에 있는 컨테이너들은 컨테이너의 이름을 통해서 통신할 수 있다.
  • host: host pc 와 동일한 네트워크 네임스페이스를 사용한다. 포트 충돌이 발생할 수 있기 때문에 많이 사용되지 않는다.
docker run -d --name web --network host nginx
  • none: 네트워크가 없음

결론

직접 base nginx 이미지로부터 설정 정보를 복사하여 새로운 nginx이미지를 만들고 컨테이너로 구동하였다. 서비스가 추가된다면 다시 컨테이너를 띄워야 하는 문제점이 있음을 알 수 있었다.
=> Docker compose 를 활용하여 해결해본다.

link 가 아닌 docker network 를 활용한 방법

docker network 을 활용한 msa 구성

# 기존 nginx_lb 컨테이너 중단 및 삭제(--link 옵션으로 생성된 컨테이너이기 때문)
docker stop nginx_lb_2
docker rm nginx_lb_2

# nginx 컨테이너 다시 띄움
docker run -d -p 9050:80 --name nginx_lb_3 nginx_lb:20251014.2

network 설정을 아직 하지 않았기 때문에 컨테이너가 정상적으로 동작하지 못하는 것을 확인할 수 있다.

image)image

# 도커 네트워크 생성 및 연결
docker network create blog-net
docker network connect blog-net myblog-1
docker network connect blog-net myblog-2
docker network connect blog-net nginx_lb_3

# nginx 컨테이너 재구동
docker restart nginx_lb_3

nginx 컨테이너가 정상적으로 동작하는 것을 확인할 수 있다.

image