소개
이 랩에서는 Docker Swarm 에서 실행 중인 서비스를 효과적으로 관리하고 검사하기 위해 docker service ls 명령어를 사용하는 방법을 배우게 됩니다. 먼저 Swarm 의 모든 서비스를 나열하여 명령어의 출력과 제공하는 정보에 대한 기본적인 이해를 시작합니다.
기본적인 목록을 기반으로, 강력한 필터링 옵션을 탐색합니다. 여기에는 서비스 이름을 기준으로 필터링하여 특정 서비스를 빠르게 찾을 수 있는 기능이 포함됩니다. 또한 서비스 모드 (예: replicated 또는 global) 및 서비스 구성 및 식별에 사용되는 key-value 쌍인 레이블 (label) 로 필터링하는 방법을 배우게 됩니다. 마지막으로, docker service ls 명령의 출력을 필요에 가장 적합한 방식으로 형식화하여 서비스 세부 정보를 쉽게 구문 분석하고 분석할 수 있는 방법을 배우게 됩니다.
Swarm 내 모든 서비스 목록 확인
이 단계에서는 Docker Swarm 에서 실행 중인 모든 서비스를 나열하는 방법을 배우게 됩니다. 서비스를 나열하기 전에 Docker Swarm 이 초기화되어 있어야 하며, 최소한 하나의 서비스가 실행 중이어야 합니다.
먼저, 아직 초기화되지 않은 경우 Docker Swarm 을 초기화해 보겠습니다. docker info 명령을 사용하여 Swarm 상태를 확인할 수 있습니다. 출력에 "Swarm: active"가 포함되어 있으면 Swarm 이 이미 초기화된 것입니다. 그렇지 않은 경우 초기화해야 합니다.
docker info
Swarm 이 활성화되어 있지 않으면 초기화합니다.
docker swarm init
이제 나열할 간단한 서비스를 생성해 보겠습니다. nginx 이미지를 사용하여 my-web-service라는 서비스를 생성합니다. 새로운 환경을 사용하고 있으므로 먼저 nginx 이미지를 pull 해야 합니다.
docker pull nginx
이제 서비스를 생성합니다.
docker service create --name my-web-service -p 80:80 nginx
이 명령어는 nginx 이미지에서 my-web-service라는 서비스를 생성하고 컨테이너의 포트 80 을 호스트의 포트 80 으로 게시합니다.
Swarm 의 모든 서비스를 나열하려면 docker service ls 명령을 사용합니다. 이 명령은 서비스 ID, 이름, 모드, 복제본 수 및 사용 중인 이미지를 포함한 서비스에 대한 정보를 표시합니다.
docker service ls
출력에는 방금 생성한 my-web-service가 표시됩니다. ID, 이름, 모드 (replicated), 복제본 수 (기본적으로 일반적으로 1) 및 이미지 (nginx) 를 확인할 수 있습니다.
이름으로 서비스 필터링
이 단계에서는 --filter 플래그와 함께 docker service ls 명령을 사용하여 서비스 목록을 이름으로 필터링하는 방법을 배우게 됩니다. 이는 많은 서비스가 실행 중이고 특정 서비스 또는 유사한 이름을 가진 서비스 그룹에 대한 정보만 보려는 경우 유용합니다.
이름으로 필터링하는 기본 구문은 docker service ls --filter name=<service_name>입니다. 서비스의 전체 이름 또는 이름의 일부를 제공할 수 있습니다.
이전 단계에서 my-web-service라는 서비스를 생성했습니다. 이 필터를 사용하여 이 서비스만 표시해 보겠습니다.
docker service ls --filter name=my-web-service
출력에는 my-web-service에 해당하는 줄만 표시되어야 합니다.
부분 이름을 사용하여 필터링할 수도 있습니다. 예를 들어, my-web-service-1 및 my-web-service-2라는 서비스가 있는 경우 name=my-web으로 필터링하면 두 서비스가 모두 표시됩니다. 현재 설정에서는 name=my-web으로 필터링해도 my-web-service가 계속 표시됩니다.
docker service ls --filter name=my-web
이 명령은 부분 이름을 사용하여 필터링하는 방법을 보여줍니다. 출력에는 여전히 my-web-service가 나열되어야 합니다.
이름으로 필터링하면 서비스 목록을 빠르게 좁히고 전체 목록을 스캔하지 않고도 특정 서비스에 대한 필요한 정보를 찾을 수 있습니다.
모드로 서비스 필터링
이 단계에서는 --filter 플래그와 함께 docker service ls 명령을 사용하여 모드에 따라 서비스 목록을 필터링하는 방법을 배우게 됩니다. Docker Swarm 서비스는 replicated 및 global의 두 가지 모드로 실행될 수 있습니다.
- Replicated (복제): 이것은 기본 모드입니다. Swarm 관리자는 사용 가능한 노드에서 서비스 작업의 지정된 수의 복제본을 예약합니다.
- Global (글로벌): Swarm 은 모든 사용 가능한 노드에서 서비스에 대한 하나의 작업을 실행합니다.
모드로 필터링하는 기본 구문은 docker service ls --filter mode=<mode>입니다. 모드로 replicated 또는 global을 사용할 수 있습니다.
이전 단계에서 기본적으로 replicated 모드로 실행되는 my-web-service라는 서비스를 생성했습니다. replicated 모드로 실행되는 서비스만 표시하도록 서비스를 필터링해 보겠습니다.
docker service ls --filter mode=replicated
출력에는 복제 서비스이므로 my-web-service가 표시되어야 합니다.
이제 global 모드의 서비스를 필터링해 보겠습니다. 글로벌 서비스를 생성하지 않았으므로 이 명령은 어떤 서비스도 표시하지 않아야 합니다.
docker service ls --filter mode=global
이 명령의 출력은 헤더 행만 표시하고 실행 중인 글로벌 서비스가 없으므로 서비스 항목이 없어야 합니다.
모드로 필터링하는 것은 특정 유형의 서비스만 보려는 경우, 예를 들어 모든 노드에서 실행되도록 설계된 모든 글로벌 서비스의 상태를 확인하려는 경우 유용합니다.
레이블로 서비스 필터링
이 단계에서는 --filter 플래그와 함께 docker service ls 명령을 사용하여 레이블을 기반으로 서비스 목록을 필터링하는 방법을 배우게 됩니다. 레이블은 서비스를 포함한 Docker 객체에 연결하여 구성하고 식별하는 데 도움이 되는 키 - 값 쌍입니다.
레이블로 필터링하는 기본 구문은 docker service ls --filter label=<key>=<value>입니다. 특정 레이블 키와 값으로 필터링하거나 레이블 키의 존재 여부만으로 필터링할 수 있습니다.
먼저 기존 my-web-service를 업데이트하여 레이블을 추가해 보겠습니다. environment=development 레이블을 서비스에 추가합니다.
docker service update --label-add environment=development my-web-service
이 명령은 my-web-service를 업데이트하고 지정된 레이블을 추가합니다.
이제 environment=development 레이블이 있는 서비스만 표시하도록 서비스를 필터링해 보겠습니다.
docker service ls --filter label=environment=development
출력에는 이 레이블을 방금 추가했으므로 my-web-service가 표시되어야 합니다.
값에 관계없이 레이블 키의 존재 여부만으로 필터링할 수도 있습니다. 예를 들어, environment 레이블이 있는 모든 서비스를 나열하려면 다음을 수행합니다.
docker service ls --filter label=environment
이 명령은 값에 관계없이 environment 레이블이 있는 모든 서비스를 나열합니다. 이 경우에도 my-web-service가 표시됩니다.
레이블로 필터링하는 것은 특히 환경, 팀 또는 애플리케이션별로 서비스를 분류하기 위해 레이블을 사용할 수 있는 더 큰 Swarm 에서 서비스를 관리하고 쿼리하는 강력한 방법입니다.
서비스 목록 출력 형식 지정
이 단계에서는 --format 플래그를 사용하여 docker service ls 명령의 출력을 형식 지정하는 방법을 배우게 됩니다. 이를 통해 표시되는 정보와 표시 형식을 사용자 정의할 수 있으며, 이는 스크립팅 또는 보고서 생성에 특히 유용합니다.
--format 플래그는 Go 의 text/template 패키지를 사용합니다. 표시하려는 필드와 형식을 지정할 수 있습니다. 서비스에 대한 일반적인 필드에는 .ID, .Name, .Mode, .Replicas 및 .Image가 포함됩니다.
탭으로 구분된 서비스 ID 와 이름만 표시하는 것으로 시작해 보겠습니다.
docker service ls --format "{{.ID}}\t{{.Name}}"
출력에는 my-web-service의 ID 와 이름이 탭 문자로 구분되어 표시됩니다.
이제 서비스 이름, 이미지 및 모드를 더 읽기 쉬운 형식으로, 아마도 기본 헤더가 없는 테이블과 같이 표시해 보겠습니다.
docker service ls --format "table {{.Name}}\t{{.Image}}\t{{.Mode}}"
형식 문자열의 시작 부분에 table을 사용하면 Docker 가 출력을 테이블로 형식 지정하도록 지시합니다. 필드는 탭 (\t) 으로 구분됩니다.
프로그래밍 방식으로 처리하는 데 매우 유용한 JSON 형식도 사용할 수 있습니다.
docker service ls --format json
이 명령은 서비스 정보를 JSON 형식으로 출력합니다.
출력 형식을 지정하면 서비스 정보를 보고 사용하는 방법에 대한 유연성을 얻을 수 있습니다. 특정 필드를 선택하고, 구분 기호를 변경하고, 테이블 또는 JSON 과 같은 다른 형식으로 출력할 수 있습니다.
요약
이 Lab 에서는 docker service ls 명령을 사용하여 Docker Swarm 에서 실행 중인 서비스를 나열하는 방법을 배웠습니다. Docker Swarm 이 초기화되었는지 확인하고 샘플 서비스를 생성하는 것으로 시작했습니다. 그런 다음 docker service ls를 사용하여 모든 실행 중인 서비스를 보고 서비스 ID, 이름, 모드, 복제본 및 이미지를 포함한 기본 출력을 이해했습니다.
또한 --filter 플래그를 사용하여 서비스 목록을 필터링하는 방법을 살펴보았습니다. 대량의 서비스를 관리하고 관련 정보에 집중하는 데 필수적인 서비스 이름을 기준으로 서비스를 필터링하는 방법을 배웠습니다.



