1. 개요

Docker는 다양한 상태의 컨테이너를 나열하고 필터링하는 다양한 옵션 또는 List 출력을 사용자 지정하는 옵션을 제공합니다.

이 사용방법(예제)에서는 다양한 방법으로 Docker 컨테이너필터링하는 방법을 살펴보겠습니다 .

2. 컨테이너 나열

Docker 컨테이너를 나열하기 위해 "docker ps"  또는 "docker container ls" 명령을 사용할 수 있습니다. 이 명령은 특정 Docker 엔진의 모든 컨테이너를 나열하고 필터링하는 다양한 방법을 제공합니다.

실행 중인 모든 컨테이너를 나열하여 시작하겠습니다.

2.1. 별칭

현재 도커 1.13 의 부두 노동자의 팀은과 상호 작용하는 것 논리적 개체 아래 앉아에 모든 명령을 전열을 정비했습니다 . 예를 들어,하기 위해 List 도커 용기 ,뿐만 아니라 " 고정 표시기 추신" , 우리가 사용할 수있는  " 고정 표시기 컨테이너 List"  또는  " 고정 표시기 컨테이너 ls"의  명령을 사용합니다.

이 세 가지 별칭은 모두 동일한 옵션 그룹을 지원합니다. 그러나 새 구문을 채택하는 것이 좋습니다.

2.2. 컨테이너 실행

우리가 사용하는 경우  " 고정 표시기 컨테이너 ls"의  옵션없이 명령을, 다음은 실행중인 모든 컨테이너를 나열 할 수 있습니다 :

$ docker container ls
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                NAMES
1addfea727b3        mysql:5.6            "docker-en.."   2 seconds ago       Up 1 second         0.0.0.0:32801->3306/tcp              dazzling_hellman
09c4105cb356        nats:2.1.0-scratch   "/nats-…"       17 minutes ago      Up 17 minutes       4222/tcp, 6222/tcp, 8222/tcp         nats-1
443fc0c41710        rabbitmq:3.7         "docker-…"      17 minutes ago      Up 17 minutes       4369/tcp, 5671-5672/tcp, 25672/tcp   rabbit-1
b06cfe3053e5        postgres:11          "docker-…"      29 minutes ago      Up 29 minutes       0.0.0.0:32789->5432/tcp              pg-2
4cf774b9e4a4        redis:5              "docker-…"      30 minutes ago      Up 30 minutes       0.0.0.0:32787->6379/tcp              redis-2

위에 표시된 것처럼 지금까지 Nats, RabbitMQ, PostgreSQL, MySQL, Redis 등 5개의 실행 중인 컨테이너가 있습니다.

기본적으로 출력에는 실행 중인 각 컨테이너에 대한 몇 가지 세부 정보가 표시됩니다.

  • "CONTAINER ID"는 컨테이너 고유 식별자입니다. 이 식별자는 꽤 긴 SHA-256 해시의 잘린 버전입니다.
  • "IMAGE"는 컨테이너 이미지 이름과 postgres:11 과 같이 콜론으로 구분된 태그입니다  .
  • "COMMAND"는 컨테이너 실행을 담당하는 명령입니다.
  • "CREATED"는 컨테이너가 생성된 시간을 보여줍니다.
  • "STATUS"는 컨테이너 상태를 나타냅니다. 위에서 언급했듯이 이 모든 컨테이너는 실행 중입니다.
  • "PORTS"는 호스트 시스템과 컨테이너 내부 간의 포트 매핑을 보여줍니다. 예를 들어 "0.0.0.0:32789->5432/tcp"  는 호스트의 포트 32789  가 컨테이너 내부의 포트 5432에 매핑 됨을 의미합니다  . 또한 Nats 컨테이너에 대해 "4222/tcp, 6222/tcp, 8222/tcp" 포트를 매핑하지 않았음을 알 수 있습니다. 
  • "NAMES"는 pg-2 와 같이 사람이 읽을 수 있는 Docker 컨테이너 이름을 나타냅니다.

이제 각 열의 의미에 대해 알아야 합니다. 따라서 이제부터는 간결성을 위해 이러한 열의 하위 집합만 표시합니다.

2.3. 모든 컨테이너

기본적으로  " docker container ls"  명령은 실행 중인 컨테이너만 표시합니다. 그러나 -a  또는  –all  옵션을 전달하면  모든 (중지 및 실행 중인) 컨테이너가 나열됩니다 .

$ docker container ls -a
CONTAINER ID        IMAGE                STATUS
1addfea727b3        mysql:5.6            Up 4 hours
32928d81a65f        mysql:5.6            Exited (1) 4 hours ago
09c4105cb356        nats:2.1.0-scratch   Up 4 hours
443fc0c41710        rabbitmq:3.7         Up 4 hours
b06cfe3053e5        postgres:11          Up 4 hours
16d3c67ebd40        postgres:11          Exited (0) 4 hours ago
4cf774b9e4a4        redis:5              Up 4 hours
99c537a3dd86        redis:5              Exited (0) 4 hours ago

위에 표시된 것처럼 이제 몇 시간 전에 중지된 세 개의 컨테이너(Redis, MySQL 및 PostgreSQL)가 있습니다.

2.4. 최신 컨테이너

마지막 n개의 Docker 컨테이너(실행 중 및 중지됨)  를 보려면  -n <number>  또는  –last <number> 옵션을 사용할 수  있습니다.

$ docker container ls -n 2
CONTAINER ID        IMAGE               STATUS
1addfea727b3        mysql:5.6           Up 4 hours
32928d81a65f        mysql:5.6           Exited (1) 4 hours ago

-l 또는  –latest  옵션을 통해 최신 컨테이너를 볼 수도 있습니다  .

$ docker container ls --latest
CONTAINER ID        IMAGE               STATUS
1addfea727b3        mysql:5.6           Up 4 hours

물론 -n 1  옵션을 사용하여 동일한 결과를 얻을 수 있습니다 .

2.5. 잘림 비활성화

기본적으로 Docker는 값이 일부 임계값보다 길면 출력 열을 자릅니다. 사실, 우리는 이미 컨테이너 ID에 대해 잘린 값을 보았습니다.

이것은 대부분의 경우 좋은 기능이지만 –no-trunc  옵션을 사용하여 비활성화할 수 있습니다  .

$ docker container ls --latest --no-trunc
CONTAINER ID                                                       COMMAND
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7   "docker-entrypoint.sh mysqld"

위에 표시된 것처럼 출력 열은 이제 훨씬 더 장황해졌습니다.

2.6. 저소음 모드

컨테이너의 컨테이너 ID만 보는 것도 가능합니다 . 이렇게 하려면 -q  또는  –quiet  옵션을 사용할 수 있습니다  .

$ docker container ls -q
1addfea727b3
09c4105cb356
443fc0c41710
b06cfe3053e5
4cf774b9e4a4

옵션을 혼합하여 일치시키고 전체 컨테이너 식별자를 볼 수 있습니다.

$ docker container ls --quiet --no-trunc
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7
09c4105cb3567ba0070dacf7381b9946165908c819c0841cffaa1855766537c7
443fc0c41710ee3811e72fe5079bf4696b9318e0754c38eeab1c960f5c5a7007
b06cfe3053e521704c67a1902a7302665ae05f66ef592419f32b8c73b2a066fd
4cf774b9e4a487a2ba658de37273994161378cffe7e69fe5c928ad29e6946372

자동 모드는 ID 모음을 다른 명령에 전달할 때 특히 유용할 수 있습니다 . 예를 들어 다음은 모든 컨테이너를 강제로 삭제하는 방법입니다.

$ docker container rm -f $(docker container ls -aq)

물론 이러한 종류의 조합은 매우 주의해서 사용해야 합니다.

2.7. 컨테이너 크기

-s  또는  –size  옵션을 통해 디스크에서 컨테이너의 크기와 이미지를 볼 수  있습니다.

$ docker container ls --latest -s
CONTAINER ID        IMAGE               SIZE
1addfea727b3        mysql:5.6           2B (virtual 256MB)

첫 번째 값(2B) 은 각 컨테이너 쓰기 가능한 계층사용되는 바이트 수를 나타냅니다 . 두 번째 값은 디스크의 이미지 크기로 이 경우 256MB입니다.

2.8. 맞춤형 출력

기본 출력 형식이 마음에 들지 않으면 Go 템플릿을 사용하여 출력을 사용자 지정할 수 있습니다 . 원하는 형식을 –format 옵션 에 전달하기만 하면  됩니다. 이에 대한 간단한 예를 살펴보겠습니다.

$ docker container ls --format "{{.ID}} -> Based on {{.Image}}, named {{.Names}}, ({{.Status}})"
1addfea727b3 -> Based on mysql:5.6, named dazzling_hellman, (Up 3 hours)
09c4105cb356 -> Based on nats:2.1.0-scratch, named nats-1, (Up 4 hours)
443fc0c41710 -> Based on rabbitmq:3.7, named rabbit-1, (Up 4 hours)
b06cfe3053e5 -> Based on postgres:11, named pg-2, (Up 4 hours)
4cf774b9e4a4 -> Based on redis:5, named redis-2, (Up 4 hours)

여기서는 기본적으로 Go 템플릿 형식의 템플릿 문자열을 사용했습니다. ID이미지이름 및  상태는  자리이며,있는 그대로 텍스트의 나머지 부분은 렌더링됩니다.

또한 열을 표 형식으로 표시할 수 있습니다 . 테이블  접두사 만 사용하면 됩니다  .

$ docker container ls --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
CONTAINER ID        IMAGE                NAMES
1addfea727b3        mysql:5.6            dazzling_hellman
09c4105cb356        nats:2.1.0-scratch   nats-1
443fc0c41710        rabbitmq:3.7         rabbit-1
b06cfe3053e5        postgres:11          pg-2
4cf774b9e4a4        redis:5              redis-2

템플릿 문자열에서 사용할 수 있는 필드를 자세히 살펴보겠습니다.

  • .ID — 컨테이너 ID
  • .Image — 이미지 이름과 태그
  • .Command — 이 컨테이너 실행을 담당하는 명령
  • .CreatedAt — 컨테이너 생성 시간
  • .Running — 컨테이너가 시작된 이후 경과된 시간
  • .Ports — 포트 매핑
  • .Status — 컨테이너 실행 상태
  • .Size — 컨테이너 및 이미지 디스크 크기
  • .Names — 컨테이너 이름
  • .Labels — 컨테이너에 할당된 모든 레이블
  • .Mounts — 컨테이너의 볼륨
  • .Networks — 컨테이너에 연결된 모든 네트워크 이름

2.9. 고급 필터링

지금까지는 실행 중 또는 중지 상태를 기준으로 컨테이너만 필터링했습니다. 결과적으로 " 도커 컨테이너 ls"  는 이 기본적인 필터링보다 훨씬 더 많은 것을 제공합니다.

컨테이너를 필터링하기 위해 -f  또는  -filter  옵션을 사용할 수 있습니다  . 예를 들어, 여기에서 종료  상태의 컨테이너를 필터링할 것입니다  .

$ docker container ls --filter "status=exited"
CONTAINER ID        IMAGE               STATUS
32928d81a65f        mysql:5.6           Exited (1) 8 hours ago
16d3c67ebd40        postgres:11         Exited (0) 9 hours ago
99c537a3dd86        redis:5             Exited (0) 9 hours ago

위에 표시된 대로 key=value  형식으로 필터 기준을 전달해야  합니다.

여러 필터를 동시에 적용하려면 여러 –filter  옵션을 전달해야 합니다  . 예를 들어, 더 나아가 종료 상태가 1인 종료  컨테이너 만 유지할 수 있습니다  .

$ docker container ls --filter "status=exited" --filter "exited=1"
CONTAINER ID        IMAGE               STATUS
32928d81a65f        mysql:5.6           Exited (1) 8 hours ago

예상할 수 있듯이 이제 MySQL만 필터 기준과 일치합니다. 실행 중이거나 중지된 상태가 유일한 Docker 컨테이너 상태는 아닙니다. 실제로 Docker 컨테이너를 일시 중지하면 다음과 같습니다.

$ docker container pause redis-2

그런 다음 일시 중지된 모든 컨테이너를 필터링할 수 있습니다.

$ docker container ls --filter "status=paused"
CONTAINER ID        IMAGE               STATUS
4cf774b9e4a4        redis:5             Up 45 minutes (Paused)

- 또한, 우리는 가능한 상태 중 하나로 용기를 필터링 할 수 있습니다 생성 , 다시 시작 , 실행 , 제거 , 일시 정지 , 종료 , 또는 죽은 .

컨테이너 이름의 일부를 알고 있으면 검색할 수 있습니다.

$ docker container ls -a --filter "name=pg"
CONTAINER ID        IMAGE               STATUS
b06cfe3053e5        postgres:11         Up 18 minutes
16d3c67ebd40        postgres:11         Exited (0) 9 hours ago

기본 이미지를 기반으로 컨테이너를 필터링할 수도 있습니다.

$ docker container ls -a --filter "ancestor=postgres"
CONTAINER ID        IMAGE               STATUS
b06cfe3053e5        postgres:11         Up 28 minutes
16d3c67ebd40        postgres:11         Exited (0) 9 hours ago

여기서는 postgres  이미지를 기반으로 하는 컨테이너만 나열합니다 .

생성 시간을 기준으로 컨테이너를 필터링하는 것도 가능합니다. 예를 들어 여기서는 Nat 컨테이너 이전에 생성된 컨테이너만 유지합니다.

$ docker container ls --filter "before=nats-1"
CONTAINER ID        IMAGE               STATUS
443fc0c41710        rabbitmq:3.7        Up 52 minutes
b06cfe3053e5        postgres:11         Up 52 minutes
4cf774b9e4a4        redis:5             Up 52 minutes (Paused)

다른 한편으로, 우리는 내셔널스 하나는 사용 후 생성 된 모든 도커 용기 나열 할 수  있기 때문에  필터를 :

$ docker container ls --filter "since=nats-1"
CONTAINER ID        IMAGE               STATUS
2fdc65a6effb        mysql:5.6           Exited (137) 4 days ago
1addfea727b3        postgres:11         Exited (0) 3 days ago

3. 결론

이 사용방법(예제)에서는 "docker container ls" 명령과 유용한 옵션을 사용하여 Docker 컨테이너를 나열하고 필터링하는 방법을 보았습니다 .

더 자세한 논의를 위해 항상 공식 문서 를 확인하는 것이 좋습니다 .

Generic footer banner