Docker 컨테이너 이름으로 필터링하는 방법

DockerBeginner
지금 연습하기

소개

Docker 는 개발자와 IT 전문가에게 필수적인 도구가 되었으며, 애플리케이션을 컨테이너화하기 위한 강력한 플랫폼을 제공합니다. 이 튜토리얼에서는 Docker 환경을 효과적으로 관리하는 데 중요한 기술인 Docker 컨테이너를 이름으로 필터링하는 방법을 살펴보겠습니다. 이 가이드를 마치면 컨테이너 이름을 기반으로 특정 컨테이너를 효율적으로 찾고 관리할 수 있게 되어 Docker 워크플로우를 최적화할 수 있습니다.

docker ps로 Docker 컨테이너 보기

Docker 컨테이너를 필터링하기 전에 먼저 시스템에서 실행 중인 컨테이너를 보는 방법을 이해해야 합니다. 이를 위한 가장 기본적인 명령어는 docker ps입니다.

docker ps 명령어 이해

docker ps 명령어는 시스템에서 실행 중인 모든 Docker 컨테이너를 나열합니다. 이 명령어를 실행하면 각 컨테이너에 대한 정보가 표시됩니다. 여기에는 다음이 포함됩니다.

  • 컨테이너 ID (Container ID): 컨테이너의 고유 식별자
  • 이미지 (Image): 컨테이너를 생성하는 데 사용된 Docker 이미지
  • 명령어 (Command): 컨테이너 내부에서 실행 중인 명령어
  • 생성됨 (Created): 컨테이너가 생성된 시점
  • 상태 (Status): 컨테이너의 현재 상태
  • 포트 (Ports): 모든 포트 매핑
  • 이름 (Names): 컨테이너의 이름

docker ps 명령어를 실행하여 실행 중인 모든 컨테이너를 확인해 보겠습니다.

docker ps

다음과 유사한 출력을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"             About a minute ago   Up About a minute             db-server
26f8c661f7a5   alpine    "sleep 1000"             About a minute ago   Up About a minute             utility-alpine
a3bb567cc561   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp  cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-frontend

모든 컨테이너 보기

기본적으로 docker ps는 실행 중인 컨테이너만 표시합니다. 중지된 컨테이너를 포함한 모든 컨테이너를 보려면 -a 플래그를 사용하십시오.

docker ps -a

이 명령어는 상태에 관계없이 모든 컨테이너를 표시합니다. 종료되었거나 일시 중지된 컨테이너를 보려는 경우 유용합니다.

컨테이너 ID 만 보기

컨테이너 ID 만 필요한 경우 -q 플래그를 사용할 수 있습니다.

docker ps -q

이것은 컨테이너 ID 만 출력하며, 다른 명령어에 전달해야 할 때 유용할 수 있습니다.

다음 단계에서 필터링으로 넘어가기 전에 터미널에서 이러한 명령어를 사용하여 기본 컨테이너 목록 기능을 익혀보십시오.

이름으로 기본 컨테이너 필터링

이제 Docker 컨테이너를 나열하는 방법을 이해했으므로, 이름을 기준으로 필터링하는 방법을 알아보겠습니다. 여러 컨테이너가 실행 중일 때 특정 컨테이너를 찾는 것은 어려울 수 있습니다. Docker 는 이 작업을 훨씬 쉽게 만들어주는 필터링 기능을 제공합니다.

--filter 옵션 사용

docker ps 명령어는 --filter 또는 -f 옵션을 통해 필터링을 지원합니다. 이름으로 필터링하는 기본 구문은 다음과 같습니다.

docker ps --filter name=<container-name>

이름에 "web"이 포함된 컨테이너를 필터링해 보겠습니다.

docker ps --filter name=web

다음과 유사한 출력을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-frontend

web-frontendweb-backend 컨테이너 모두 이름에 "web"이라는 단어가 포함되어 있으므로 둘 다 표시됩니다.

정확한 이름으로 필터링

정확한 이름을 가진 컨테이너를 필터링하려면 전체 이름을 사용할 수 있습니다.

docker ps --filter name=web-frontend

이 명령어는 정확히 "web-frontend"라는 컨테이너만 표시합니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
d6fe891c1f04   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   80/tcp    web-frontend

여러 필터 사용

여러 --filter 옵션을 추가하여 여러 필터를 적용할 수 있습니다. 예를 들어, 이름에 "web"이 포함되어 있고 "nginx" 이미지에서 빌드된 모든 컨테이너를 찾으려면 다음과 같이 합니다.

docker ps --filter name=web --filter ancestor=nginx

결과는 두 "web" 컨테이너가 모두 nginx 이미지를 사용하므로 첫 번째 필터와 동일해야 합니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-frontend

이름 시작 부분으로 컨테이너 필터링

이름이 특정 문자열로 시작하는 컨테이너를 필터링하려면 다음과 같은 패턴을 사용할 수 있습니다.

docker ps --filter name=^db

이 명령어는 이름이 "db"로 시작하는 컨테이너를 표시합니다.

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"  16 minutes ago   Up 16 minutes             db-server

터미널에서 이러한 필터링 명령어를 사용하여 이름을 기준으로 특정 컨테이너를 찾는 연습을 해보십시오.

고급 필터링 및 출력 형식 지정

이제 기본적인 이름 필터링을 마스터했으므로, docker ps 명령의 출력을 필터링하고 형식 지정하는 몇 가지 더 고급 기술을 살펴보겠습니다. 이러한 기술은 Docker 환경을 보다 효율적으로 관리하는 데 도움이 됩니다.

여러 필터링 기준 결합

Docker 를 사용하면 여러 필터링 기준을 결합하여 결과를 좁힐 수 있습니다. 예를 들어, 이름에 "web"이 포함되어 있고 현재 실행 중인 모든 컨테이너를 찾으려면 다음과 같이 합니다.

docker ps --filter name=web --filter status=running

이렇게 하면 이름에 "web"이 포함된 모든 실행 중인 컨테이너가 표시됩니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-frontend

사용자 지정 출력을 위한 --format 옵션 사용

docker ps 명령은 Go 템플릿을 사용하여 --format 옵션을 통해 사용자 지정 출력 형식 지정을 지원합니다. 이를 통해 원하는 형식으로 필요한 정보만 표시할 수 있습니다.

예를 들어, 컨테이너 이름과 상태만 표시하려면 다음과 같이 합니다.

docker ps --format "table {{.Names}}\t{{.Status}}"

다음과 같은 단순화된 출력을 볼 수 있습니다.

NAMES               STATUS
db-server           Up 26 minutes
utility-alpine      Up 26 minutes
cache-server        Up 26 minutes
web-backend         Up 26 minutes
web-frontend        Up 26 minutes

필터링 및 형식 지정 결합

필터링과 형식 지정을 결합하여 필요한 정보를 정확하게 얻을 수 있습니다.

docker ps --filter name=web --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"

이렇게 하면 이름에 "web"이 포함된 컨테이너의 이름, 이미지 및 상태가 테이블로 표시됩니다.

NAMES               IMAGE               STATUS
web-backend         nginx               Up 27 minutes
web-frontend        nginx               Up 27 minutes

Regex 와 유사한 필터링 사용

Docker 의 필터링 시스템은 일부 Regex 와 유사한 패턴을 지원합니다. 예를 들어, 이름에 "web" 또는 "cache"가 포함된 컨테이너를 찾으려면 다음과 같이 합니다.

docker ps --filter name=web --filter name=cache

이렇게 하면 웹 컨테이너와 캐시 컨테이너가 모두 표시됩니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
a3bb567cc561   redis     "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes   6379/tcp   cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-frontend

실용적인 예: 컨테이너 관리 스크립트

필터링을 실용적인 시나리오에서 사용하는 방법을 보여주는 간단한 스크립트를 만들어 보겠습니다. container-stats.sh라는 새 파일을 만들고 다음 내용을 추가합니다.

nano container-stats.sh

다음 스크립트를 추가합니다.

#!/bin/bash
## This script displays container names, images and status for a filtered set of containers

echo "Web containers:"
docker ps --filter name=web --format "{{.Names}} - {{.Image}} - {{.Status}}"

echo -e "\nCache and database containers:"
docker ps --filter name=cache --filter name=db --format "{{.Names}} - {{.Image}} - {{.Status}}"

파일을 저장하고 (Ctrl+O, Enter, then Ctrl+X) 실행 가능하게 만듭니다.

chmod +x container-stats.sh

이제 스크립트를 실행하여 필터링되고 형식 지정된 컨테이너 정보를 확인합니다.

./container-stats.sh

다음과 유사한 출력을 볼 수 있습니다.

Web containers:
web-backend - nginx - Up 35 minutes
web-frontend - nginx - Up 35 minutes

Cache and database containers:
cache-server - redis - Up 35 minutes
db-server - alpine - Up 35 minutes

이 스크립트는 컨테이너 필터링을 사용하여 Docker 환경에 대한 정보를 더 읽기 쉽고 유용한 방식으로 구성하고 표시하는 방법을 보여줍니다.

컨테이너 필터링의 실용적인 응용

이 단계에서는 일반적인 Docker 관리 작업을 수행하기 위해 컨테이너 필터링의 실용적인 응용을 살펴보겠습니다. 이러한 예제는 컨테이너 관리를 보다 효율적으로 만들기 위해 필터링을 실제 시나리오에서 사용하는 방법을 보여줍니다.

특정 컨테이너 찾기 및 다시 시작

웹 관련 컨테이너를 모두 다시 시작해야 한다고 가정해 보겠습니다. 이름 필터링을 사용하여 해당 컨테이너를 식별한 다음 다시 시작할 수 있습니다.

## 먼저, 웹 컨테이너를 식별합니다.
docker ps --filter name=web

## 이제, 하나씩 다시 시작합니다.
docker restart web-frontend
docker restart web-backend

이러한 명령을 실행한 후 각 컨테이너가 다시 시작되었음을 확인하는 메시지를 볼 수 있습니다.

web-frontend
web-backend

특정 이름 패턴을 가진 모든 컨테이너 찾기 및 제거

특정 이름 패턴을 가진 모든 컨테이너를 제거해야 하는 경우 필터링과 컨테이너 제거를 결합할 수 있습니다.

## 경고: 이것은 데모용입니다. 실제 환경에서는
## 제거하려는 내용을 확실히 알고 있는지 확인하십시오!

## 이름에 "utility"가 포함된 컨테이너 나열
docker ps -a --filter name=utility

유틸리티 컨테이너가 표시됩니다.

CONTAINER ID   IMAGE     COMMAND         CREATED          STATUS          PORTS     NAMES
26f8c661f7a5   alpine    "sleep 1000"    45 minutes ago   Up 45 minutes             utility-alpine

이를 제거하려면 일반적으로 다음을 사용합니다.

## 실제로 이 명령을 실행하여 랩 환경을 보존하지 않습니다.
## docker rm -f $(docker ps -aq --filter name=utility)

대신, 이 명령이 어떻게 작동하는지 살펴보겠습니다.

## 영향을 받을 ID만 가져옵니다.
docker ps -aq --filter name=utility

이렇게 하면 컨테이너 ID 가 출력됩니다.

26f8c661f7a5

필터링을 사용하여 특정 컨테이너 그룹 모니터링

컨테이너 필터링은 대상 모니터링에 유용합니다. 웹 컨테이너의 상태를 확인하는 간단한 모니터링 스크립트를 만들어 보겠습니다.

nano web-monitor.sh

다음 스크립트를 추가합니다.

#!/bin/bash
## This script checks the status of web containers and reports if any are not running

echo "=== Web Container Status Check ==="
docker ps -a --filter name=web --format "{{.Names}}: {{.Status}}"

## Count stopped web containers
STOPPED=$(docker ps -a --filter name=web --filter status=exited --format "{{.Names}}" | wc -l)

if [ $STOPPED -gt 0 ]; then
  echo -e "\nWARNING: $STOPPED web containers are not running!"
else
  echo -e "\nAll web containers are running normally."
fi

파일을 저장하고 (Ctrl+O, Enter, then Ctrl+X) 실행 가능하게 만듭니다.

chmod +x web-monitor.sh

이제 스크립트를 실행하여 웹 컨테이너의 상태를 확인합니다.

./web-monitor.sh

다음과 유사한 출력을 볼 수 있습니다.

=== Web Container Status Check ===
web-backend: Up 50 minutes
web-frontend: Up 50 minutes

All web containers are running normally.

CI/CD 파이프라인에서 필터링

CI/CD 파이프라인에서 컨테이너 필터링은 자동화된 테스트 및 배포에 필수적일 수 있습니다. 특정 이름 패턴을 가진 컨테이너만 대상으로 하는 배포 프로세스를 시뮬레이션하는 스크립트를 만들어 보겠습니다.

nano deploy-update.sh

다음 스크립트를 추가합니다.

#!/bin/bash
## This script simulates updating all containers of a specific type

TARGET_CONTAINERS=$1

if [ -z "$TARGET_CONTAINERS" ]; then
  echo "Usage: $0 <container-name-pattern>"
  exit 1
fi

echo "Preparing to update containers matching pattern: $TARGET_CONTAINERS"
echo "Containers affected:"
docker ps --filter name=$TARGET_CONTAINERS --format "{{.Names}}"

echo -e "\nIn a real deployment, this would:"
echo "1. Pull the latest images"
echo "2. Stop each container"
echo "3. Start new containers with the updated images"
echo "4. Verify the containers are running correctly"

echo -e "\nSimulation completed successfully!"

파일을 저장하고 (Ctrl+O, Enter, then Ctrl+X) 실행 가능하게 만듭니다.

chmod +x deploy-update.sh

이제 웹 컨테이너 업데이트를 시뮬레이션해 보겠습니다.

./deploy-update.sh web

다음과 유사한 출력을 볼 수 있습니다.

Preparing to update containers matching pattern: web
Containers affected:
web-backend
web-frontend

In a real deployment, this would:
1. Pull the latest images
2. Stop each container
3. Start new containers with the updated images
4. Verify the containers are running correctly

Simulation completed successfully!

이러한 실용적인 예제는 컨테이너 필터링을 Docker 워크플로우에 통합하여 컨테이너 관리를 보다 효율적이고 자동화하는 방법을 보여줍니다.

요약

이 랩에서는 모든 규모의 Docker 환경을 관리하는 데 필수적인 기술인 이름으로 Docker 컨테이너를 효과적으로 필터링하는 방법을 배웠습니다. 지금까지 다룬 내용을 검토해 보겠습니다.

  1. 기본 컨테이너 목록 (Basic Container Listing): 실행 중인 컨테이너를 보기 위해 docker ps 명령을 사용하는 방법과 모든 컨테이너를 표시하는 -a와 같은 다양한 옵션을 배웠습니다.

  2. 기본 이름 필터링 (Basic Name Filtering): --filter name= 옵션을 사용하여 정확히 일치하는 항목과 부분적으로 일치하는 항목 모두 이름으로 컨테이너를 찾는 방법을 배웠습니다.

  3. 고급 필터링 및 형식 지정 (Advanced Filtering and Formatting): 여러 필터를 결합하고 --format 옵션을 사용하여 필요한 정보만 표시하도록 출력을 사용자 지정하는 방법을 살펴보았습니다.

  4. 실용적인 응용 (Practical Applications): 모니터링, 관리 및 배포 작업에 컨테이너 필터링을 실제 사용하는 방법을 보여주는 스크립트를 만들었습니다.

이러한 기술은 특히 컨테이너 수가 증가함에 따라 Docker 환경을 보다 효율적으로 관리하는 데 도움이 됩니다. 컨테이너 필터링은 특정 컨테이너를 신속하게 식별하고 관리해야 하는 개발, 테스트 및 프로덕션 환경에서 특히 유용합니다.

Docker 여정을 계속 진행하면서 이름 필터링 외에 볼륨, 네트워크 또는 레이블별 필터링과 같은 다른 필터링 옵션을 살펴보십시오. 이러한 추가 필터링 기술은 컨테이너 관리 기능을 더욱 향상시킬 수 있습니다.