docker service scale 명령어를 사용하여 서비스 확장하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 Docker Swarm 내에서 실행 중인 서비스 인스턴스 (replica, 복제본) 의 수를 효과적으로 관리하는 방법을 배우게 됩니다. 먼저 복제된 서비스를 생성하여 여러 개의 실행 중인 복사본으로 기준선을 설정하는 것으로 시작합니다.

생성 후에는 서비스의 규모를 동적으로 조정하는 방법을 탐구할 것입니다. 여기에는 증가하는 수요를 처리하기 위해 단일 서비스를 확장하는 것, 0 개의 replica 까지 축소하는 것, 그리고 마지막으로 복잡한 배포를 관리하기 위해 여러 서비스를 동시에 확장하는 것이 포함됩니다. 실습 명령을 통해 docker service scale 명령을 사용하여 컨테이너화된 애플리케이션의 고가용성 및 리소스 최적화를 달성하는 실질적인 경험을 얻게 될 것입니다.

복제된 서비스 생성

이 단계에서는 Docker 를 사용하여 복제된 서비스를 생성하는 방법을 배우겠습니다. 복제된 서비스는 서비스의 여러 동일한 복사본 (replica, 복제본) 이 동시에 실행됨을 의미합니다. 이는 고가용성을 제공하고 더 많은 트래픽을 처리할 수 있게 해줍니다.

먼저, 필요한 Docker 이미지를 가져오겠습니다. 이 예제에서는 alpine 이미지를 사용합니다.

docker pull alpine

이미지가 가져와지고 다운로드되고 있음을 나타내는 출력을 볼 수 있습니다.

이제 my-alpine-service라는 복제된 서비스를 3 개의 replica 로 생성해 보겠습니다. alpine 이미지를 사용하고 ping localhost 명령을 사용합니다. 이 명령은 각 컨테이너 내에서 실행되어 지속적으로 localhost 를 ping 합니다.

docker service create --name my-alpine-service --replicas 3 alpine ping localhost

이 명령을 실행하면 Docker Swarm 이 서비스를 생성하고 지정된 수의 replica 를 시작합니다. 서비스 생성을 확인하는 출력을 볼 수 있습니다.

서비스가 생성되었고 replica 가 실행 중인지 확인하려면 서비스를 나열할 수 있습니다.

docker service ls

3 개의 replica 와 함께 my-alpine-service가 나열된 것을 볼 수 있습니다.

또한 서비스를 검사하여 더 자세한 정보를 얻을 수 있습니다.

docker service inspect my-alpine-service

이 명령은 replica 수를 포함하여 서비스에 대한 자세한 정보를 담은 큰 JSON 객체를 출력합니다.

마지막으로, 서비스와 관련된 작업을 확인하여 개별 컨테이너가 실행 중인지 확인해 보겠습니다.

docker service ps my-alpine-service

이 명령은 서비스의 각 replica(task, 작업) 의 상태를 보여줍니다. 각 상태가 실행 중인 상태로 3 개의 작업이 나열된 것을 볼 수 있습니다.

단일 서비스 확장 (Scale Up)

이 단계에서는 단일 서비스를 확장하는 방법을 배우겠습니다. 확장은 서비스의 replica 수를 늘리는 것을 의미합니다. 이는 증가된 부하 또는 트래픽을 처리해야 할 때 유용합니다.

이전 단계에서 my-alpine-service라는 서비스를 3 개의 replica 로 생성했습니다. 이제 이 서비스를 5 개의 replica 로 확장해 보겠습니다. 이를 위해 docker service scale 명령을 사용할 수 있습니다.

docker service scale my-alpine-service=5

이 명령을 실행하면 Docker Swarm 이 서비스에 2 개의 새로운 replica 를 추가합니다. 서비스가 업데이트되고 있음을 나타내는 출력을 볼 수 있습니다.

서비스가 확장되었는지 확인하려면 서비스를 다시 나열할 수 있습니다.

docker service ls

이제 my-alpine-service가 5 개의 replica 와 함께 나열된 것을 볼 수 있습니다.

또한 서비스와 관련된 작업을 확인하여 새로 생성된 컨테이너를 볼 수 있습니다.

docker service ps my-alpine-service

이 명령은 서비스의 모든 5 개의 replica(task, 작업) 의 상태를 보여줍니다. 5 개의 작업이 나열되고, 새로운 작업이 실행 중 상태로 전환되는 것을 볼 수 있습니다.

단일 서비스 축소 (Scale Down) - 0 으로

이 단계에서는 단일 서비스를 0 개의 replica 로 축소하는 방법을 배우겠습니다. 0 으로 축소하면 서비스의 모든 인스턴스가 효과적으로 중지됩니다. 이는 구성을 제거하지 않고 서비스를 일시적으로 종료하는 데 유용할 수 있습니다.

이전 단계에서 my-alpine-service를 5 개의 replica 로 확장했습니다. 이제 이 서비스를 0 개의 replica 로 축소해 보겠습니다. 다시 docker service scale 명령을 사용합니다.

docker service scale my-alpine-service=0

이 명령을 실행하면 Docker Swarm 이 서비스의 모든 실행 중인 replica 를 중지하고 제거합니다. 서비스가 업데이트되고 있음을 나타내는 출력을 볼 수 있습니다.

서비스가 0 으로 축소되었는지 확인하려면 서비스를 나열할 수 있습니다.

docker service ls

이제 my-alpine-service가 0 개의 replica 와 함께 나열된 것을 볼 수 있습니다.

또한 서비스와 관련된 작업을 확인할 수 있습니다.

docker service ps my-alpine-service

이 명령은 작업의 상태를 보여줍니다. 0 으로 축소했으므로 실행 중인 작업이 나열되지 않아야 합니다. "Shutdown" 상태의 작업이 표시될 수 있으며, 이는 작업이 중지되었음을 나타냅니다.

여러 서비스 확장 (Scale)

이 단계에서는 여러 서비스를 동시에 확장하는 방법을 배우겠습니다. 이는 예를 들어 애플리케이션의 서로 다른 구성 요소와 같이 함께 확장해야 하는 여러 서비스가 있는 경우 유용합니다.

먼저 다른 서비스를 만들어 보겠습니다. nginx 이미지를 사용하여 my-nginx-service라는 서비스를 1 개의 replica 로 생성합니다. 먼저 nginx 이미지를 pull 해야 합니다.

docker pull nginx

nginx 이미지가 pull 되고 있음을 나타내는 출력을 볼 수 있습니다.

이제 my-nginx-service를 생성합니다.

docker service create --name my-nginx-service --replicas 1 nginx

my-nginx-service의 생성을 확인하는 출력을 볼 수 있습니다.

이제 두 개의 서비스가 있습니다: my-alpine-service (현재 0 으로 축소됨) 및 my-nginx-service (1 로 확장됨). 두 서비스를 한 번에 확장해 보겠습니다. my-alpine-service를 2 개의 replica 로, my-nginx-service를 3 개의 replica 로 확장합니다.

docker service scale my-alpine-service=2 my-nginx-service=3

이 명령을 실행하면 Docker Swarm 이 지정된 replica 수에 따라 두 서비스를 모두 업데이트합니다. 두 서비스가 업데이트되고 있음을 나타내는 출력을 볼 수 있습니다.

두 서비스가 확장되었는지 확인하려면 서비스를 나열할 수 있습니다.

docker service ls

이제 my-alpine-service가 2 개의 replica 와 함께, my-nginx-service가 3 개의 replica 와 함께 나열된 것을 볼 수 있습니다.

각 서비스의 작업을 개별적으로 확인하여 실행 중인 컨테이너를 볼 수도 있습니다.

docker service ps my-alpine-service

이렇게 하면 my-alpine-service에 대한 2 개의 실행 중인 작업이 표시됩니다.

docker service ps my-nginx-service

이렇게 하면 my-nginx-service에 대한 3 개의 실행 중인 작업이 표시됩니다.

마지막으로, 생성한 서비스를 정리해 보겠습니다. docker service rm 명령을 사용하여 두 서비스를 모두 제거할 수 있습니다.

docker service rm my-alpine-service my-nginx-service

두 서비스가 제거되었음을 확인하는 출력을 볼 수 있습니다.

서비스가 제거되었는지 확인하려면 서비스를 다시 나열합니다.

docker service ls

나열된 서비스가 없어야 합니다.

요약

이 Lab 에서는 Docker 서비스의 확장을 관리하는 방법을 배웠습니다. 먼저 지정된 수의 replica 로 복제된 서비스를 생성하여 내결함성 (fault-tolerant) 애플리케이션의 초기 배포를 시연했습니다. 그런 다음 단일 서비스에 대한 실행 중인 인스턴스 수를 동적으로 조정하는 방법을 탐구했습니다. 먼저 증가하는 수요를 처리하기 위해 확대한 다음, 서비스를 효과적으로 중지하기 위해 replica 를 0 으로 줄이는 것을 포함하여 축소했습니다.

마지막으로, 여러 서비스를 동시에 확장하는 방법을 배워 단일 명령으로 Docker Swarm 환경 내에서 여러 애플리케이션에 대한 리소스 할당을 관리하는 기능을 보여주었습니다. 이러한 단계는 docker service scale 명령을 사용하여 서비스의 수명 주기 및 리소스 활용률을 효율적으로 관리하는 실질적인 경험을 제공했습니다.