Dokcer

Docker Swarm 구축

땍땍 2025. 9. 14. 19:50

운영 서버를 구축하던 중, 다중 서버를 구동해야만 하는 상황이 발생하엿다.

기존 모놀리식 서비스를 분리해 MSA 형태로 변경하면서 기존 부담이 컸던 특정 서버만 다중 서버로 구동해야 하는 상황이 되었다.

이러한 다중 서버를 별도로 관리하는 것이 불가능할 정도는 아니었지만 이후 확장성과 효율성을 고려해 오케스트레이션 툴을 사용하기로 하였다.

하지만, 당장 감당하지 못 할 정도의 서버를 구동하는 것도 아니며 서버의 자원이 여유로운 것도 아니었기에 Kubernetes 를 활용하지 않고 Docker Swarm 을 도입하기로 결정하였다.


 

Docker Swarm 을 활용하기 위해서는, 모든 서버에 아래와 같은 포트를 허용해주어야만 한다.

  • 2377 : 클러스터 매니지먼트 활용
  • 7946 : 노드 간 통신
  • 4789 : 오버레이 네트워크 통신

 

Docker Swarm 은 Kubernetes 와 비교해 복잡성은 물론 구축 방법 등도 간단하다.

 

1. 

우선 Docker 를 설치해야만 한다.

https://docs.docker.com/engine/install/ubuntu/

 

2.

매니저 노드에 아래와 같은 명령어를 입력해준다.

--advertise-addr 옵션을 제외하고 입력해도 상관은 없으나, 이때 외부에서 접근하지 못하는 Private IP 를 할당하는 경우도 존재하기에 꼭 다른 서버에서 접근할 수 있는 IP 를 할당해주도록 하자.

docker swarm init --advertise-addr [접근할 IP]

 

3.

위와 같은 명령어를 입력하면, 아래와 같은 명령어가 터미널에 표시가 될 것이다.

docker swarm join --token SWMT50-121sajfkn19csxxxxxxxxxx <manager-private-ip>:<port>

해당 명령어를 클러스터 구성을할 워커 노드 ( 다른 서버 ) 에 입력해준다.

 

4.

이후, 매니저 노드에서 아래 명령어를 통해 워커 노드가 정상적으로 구성에 참여했는지 확인해주자.

docker node ls
ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xk1ab2c3d4e5f6g7h8i9j0k1     manager1            Ready     Active         Leader           24.0.5
a1b2c3d4e5f6g7h8i9j0k1l2     worker1             Ready     Active                        24.0.5
b2c3d4e5f6g7h8i9j0k1l2m3     worker2             Down      Active                        24.0.5

 

여기까지가 기본적인 Docker Swarm 구성의 끝이다.

이제 이를 활용해 서버를 띄워보도록 하자.

 

5.

서버를 띄우기 위해서는, 명령어를 직접 입력하는 방법도 있지만 이후 관리를 위해 보통 .yml 파일을 활용하곤 한다.

아래 예시는 이러한 요구사항이 포함 되어 있다.

  • springboot-app 이미지를 활용
  • 항상 10개의 인스턴스를 구동해야만 함.
  • 각 이미지 별 최대로 사용할 수 있는 메모리는 1.5G
  • 각 컨테이너가 시작되기 위해서는 최소 1.0G 의 메모리가 필요함
version: "3.8"

services:
  springboot-app:
    image: your-dockerhub-username/springboot-app:latest  # 사용할 Spring Boot 이미지
    deploy:
      replicas: 10                  # 최소 10개 인스턴스를 항상 구동
      resources:
        limits:
          memory: 1.5G             # 컨테이너가 최대 사용할 수 있는 메모리
        reservations:
          memory: 1.0G             # 컨테이너가 시작되기 위해 예약해야 하는 최소 메모리
    ports:
      - "8080:8080"                # 호스트 8080 포트를 컨테이너 8080 포트에 연결

 

5.

위와 같이 yml 파일을 작성했다면, 아래의 명령어를 입력해 서버를 구동 시킬 수 있다.

docker stack deploy -c [파일명].yml [Stack 명 (임의로 지정)]

 


이번 글에서는 기본적인 Docker Swarm 사용 방법을 작성해두었지만, 이외에도 특정 이미지를 특정 서버에서만 구동하기 위해서는 라벨을 추가하거나, 서로 다른 서버에서 컨테이너의 이미지명만을 활용해 통신하기 위해서는 overlay 네트워크를 활용해야 하는 등, 부가적인 설정 등이 필요한 부분들도 많기에 이 또한 정리가 되면 게시글로 남길 예정이다.

 

'Dokcer' 카테고리의 다른 글

Docker 란?  (0) 2025.10.09
docker hub 사용법  (0) 2024.08.18
docker compose - springboot와 여러 컨테이너 함께 띄우기  (0) 2024.08.16
도커(Docker) - Dockerfile, build, run  (0) 2024.07.27