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만 표시하는 데 사용됩니다.
grep 및 awk 명령 조합을 사용하여 짧은 컨테이너 ID를 표시할 수도 있습니다.
$ docker container ls --all | grep web-server-10 | awk '{print $1}'
acdea168264a
여기서 awk 명령은 짧은 컨테이너 ID를 나타내는 출력의 첫 번째 열을 인쇄합니다.
일부 플랫폼에서는 grep 및 awk 명령 을 사용할 수 없습니다. 따라서 이 접근 방식은 이식성이 떨어집니다 .
4. 전체 컨테이너 ID 표시
대부분의 경우 짧은 컨테이너 ID로 충분합니다. 그러나 드물게 모호성을 피하기 위해 전체 컨테이너 ID가 필요합니다.
Docker의 컨테이너 ls child 명령을 사용하여 전체 컨테이너 ID를 표시할 수 있습니다.
$ docker container ls --all --quiet --no-trunc --filter "name=web-server-10"
acdea168264a08f9aaca0dfc82ff3551418dfd22d02b713142a6843caa2f61bf
여기에서는 명령과 함께 –no-trunc 옵션을 사용했습니다 . 이 옵션은 기본 동작을 재정의하고 출력 잘림을 비활성화합니다.
grep 및 awk 명령 의 조합을 사용하여 동일한 결과를 얻을 수 있습니다 .
$ 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-10 및 web-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