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 컨테이너를 나열하고 필터링하는 방법을 보았습니다 .
더 자세한 논의를 위해 항상 공식 문서 를 확인하는 것이 좋습니다 .