목표
docker 를 활용하여 직접 msa 를 구성해본다.
과정
1. nginx 이미지 준비
Dockerfile
FROM nginx
COPY default.conf /etc/nginx/conf.d/default.confdefault.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.2network 설정을 아직 하지 않았기 때문에 컨테이너가 정상적으로 동작하지 못하는 것을 확인할 수 있다.
)
# 도커 네트워크 생성 및 연결
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_3nginx 컨테이너가 정상적으로 동작하는 것을 확인할 수 있다.
'devops' 카테고리의 다른 글
| Spring Cloud Gateway 와 Spring Eureka 를 통해 MSA 환경 구축 (0) | 2025.10.20 |
|---|---|
| SPRING GATEWAY 를 이용한 MSA( 멀티 서비스, 멀티 서버 구현하기) (0) | 2025.10.20 |
| GW LB 를 이용한 무중단 배포(업데이트) (0) | 2025.10.20 |
| nginx-proxy 이미지 없이 docker compose 를 활용하여 직접 MSA 구성 (0) | 2025.10.20 |
| docker compose 를 이용한 서비스 디스커버리 및 scale out - in (0) | 2025.10.15 |