서비스 배포(Deploy)
서비스 배포는 Docker Swarm 클러스터에 컨테이너 기반 애플리케이션을 실행시키는 것을 의미합니다.
서비스는 단일 컨테이너로 이루어질 수도 있고, 여러 복제본으로 이루어질 수도 있습니다.
간단한 웹 애플리케이션 서비스 배포
Nginx 웹 서버를 Docker Swarm에 배포하는 간단한 예제를 보겠습니다.
이 예제에서는 nginx 이미지를 사용하여 웹 서버를 배포합니다.
docker service create \
--name my-web \
--replicas 3 \
--publish published=80,target=80 \
nginx
실행하면 3개의 Nginx 컨테이너가 Docker Swarm 클러스터에 배포되며,
http://<Swarm_Manager_IP>:80에서 웹 서버에 접근할 수 있습니다.
Wocker Node에만 서비스 배포
Swarm은 manager 노드와 worker 노드를 구분하지 않고, 가용한 모든 노드에 복제본을 배포할 수 있습니다.
그러나 기본 설정에서는 서비스 컨테이너가 매니저 노드에는 배포되지 않는 것이 권장되는 방식입니다.
다음과 같은 제약 조건을 사용하여 서비스가 오직 worker 노드에만 배포되도록 할 수 있습니다.
docker service create \
--name my-service \
--replicas 3 \
--constraint 'node.role == worker' \
nginx
docker service ls
서비스 상태 확인
서비스가 제대로 배포되었는지 확인하려면 docker service ls 명령을 사용하여 서비스 목록을 확인할 수 있습니다.
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
yk5kq3xlvlr4 my-web replicated 3/3 nginx:latest *:80->80/tcp
docker service ps <service_name>
또한, 각 복제본의 상태를 더 자세히 보려면 docker service ps 명령을 사용할 수 있습니다:
docker service ps my-web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
3yd18j3ibgbm my-web.1 nginx:latest worker-1 Running Running 3 minutes ago
tk2gdji3bjk1 my-web.2 nginx:latest worker-2 Running Running 3 minutes ago
yz8phjso5kg2 my-web.3 nginx:latest worker-3 Running Running 3 minutes ago
서비스 확장(Scaling)
스케일링은 이미 배포된 서비스의 컨테이너 복제본 수를 조정하는 것을 의미합니다.
수요에 따라 서비스의 복제본 수를 늘리거나 줄일 수 있습니다.
docker service scale <service_name>=<number>
서비스 확장 예제
배포된 my-web 서비스를 3개의 복제본에서 5개의 복제본으로 확장하려면 다음 명령을 실행합니다.
여기서 REPLICAS 값이 5/5이면 5개의 복제본이 모두 실행 중임을 의미합니다.
# my-web 서비스의 컨테이너 복제본 수가 5개로 증가
docker service scale my-web=5
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
yk5kq3xlvlr4 my-web replicated 5/5 nginx:latest *:80->80/tcp
docker service update --image <image_name>:<version> <service_name>
서비스 업데이트
배포된 서비스의 설정(예: 이미지 버전, 환경 변수)을 변경하려면
docker service update 명령을 사용할 수 있습니다.
예를 들어, nginx 이미지를 최신 버전으로 업데이트하려면 다음 명령을 사용합니다:
docker service update --image nginx:latest my-web
docker service rm <service_name>
서비스 제거
서비스를 제거하려면 docker service rm 명령을 사용합니다.
docker service rm my-web
이 명령을 실행하면 my-web 서비스가 클러스터에서 제거되며, 해당 컨테이너들도 모두 중지됩니다.
'Infra > Docker' 카테고리의 다른 글
Docker Swarm - 스택 (0) | 2024.09.29 |
---|---|
Docker Swarm - 네트워크 (0) | 2024.09.29 |
Docker Swarm - 노드의 승격, 레이블, 가용성 (0) | 2024.09.28 |
Docker Swarm - 시작 및 노드추가 (0) | 2024.09.25 |
Docker - 도커파일 (0) | 2023.03.27 |