docker service ps 명령으로 서비스 작업 목록 확인 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker service ps 명령어를 효과적으로 사용하여 Docker Swarm 서비스 내의 작업을 검사하고 관리하는 방법을 배우게 됩니다. 먼저 서비스와 관련된 작업의 기본 정보를 나열하여 기본 출력에 제공되는 주요 세부 정보를 이해하는 것으로 시작합니다.

기본 목록을 기반으로, 포괄적인 정보를 얻기 위해 --no-trunc 플래그를 사용하여 서비스 작업의 전체 세부 정보를 검색하는 방법을 탐구합니다. 또한 이 랩에서는 이름, 실행 중인 노드, 원하는 상태 등 다양한 기준에 따라 작업을 필터링하여 특정 작업을 정확히 찾아내는 방법을 안내합니다. 마지막으로, docker service ps 명령의 출력을 형식화하여 필요에 따라 표시된 정보를 사용자 정의하는 방법을 배우게 됩니다.

서비스 작업 목록 확인

이 단계에서는 Docker Swarm 에서 특정 서비스와 관련된 작업을 나열하는 방법을 배우게 됩니다. 작업 (task) 은 Swarm 에서 스케줄링의 기본 단위이며, 서비스의 실행 인스턴스를 나타냅니다.

먼저, 서비스가 실행 중인지 확인해 보겠습니다. nginx 이미지를 사용하여 간단한 서비스를 생성합니다.

docker service create --name my-nginx nginx

이 명령어는 nginx 이미지를 사용하여 my-nginx라는 이름의 서비스를 생성합니다. Docker Swarm 은 이 서비스에 대한 작업을 자동으로 생성하고 관리합니다.

이제 my-nginx 서비스의 작업을 나열하려면 docker service ps 명령어를 사용하고 서비스 이름을 뒤에 붙입니다.

docker service ps my-nginx

다음과 유사한 출력을 볼 수 있으며, 서비스와 관련된 작업이 표시됩니다.

ID             NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
<task_id>      my-nginx.1   nginx:latest   <node_name>   Running         Running 5 seconds ago

출력은 각 작업에 대한 정보를 제공하며, ID, 이름, 사용 중인 이미지, 실행 중인 노드, 원하는 상태 (desired state) 및 현재 상태 (current state) 를 포함합니다.

전체 세부 정보와 함께 작업 목록 확인

이전 단계에서는 서비스의 작업에 대한 기본 정보를 나열하는 방법을 배웠습니다. 때로는 전체 작업 ID, 컨테이너 ID 등 각 작업에 대한 더 자세한 정보가 필요합니다.

작업의 전체 세부 정보를 얻으려면 docker service ps 명령어와 함께 --no-trunc 플래그를 사용할 수 있습니다. 이 플래그는 Docker 가 출력을 잘라내지 않도록 하여 전체 ID 및 기타 정보를 표시합니다.

my-nginx 서비스의 작업을 전체 세부 정보와 함께 나열해 보겠습니다.

docker service ps --no-trunc my-nginx

이전 단계와 유사한 출력을 볼 수 있지만, 작업의 상태 및 구성에 따라 전체 작업 ID 와 잠재적으로 더 자세한 정보가 표시됩니다.

ID                                                           NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE            ERROR   PORTS
<full_task_id>                                               my-nginx.1   nginx:latest   <node_name>   Running         Running 10 seconds ago

이 출력을 이전 단계와 비교하면 잘린 버전 대신 전체 작업 ID 를 볼 수 있습니다. 이는 특정 작업을 정확하게 참조해야 할 때, 예를 들어 작업을 검사할 때 유용합니다.

이름 또는 노드로 작업 필터링

더 큰 Swarm 클러스터에서는 여러 노드에서 많은 작업이 실행될 수 있습니다. 특정 작업을 찾으려면 docker service ps의 출력을 작업 이름 또는 실행 중인 노드와 같은 다양한 기준에 따라 필터링할 수 있습니다.

--filter 플래그는 필터링에 사용됩니다. 기본 구문은 --filter "key=value"입니다.

이름으로 작업을 필터링하려면 name 키를 사용할 수 있습니다. 예를 들어, my-nginx로 시작하는 이름을 가진 작업을 찾으려면 다음을 사용할 수 있습니다.

docker service ps --filter "name=my-nginx.1" my-nginx

이 명령어는 my-nginx 서비스에 대한 my-nginx.1이라는 이름의 작업만 표시합니다. 작업 이름은 일반적으로 service_name.task_number 형식입니다.

작업이 실행 중인 노드로 작업을 필터링하려면 node 키를 사용할 수 있습니다. 먼저 작업이 실행 중인 노드의 이름을 알아야 합니다. 이는 docker service ps의 출력에서 얻을 수 있습니다. 노드 이름이 labex-node라고 가정해 보겠습니다.

docker service ps --filter "node=labex-node" my-nginx

이 명령어는 labex-node라는 노드에서 실행 중인 my-nginx 서비스에 대한 작업을 표시합니다. labex-node를 실제 노드 이름으로 바꾸십시오 (다른 경우).

여러 --filter 플래그를 사용하여 필터를 결합할 수 있습니다.

원하는 상태로 작업 필터링

이름 또는 노드로 필터링하는 것 외에도 원하는 상태를 기준으로 작업을 필터링할 수도 있습니다. 원하는 상태는 Swarm 관리자가 작업이 어떤 상태 (예: Running, Shutdown, Rejected) 이 되기를 원하는지 나타냅니다.

원하는 상태로 작업을 필터링하려면 --filter 플래그를 desired-state 키와 함께 사용합니다.

예를 들어, my-nginx 서비스에 대해 현재 Running 상태가 되기를 원하는 작업만 나열하려면 다음을 사용할 수 있습니다.

docker service ps --filter "desired-state=running" my-nginx

my-nginx 서비스가 실행 중이므로 이 명령어는 활성 작업을 표시합니다.

종료된 작업을 보려면 다음을 사용할 수 있습니다.

docker service ps --filter "desired-state=shutdown" my-nginx

현재 이 명령어는 작업을 축소하거나 제거하지 않은 경우 출력을 표시하지 않을 수 있습니다.

Rejected된 작업도 필터링할 수 있습니다. 이 상태는 Swarm 관리자가 작업을 시작할 수 없었음을 나타냅니다.

docker service ps --filter "desired-state=rejected" my-nginx

Swarm 에서 서비스의 상태와 상태를 모니터링하려면 원하는 상태를 이해하는 것이 중요합니다.

서비스 작업 출력 형식 지정

이 마지막 단계에서는 docker service ps 명령의 출력 형식을 사용자 정의하는 방법을 배우게 됩니다. 이는 특정 정보를 추출하거나 출력을 다른 도구와 통합하려는 경우에 유용합니다.

--format 플래그를 사용하면 출력을 형식화하기 위해 Go 템플릿을 지정할 수 있습니다. .ID, .Name, .Image, .Node, .DesiredState, .CurrentState, .Error, .Ports와 같은 자리 표시자를 사용하여 해당 작업 속성을 표시할 수 있습니다.

예를 들어, 테이블 형식으로 작업 ID, 이름 및 이미지 만 표시하려면 다음을 사용할 수 있습니다.

docker service ps --format "table {{.ID}}\t{{.Name}}\t{{.Image}}" my-nginx

이 명령어는 다음과 유사한 출력을 생성합니다.

ID             NAME         IMAGE
<task_id>      my-nginx.1   nginx:latest

스크립팅에 유용한 값 목록으로 출력을 형식화할 수도 있습니다. 예를 들어, 작업 ID 만 가져오려면 다음을 수행합니다.

docker service ps --format "{{.ID}}" my-nginx

그러면 작업 ID 가 출력됩니다.

작업 이름과 실행 중인 노드를 표시하는 다른 형식을 시도해 보겠습니다.

docker service ps --format "Task: {{.Name}} is running on node: {{.Node}}" my-nginx

출력은 다음과 같습니다.

Task: my-nginx.1 is running on node: <node_name>

필요한 출력을 얻으려면 다양한 자리 표시자 및 형식 옵션을 실험해 보십시오.

마지막으로, 생성한 서비스를 정리해 보겠습니다.

docker service rm my-nginx

이 명령어는 my-nginx 서비스와 관련 작업을 제거합니다.

요약

이 랩에서는 docker service ps 명령을 사용하여 Docker Swarm 서비스와 관련된 작업을 나열하는 방법을 배웠습니다. 먼저 간단한 nginx 서비스를 생성한 다음 docker service ps <service_name>을 사용하여 해당 작업을 보고 ID, 이름, 이미지, 노드, 원하는 상태 (Desired State), 현재 상태 (Current State) 와 같은 기본 출력 열을 이해했습니다.

또한 출력 잘림을 방지하기 위해 --no-trunc 플래그를 사용하여 각 작업에 대한 전체 ID 및 기타 포괄적인 세부 정보를 볼 수 있도록 더 자세한 작업 정보를 얻는 방법을 탐구했습니다.