1. 개요

Docker 는 매우 널리 채택된 컨테이너화 기술입니다. 컨테이너에서 다양한 애플리케이션을 실행할 수 있습니다.

컨테이너를 시작할 때 컨테이너 이름을 제어할 수 있지만 ID는 Docker에서 생성됩니다. Docker 호스트에서 특정 작업을 수행하려면 이 ID가 필요할 수 있으므로 이름에서 컨테이너 ID를 찾는 것은 매우 일반적인 요구 사항입니다.

이 짧은 사용방법(예제)에서는 이름에서 컨테이너 ID를 찾는 다양한 방법에 대해 설명합니다.

2. 예제 설정

예시로 사용할 몇 가지 컨테이너를 만들어 보겠습니다.

$ docker container run --rm --name web-server-1 -d nginx:alpine
$ docker container run --rm --name web-server-10 -d nginx:alpine
$ docker container run --rm --name web-server-11 -d nginx:alpine

이제 이러한 컨테이너가 생성되었는지 확인하겠습니다.

$ docker container ls -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
80f1bc1e7feb   nginx:alpine   "/docker-entrypoint.…"   36 seconds ago   Up 36 seconds   80/tcp    web-server-11
acdea168264a   nginx:alpine   "/docker-entrypoint.…"   36 seconds ago   Up 36 seconds   80/tcp    web-server-10
0cbfc6c17009   nginx:alpine   "/docker-entrypoint.…"   37 seconds ago   Up 36 seconds   80/tcp    web-server-1

보시다시피 nginx 이미지를 사용하여 실행 중인 상태의 컨테이너가 세 개 있습니다 .

3. 짧은 컨테이너 ID 표시

Docker는 각 컨테이너에 고유한 ID를 할당합니다. 전체 컨테이너 ID는 64자의 16진수 문자열입니다. 그러나 대부분의 경우 이 컨테이너 ID의 짧은 버전이면 충분합니다. 짧은 컨테이너 ID는 전체 컨테이너 ID의 처음 12자를 나타냅니다. 

Docker의 container ls child 명령을 사용하여 짧은 컨테이너 ID를 표시해 보겠습니다 .

$ docker container ls --all --quiet --filter "name=web-server-10"
acdea168264a

이 예에서는 조건에 따라 출력을 필터링하는 –filter 옵션을 사용했습니다 . 우리의 경우 필터링은 컨테이너 이름에서 수행됩니다.

또한 명령과 함께 –all–quiet 옵션도 사용했습니다. –all 옵션은 기본적으로 실행 중인 컨테이너만 표시하므로 모든 컨테이너를 표시하는 데 필요합니다. –quiet 옵션 컨테이너 ID만 표시하는 데 사용됩니다.

grepawk 명령 조합을 사용하여 짧은 컨테이너 ID를 표시할 수도 있습니다.

$ docker container ls --all | grep web-server-10 | awk '{print $1}'
acdea168264a

여기서 awk 명령은 짧은 컨테이너 ID를 나타내는 출력의 첫 번째 열을 인쇄합니다.

일부 플랫폼에서는 grepawk 명령 을 사용할 수 없습니다. 따라서 이 접근 방식은 이식성이 떨어집니다 .

4. 전체 컨테이너 ID 표시

대부분의 경우 짧은 컨테이너 ID로 충분합니다. 그러나 드물게 모호성을 피하기 위해 전체 컨테이너 ID가 필요합니다.

Docker의 컨테이너 ls child 명령을 사용하여 전체 컨테이너 ID를 표시할 수 있습니다.

$ docker container ls --all --quiet --no-trunc --filter "name=web-server-10"
acdea168264a08f9aaca0dfc82ff3551418dfd22d02b713142a6843caa2f61bf

여기에서는 명령과 함께 –no-trunc 옵션을 사용했습니다 . 이 옵션은 기본 동작을 재정의하고 출력 잘림을 비활성화합니다.

grepawk 명령 의 조합을 사용하여 동일한 결과를 얻을 수 있습니다 .

$ docker container ls --all --no-trunc | grep web-server-10 | awk '{print $1}'
acdea168264a08f9aaca0dfc82ff3551418dfd22d02b713142a6843caa2f61bf

Docker의 컨테이너 검사 자식 명령은 컨테이너에 대한 자세한 정보를 JSON 형식으로 표시합니다. 이를 사용하여 컨테이너 ID를 표시할 수 있습니다.

$ docker container inspect web-server-10 --format={{.Id}}
acdea168264a08f9aaca0dfc82ff3551418dfd22d02b713142a6843caa2f61bf

이 예에서는 Go 템플릿을 사용하여 JSON 출력에서 ​​Id 필드를 추출하는 –format 옵션을 사용했습니다 .

5. 정확한 일치를 사용하여 컨테이너 ID 표시

모든 시나리오에서 기본 grep 또는 container ls child 명령을 사용할 수 없습니다 . 예를 들어 컨테이너 이름이 부분적으로 일치하는 경우 이 순진한 접근 방식은 작동하지 않습니다. 예를 들어 보겠습니다.

web-server-1 컨테이너 의 ID를 표시해 보겠습니다 .

$ docker container ls --all --quiet --filter "name=web-server-1"
80f1bc1e7feb
acdea168264a
0cbfc6c17009

여기서 출력에는 3개의 컨테이너 ID가 표시됩니다. 이는 web-server-1 이라는 이름이 다른 두 컨테이너 web-server-10web-server-11과 부분적으로 일치하기 때문에 발생합니다 . 이를 방지하기 위해 정규식을 사용할 수 있습니다.

이제 컨테이너 이름과 함께 정규식을 사용하겠습니다.

$ docker container ls --all --quiet --filter "name=^web-server-1$"
0cbfc6c17009

이 예에서는 캐럿(^)달러($) 기호를 사용하여 컨테이너 이름과 정확히 일치하도록 했습니다.

비슷한 방식으로 grep 명령 과 함께 -w 옵션을 사용하여 정확한 일치를 적용할 수 있습니다.

$ docker container ls --all | grep -w web-server-1 | awk '{print $1}'
0cbfc6c17009

6. 결론

이 기사에서는 이름을 사용하여 컨테이너 ID를 찾는 방법을 살펴보았습니다.

먼저 컨테이너  ls child 명령과 grep 및 awk 명령 조합을 사용하여 짧은 컨테이너 ID를 표시했습니다.

그런 다음 –no-trunc 옵션과 container inspect child 명령을 사용하여 전체 컨테이너 ID를 표시했습니다.

마지막으로 정규식을 사용하여 컨테이너 이름이 정확히 일치하는지 확인했습니다.

res – REST with Spring (eBook) (everywhere)