docker node ps 명령으로 작업 목록 확인 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker node ps 명령을 사용하여 Docker Swarm 노드에서 실행 중인 작업을 나열하고 필터링하는 방법을 배우게 됩니다. 먼저 Docker Swarm 을 초기화하고 작업을 생성하는 간단한 서비스를 생성하는 것으로 시작합니다.

그런 다음 특정 노드의 모든 작업을 나열하고, 이름과 원하는 상태를 기준으로 작업을 필터링하며, 마지막으로 작업 목록의 출력을 더 나은 가독성과 정보 추출을 위해 형식화하는 방법을 살펴봅니다. 이 실습 경험을 통해 Docker Swarm 클러스터 내에서 작업을 모니터링하고 관리하는 실질적인 기술을 습득할 수 있습니다.

노드의 모든 작업 목록 확인

이 단계에서는 Docker Swarm 노드에서 실행 중인 모든 작업을 나열하는 방법을 배우게 됩니다. Docker Swarm 은 Docker 노드 클러스터를 관리할 수 있는 컨테이너 오케스트레이션 도구입니다. 작업 (task) 은 서비스의 실행 인스턴스입니다.

작업을 나열하기 전에 실행 중인 Docker Swarm 서비스가 필요합니다. 이 랩에서는 간단한 nginx 서비스를 사용합니다.

먼저, 이 노드에서 Docker Swarm 을 초기화해 보겠습니다.

docker swarm init

Swarm 이 초기화되었음을 나타내고 조인 토큰을 제공하는 출력을 볼 수 있습니다.

이제 nginx 이미지를 사용하여 my-nginx-service라는 간단한 서비스를 생성해 보겠습니다. 먼저 nginx 이미지를 풀하여 사용할 수 있도록 합니다.

docker pull nginx:latest
docker service create --name my-nginx-service --replicas 1 nginx

docker service create 명령은 하나의 복제본 (replica, 작업 하나) 으로 새 서비스를 생성합니다. Docker 는 이미지가 없으면 자동으로 nginx 이미지를 풀하지만, 미리 명시적으로 풀했습니다.

서비스가 생성되면 Docker 는 Swarm 의 노드 중 하나 (이 경우 현재 노드) 에서 이 서비스에 대한 작업을 시작합니다.

노드에서 실행 중인 모든 작업을 나열하려면 docker node ps 명령을 노드 ID 또는 호스트 이름과 함께 사용할 수 있습니다. 서비스를 생성한 관리자 노드에 있으므로 이 노드의 노드 ID 를 사용할 수 있습니다.

노드 ID 를 찾으려면 docker node ls 명령을 사용할 수 있습니다.

docker node ls

이 명령은 Swarm 의 모든 노드를 나열합니다. 출력에는 노드 ID, 호스트 이름, 상태, 가용성 및 관리자 상태가 표시됩니다. 현재 노드 ( MANAGER STATUS 아래에 Leader가 있는 노드) 의 노드 ID 를 복사합니다.

이제 복사한 노드 ID 와 함께 docker node ps 명령을 사용하여 해당 노드의 작업을 나열합니다. <node_id>를 실제 노드 ID 로 바꿉니다.

docker node ps <node_id>

이 명령은 작업 ID, 서비스 이름, 이미지, 노드, 원하는 상태, 현재 상태 및 오류를 포함하여 지정된 노드에서 실행 중인 작업 목록을 표시합니다. Running 상태로 my-nginx-service.1 작업이 나열되는 것을 볼 수 있습니다.

또는 docker task ls 명령을 사용하여 Swarm 의 모든 작업을 나열할 수 있습니다. 이 명령은 Swarm 의 모든 노드에서 작업을 확인하는 데 유용합니다.

docker task ls

이 명령은 docker node ps와 유사한 정보를 표시하지만 Swarm 의 모든 노드에서 작업을 나열합니다. 노드와 작업이 하나뿐이므로 출력은 docker node ps와 유사합니다.

이 단계에서는 docker node ps를 사용하여 특정 노드의 작업을 나열하고 docker task ls를 사용하여 Swarm 의 모든 작업을 나열하는 방법을 배웠습니다.

이름으로 작업 필터링

이 단계에서는 작업 이름을 기준으로 작업 목록을 필터링하는 방법을 배우게 됩니다. 이는 많은 서비스와 작업이 실행 중이고 특정 서비스와 관련된 작업만 보려는 경우에 유용합니다.

이전 단계에서 생성한 my-nginx-service를 계속 사용합니다.

이름으로 작업을 필터링하려면 docker task ls 명령에서 --filter 플래그와 name 키를 사용할 수 있습니다. 구문은 --filter name=<service_name>입니다.

my-nginx-service에 속하는 작업만 표시하도록 작업을 필터링해 보겠습니다.

docker task ls --filter name=my-nginx-service

이 명령은 서비스 이름이 my-nginx-service인 작업만 나열합니다. my-nginx-service.1 작업이 나열되는 것을 볼 수 있습니다.

서비스 이름과 작업 번호 (예: my-nginx-service.1) 를 포함하는 전체 작업 이름으로도 필터링할 수 있습니다.

docker task ls --filter name=my-nginx-service.1

이 명령은 정확한 이름이 my-nginx-service.1인 작업을 구체적으로 나열합니다.

여러 서비스를 실행 중인 경우 서비스 이름으로 필터링하면 해당 서비스에 대한 모든 작업이 표시됩니다. 예를 들어, my-app-service라는 다른 서비스가 있는 경우 docker task ls --filter name=my-app-service를 실행하면 my-app-service에 대한 모든 작업이 표시됩니다.

이름으로 필터링하는 것은 docker task ls 명령의 출력을 좁히고 관심 있는 작업에 집중하는 강력한 방법입니다.

원하는 상태로 작업 필터링

이 단계에서는 원하는 상태를 기준으로 작업 목록을 필터링하는 방법을 배우게 됩니다. 작업의 원하는 상태는 Docker Swarm 관리자가 해당 작업을 유지하려는 상태입니다 (예: Running, Shutdown, Accepted).

이전 단계에서 생성한 my-nginx-service를 계속 사용합니다. 현재 이 서비스에 대한 작업의 원하는 상태는 Running입니다.

원하는 상태로 작업을 필터링하려면 docker task ls 명령에서 --filter 플래그와 desired-state 키를 사용할 수 있습니다. 구문은 --filter desired-state=<state>입니다.

원하는 상태가 Running인 작업만 표시하도록 작업을 필터링해 보겠습니다.

docker task ls --filter desired-state=Running

이 명령은 원하는 상태가 Running인 작업만 나열합니다. my-nginx-service.1 작업이 나열되는 것을 볼 수 있습니다.

이제 서비스를 0 개의 복제본으로 축소해 보겠습니다. 이렇게 하면 기존 작업의 원하는 상태가 Shutdown으로 변경됩니다.

docker service scale my-nginx-service=0

축소 후 작업은 결국 Shutdown 상태로 전환됩니다. 상태가 업데이트되는 데 잠시 시간이 걸릴 수 있습니다.

이제 원하는 상태가 Shutdown인 작업을 표시하도록 작업을 필터링해 보겠습니다.

docker task ls --filter desired-state=Shutdown

이제 my-nginx-service.1 작업이 원하는 상태가 Shutdown으로 나열되는 것을 볼 수 있습니다.

다른 가능한 원하는 상태에는 Accepted(작업자가 작업을 수락했지만 아직 실행되지 않은 경우) 및 Failed(작업 시작에 실패한 경우) 가 있습니다.

원하는 상태로 필터링하는 것은 서비스의 상태를 모니터링하고 예상 상태가 아닌 작업을 식별하는 데 유용합니다.

작업 출력 형식 지정

이 단계에서는 docker task ls 명령의 출력을 사용자 지정 형식으로 특정 정보를 표시하도록 형식 지정하는 방법을 배우게 됩니다. 이는 스크립팅 또는 보고서 생성에 유용합니다.

my-nginx-service와 해당 작업을 계속 사용합니다.

출력 형식을 지정하려면 Go 템플릿 문자열과 함께 --format 플래그를 사용할 수 있습니다. 템플릿 문자열을 사용하면 표시할 필드와 형식을 지정할 수 있습니다.

작업 ID, 서비스 이름 및 작업의 현재 상태만 표시해 보겠습니다.

docker task ls --format "{{.ID}}\t{{.Service}}\t{{.CurrentState}}"

이 명령에서:

  • {{.ID}}는 작업 ID 를 나타냅니다.
  • {{.Service}}는 서비스 이름을 나타냅니다.
  • {{.CurrentState}}는 작업의 현재 상태를 나타냅니다.
  • \t는 가독성을 높이기 위해 필드 사이에 탭 문자를 삽입하는 데 사용됩니다.

출력은 각 작업에 대한 작업 ID, 서비스 이름 및 현재 상태를 표시합니다.

table 형식을 사용하여 특정 열이 있는 테이블로 출력을 표시할 수도 있습니다.

docker task ls --format "table {{.ID}}\t{{.Service}}\t{{.CurrentState}}\t{{.Node}}"

이 명령은 작업 ID, 서비스, 현재 상태 및 노드에 대한 열이 있는 테이블을 표시합니다.

형식 문자열에서 사용할 수 있는 모든 사용 가능한 필드를 보려면 docker task inspect 명령을 사용하여 작업을 검사하고 JSON 출력을 살펴보면 됩니다. 그러나 몇 가지 일반적인 필드는 다음과 같습니다.

  • .ID: 작업 ID
  • .Service: 서비스 이름
  • .Image: 이미지 이름
  • .Node: 노드 호스트 이름
  • .DesiredState: 작업의 원하는 상태
  • .CurrentState: 작업의 현재 상태
  • .Error: 작업이 실패한 경우 오류 메시지
  • .CreatedAt: 작업이 생성된 타임스탬프
  • .UpdatedAt: 작업이 마지막으로 업데이트된 타임스탬프

작업 ID, 이미지 및 실행 중인 노드를 표시해 보겠습니다.

docker task ls --format "{{.ID}}\t{{.Image}}\t{{.Node}}"

이 명령은 작업 ID, 작업에서 사용되는 이미지 및 작업이 실행 중인 노드를 표시합니다.

출력 형식을 지정하면 빠른 검사 또는 스크립트 사용 여부에 관계없이 필요에 맞게 docker task ls에서 표시되는 정보를 사용자 지정할 수 있습니다.

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

docker service rm my-nginx-service

이 명령은 서비스와 관련 작업을 제거합니다.

요약

이 랩에서는 docker node ps 명령을 사용하여 특정 Docker Swarm 노드에서 실행 중인 작업을 나열하는 방법을 배웠습니다. Docker Swarm 을 초기화하고 하나의 복제본이 있는 간단한 nginx 서비스를 생성하는 것으로 시작했습니다. 그런 다음 docker node ls를 사용하여 현재 관리자 노드의 노드 ID 를 식별하고, 그 후 docker node ps <node_id>를 사용하여 해당 노드에서 실행 중인 모든 작업을 표시했습니다.

또한 이 랩에서는 이름과 원하는 상태를 기준으로 작업을 필터링하고 가독성을 높이기 위해 출력을 형식 지정하여 docker node ps의 출력을 개선하는 방법도 다루었습니다. 이러한 단계는 Docker Swarm 클러스터 내에서 작업을 모니터링하고 관리하기 위한 docker node ps 명령의 유연성을 보여줍니다.