CodeGym /행동 /Docker SELF /Docker Swarm 소개

Docker Swarm 소개

Docker SELF
레벨 18 , 레슨 0
사용 가능

6.1 Docker Swarm의 기본 개념

Docker Swarm은 Docker가 제공하는 컨테이너 오케스트레이션 내장 시스템이야. 이걸로 Docker 호스트 클러스터를 만들고, 관리하고, 확장할 수 있지. 여러 호스트를 하나의 논리적 호스트로 바꿔서 컨테이너를 실행할 수 있게끔 만들어줘. Swarm은 자동으로 작업을 노드들 간에 분배하고, 편리함과 장애 복구를 보장하지. 이번 강의에서는 Docker Swarm의 주요 구성 요소와 관리 기본 명령어를 살펴볼 거야.

Docker Swarm의 기본 개념:

  1. 클러스터 (Swarm): 여러 Docker 호스트를 하나의 클러스터로 묶은 그룹.
  2. 매니저 (Managers): 클러스터를 관리하고 작업을 워커 노드에 분배하는 노드들.
  3. 워커 노드 (Workers): 작업을 수행하고 컨테이너를 실행하는 노드들.
  4. 서비스 (Services): 애플리케이션의 논리적 표현으로, 어떤 작업을 수행할지와 몇 개의 컨테이너 인스턴스를 실행할지를 설명해.
  5. 작업 (Tasks): 서비스의 인스턴스가 되는 개별 컨테이너들.

Docker Swarm의 아키텍처:

Docker Swarm은 매니저와 워커 노드에 기반한 아키텍처를 사용해. 매니저는 클러스터의 상태를 관리하고, 워커 노드들은 작업을 실행해.

매니저:

  • 클러스터 상태와 구성을 관리해.
  • 작업을 워커 노드에 분배해.
  • (복수의 매니저가 있을 경우) 장애 복구와 고가용성을 보장해.

워커 노드:

  • 매니저가 할당한 작업을 수행해.
  • 지정된 작업에 따라 컨테이너를 실행해.

Docker Swarm의 기본 명령어:

  1. docker swarm init: 새로운 Swarm 클러스터 초기화.
  2. docker swarm join: 기존 클러스터에 노드 추가.
  3. docker node ls: 클러스터 내 노드 리스트 확인.
  4. docker service create: 새로운 서비스 생성.
  5. docker service ls: 실행 중인 서비스 리스트 확인.
  6. docker service scale: 특정 수의 인스턴스로 서비스 확장.
  7. docker service rm: 클러스터에서 서비스 제거.

Docker Swarm을 사용하면 분산 시스템에서 애플리케이션을 쉽게 관리할 수 있어. 장애 복구, 확장성, 배포 편의성을 보장하지.

6.2 Docker Swarm 클러스터 생성하기

Docker Swarm 클러스터 생성 및 관리

1단계: 클러스터 초기화

첫 번째 호스트(매니저)에서 다음 명령어를 실행하세요:

Terminal

docker swarm init --advertise-addr <MANAGER_IPl>

이 명령은 새로운 Swarm 클러스터를 초기화하고 현재 노드를 매니저로 설정하며 작업 노드를 연결하기 위한 명령어를 출력합니다.

2단계: 작업 노드 연결

다른 호스트에서 docker swarm init 명령 실행 시 출력된 명령을 실행하여 클러스터에 연결하세요:

Terminal

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

여기서:

  • <SWARM_TOKEN>: 클러스터에 연결하기 위한 토큰 (docker swarm init 명령에서 제공됨).
  • <MANAGER_IP>: 매니저 노드의 IP 주소.

3단계: 노드 확인

클러스터의 모든 노드를 보려면 다음 명령어를 사용하세요:

Terminal

docker node ls

이 명령은 모든 노드의 목록, 역할, 상태 및 가용성을 보여줍니다.

docker node ls 명령의 출력 예제

Terminal

ID                                    HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
qwertyuiop12345    manager-node        Ready               Active             Leader
asdfghjkl67890      worker-node1       Ready               Active
zxcvbnm09876       worker-node2       Ready               Active

열에 대한 설명:

  • ID: 노드의 고유 식별자.
  • HOSTNAME: 노드가 실행 중인 호스트의 이름.
  • STATUS: 노드의 현재 상태(예: Ready).
  • AVAILABILITY: 노드의 가용성(예: Active).
  • MANAGER STATUS: 노드가 매니저인지(예: Leader, Reachable) 또는 작업 노드인지(비어 있음)를 표시합니다.

이제 Docker Swarm 클러스터가 설정되어 애플리케이션을 생성하고 확장할 수 있습니다.

6.3 Docker Swarm 관리

Docker Swarm에서 서비스 관리

1. 서비스 생성

지정된 수의 복제본으로 실행될 서비스를 생성하세요:

Terminal

docker service create --name my_web --replicas 3 -p 8080:80 nginx

이 예제에서는 my_web라는 서비스를 생성하며, Nginx의 3개의 인스턴스를 실행합니다. 컨테이너는 80번 포트를 호스트의 8080번 포트에 게시합니다.

2. 서비스 보기

클러스터에서 실행 중인 모든 서비스를 보려면 다음 명령어를 사용하세요:

Terminal

docker service ls

docker service ls 명령어 출력 예제

Terminal

ID                     NAME         MODE           REPLICAS     IMAGE
ab12345               my_web       replicated     3/3          nginx:latest

3. 서비스 확장

서비스의 인스턴스(복제본) 수를 변경하려면 docker service scale 명령어를 사용하세요:

Terminal

docker service scale my_web=5

이제 my_web 서비스는 5개의 인스턴스를 가지게 됩니다.

4. 서비스 업데이트

새 버전으로 서비스 이미지를 업데이트하려면 docker service update 명령어를 사용하세요:

Terminal

docker service update --image nginx:latest my_web

높은 가용성 보장

Docker Swarm은 다음을 통해 높은 가용성을 지원합니다:

  1. 작업 분배: 장애 발생 시 컨테이너를 자동으로 복구하기 위해 클러스터의 노드 간 작업을 분배합니다.
  2. 다중 매니저 지원: 쿼럼 문제를 피하기 위해 홀수 개의 매니저(예: 3개 또는 5개)를 권장합니다.
  3. 복제본 사용: 각 서비스에 여러 복제본을 설정하여 내결함성을 강화합니다.

쿼럼 개념

쿼럼은 대다수 노드가 특정 작업(예: 데이터 기록이나 리더 선택)에 동의해야 실행 가능한 것으로 간주됩니다. 예를 들어, 5개의 노드로 구성된 클러스터에서는 쿼럼이 3개의 노드가 됩니다.

유용한 팁! 매니저를 서로 다른 물리적 또는 클라우드 서버에 배치하여 동시에 장애가 발생할 위험을 최소화하세요.

6.4 Docker Swarm를 위한 Docker Compose 구성 예제

Docker Swarm에서 Docker Compose를 사용하면 멀티 컨테이너 애플리케이션 관리를 간소화할 수 있어.

docker-compose.yml 파일 예제

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080-8090:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

networks:
  my_overlay_network:
    driver: overlay
    

Swarm에서 Docker Compose 스택 실행하기

Docker Swarm에 스택을 배포하려면 아래 명령어를 사용하면 돼:

Terminal

docker stack deploy -c docker-compose.yml mystack

스택 보기

배포된 스택을 보려면:

Terminal

docker stack ls

스택 내 서비스 보기

Terminal

docker stack services mystack
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION