docker secret ls 명령으로 secret 목록 확인하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker secret ls 명령어를 효과적으로 사용하여 Docker swarm 환경 내에서 secret 을 관리하고 보는 방법을 배우게 됩니다. 먼저 Docker swarm 을 초기화하고 샘플 secret 을 생성하는 것으로 시작합니다. 그 후, 모든 기존 secret 을 나열하고, secret 이름과 레이블을 기반으로 출력을 필터링하며, 마지막으로 secret 목록의 출력을 더 나은 가독성과 특정 정보 추출을 위해 형식화하는 방법을 살펴봅니다. 이 실습을 통해 Docker secret 으로 저장된 민감한 데이터를 효율적으로 찾고 관리하는 기술을 습득할 수 있습니다.

모든 secret 목록 확인

이 단계에서는 Docker 환경에서 모든 secret 을 나열하는 방법을 배우게 됩니다. Docker secret 은 비밀번호, TLS 인증서, SSH 키와 같은 민감한 데이터를 관리하는 데 사용됩니다. Docker swarm 에 안전하게 저장되며, swarm 에서 실행되는 서비스에서 액세스할 수 있습니다.

secret 을 나열하기 전에 Docker swarm 을 초기화해야 합니다. Swarm 은 Docker 엔진의 클러스터입니다. 테스트 목적으로 단일 노드에서 swarm 을 초기화할 수 있습니다.

터미널을 열고 다음 명령을 실행하여 swarm 을 초기화합니다.

docker swarm init

swarm 이 초기화되었고 현재 노드가 이제 manager 라는 것을 나타내는 출력을 볼 수 있습니다.

이제 swarm 이 초기화되었으므로 secret 을 생성할 수 있습니다. my_secret_value 값을 가진 my_secret라는 간단한 secret 을 생성합니다.

다음 명령을 실행하여 secret 을 생성합니다.

echo "my_secret_value" | docker secret create my_secret -

이 명령은 문자열 "my_secret_value"를 가져와 docker secret create 명령으로 파이프하고 secret 의 이름을 my_secret로 지정합니다. 마지막의 하이픈 -은 secret 값이 표준 입력에서 읽혀지고 있음을 나타냅니다.

이제 Docker swarm 에 존재하는 secret 을 나열해 보겠습니다. docker secret ls 명령을 사용하여 이 작업을 수행할 수 있습니다.

다음 명령을 실행합니다.

docker secret ls

방금 생성한 secret 의 ID, 이름 및 생성 시간을 보여주는 다음과 유사한 출력을 볼 수 있습니다.

ID                          NAME        CREATED
<secret_id>                 my_secret   About a minute ago

이 명령은 현재 Docker swarm 에서 관리하는 모든 secret 을 나열합니다. 다음 단계에서는 이 출력을 필터링하고 형식화하는 방법을 배우게 됩니다.

이름으로 secret 필터링

이 단계에서는 --filter 플래그와 함께 docker secret ls 명령을 사용하여 secret 목록을 이름으로 필터링하는 방법을 배우게 됩니다. 이는 많은 secret 이 있고 특정 secret 또는 유사한 이름을 가진 secret 그룹을 찾으려는 경우 유용합니다.

이전 단계에서 my_secret라는 secret 을 생성했습니다. 필터링을 시연하기 위해 다른 secret 을 생성해 보겠습니다. 이 secret 의 이름은 another_secret로 지정합니다.

다음 명령을 실행하여 새 secret 을 생성합니다.

echo "another_value" | docker secret create another_secret -

이제 docker secret ls를 다시 실행하면 두 secret 이 모두 표시됩니다.

docker secret ls

출력은 다음과 유사하게 표시되어 my_secretanother_secret가 모두 표시됩니다.

ID                          NAME            CREATED
<secret_id_1>               my_secret       About 2 minutes ago
<secret_id_2>               another_secret  About a few seconds ago

my_secret라는 이름의 secret 만 표시하도록 목록을 필터링하려면 --filter name=my_secret 옵션을 사용할 수 있습니다.

다음 명령을 실행합니다.

docker secret ls --filter name=my_secret

이제 출력은 my_secret라는 이름의 secret 만 표시합니다.

ID                          NAME        CREATED
<secret_id_1>               my_secret   About 2 minutes ago

부분 이름을 사용하여 필터링할 수도 있습니다. 예를 들어, 이름에 "secret"이 포함된 secret 을 필터링하려면 유사한 필터를 사용할 수 있지만, 정확한 이름 일치의 경우 이전 명령이 더 정확합니다. name 필터는 정확히 일치하는 항목을 수행합니다.

이 필터링 기능은 많은 수의 secret 이 있는 환경에서 매우 유용하며, 작업해야 하는 특정 secret 을 빠르게 찾을 수 있습니다.

label 로 secret 필터링

이 단계에서는 레이블을 기반으로 secret 을 필터링하는 방법을 배우게 됩니다. 레이블은 secret 을 포함한 Docker 객체에 연결하여 구성하고 분류할 수 있는 키 - 값 쌍입니다. 레이블별 필터링은 복잡한 환경에서 secret 을 관리하는 강력한 방법입니다.

먼저, 새 secret 을 생성하고 생성하는 동안 레이블을 추가해 보겠습니다. labeled_secret라는 secret 을 생성하고 environment=production 레이블을 추가합니다.

다음 명령을 실행하여 레이블이 있는 secret 을 생성합니다.

echo "production_value" | docker secret create --label environment=production labeled_secret -

이 명령은 이전 docker secret create 명령과 유사하지만, secret 에 레이블을 연결하기 위해 --label environment=production 플래그를 추가했습니다.

이제 다른 레이블이 있는 다른 secret 을 생성해 보겠습니다. 이 secret 의 이름은 dev_secret로 지정하고 environment=development 레이블을 지정합니다.

다음 명령을 실행합니다.

echo "development_value" | docker secret create --label environment=development dev_secret -

docker secret ls를 사용하여 모든 secret 을 나열하면 세 개의 secret 이 모두 표시됩니다.

docker secret ls

출력에는 my_secret, another_secret, labeled_secretdev_secret가 표시됩니다.

secret 을 필터링하고 environment=production 레이블이 있는 secret 만 표시하려면 --filter label=environment=production 옵션을 사용할 수 있습니다.

다음 명령을 실행합니다.

docker secret ls --filter label=environment=production

출력에는 labeled_secret만 표시됩니다.

ID                          NAME            CREATED
<secret_id_3>               labeled_secret  About a minute ago

마찬가지로, environment=development 레이블이 있는 secret 을 필터링하려면 --filter label=environment=development를 사용합니다.

다음 명령을 실행합니다.

docker secret ls --filter label=environment=development

이렇게 하면 dev_secret만 표시됩니다.

ID                          NAME        CREATED
<secret_id_4>               dev_secret  About a minute ago

또한 --filter label=environment를 사용하여 값에 관계없이 특정 레이블 키가 있는 secret 을 필터링할 수 있습니다.

다음 명령을 실행합니다.

docker secret ls --filter label=environment

labeled_secretdev_secret가 모두 environment 레이블 키를 가지고 있기 때문에 둘 다 표시됩니다.

ID                          NAME            CREATED
<secret_id_3>               labeled_secret  About 2 minutes ago
<secret_id_4>               dev_secret      About 2 minutes ago

레이블별 필터링은 자체적으로 정의된 범주를 기반으로 secret 을 관리하고 검색하는 유연한 방법입니다.

secret 목록 출력 형식 지정

이 단계에서는 --format 플래그를 사용하여 docker secret ls 명령의 출력 형식을 지정하는 방법을 배우게 됩니다. 이를 통해 표시되는 정보와 표시 방식을 사용자 정의할 수 있으며, 이는 스크립팅 또는 보고서 생성에 유용합니다.

기본적으로 docker secret ls는 ID, NAME 및 CREATED 열이 있는 테이블을 출력합니다. Go 템플릿 구문을 사용하여 --format 플래그로 이 형식을 변경할 수 있습니다.

예를 들어, secret 이름만 표시하려면 형식 {{.Name}}을 사용할 수 있습니다.

다음 명령을 실행합니다.

docker secret ls --format "{{.Name}}"

이제 출력은 각 secret 의 이름만 새 줄에 나열합니다.

my_secret
another_secret
labeled_secret
dev_secret

여러 필드를 지정하고 테이블로 형식을 지정할 수도 있습니다. 예를 들어, 탭으로 구분된 ID 와 이름을 표시하려면 table {{.ID}}\t{{.Name}}을 사용할 수 있습니다. table 키워드는 출력이 열로 정렬되도록 합니다.

다음 명령을 실행합니다.

docker secret ls --format "table {{.ID}}\t{{.Name}}"

출력은 두 개의 열이 있는 테이블이 됩니다.

ID                          NAME
<secret_id_1>               my_secret
<secret_id_2>               another_secret
<secret_id_3>               labeled_secret
<secret_id_4>               dev_secret

프로그래밍 방식으로 처리하는 데 매우 유용한 JSON 형식으로 정보를 출력할 수도 있습니다. 형식 json을 사용합니다.

다음 명령을 실행합니다.

docker secret ls --format "json"

출력은 각 요소가 secret 을 나타내는 JSON 배열이 됩니다.

[
  {
    "ID": "<secret_id_1>",
    "Name": "my_secret",
    "CreatedAt": "2023-10-27 10:00:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:00:00 +0000 UTC",
    "Labels": {}
  },
  {
    "ID": "<secret_id_2>",
    "Name": "another_secret",
    "CreatedAt": "2023-10-27 10:01:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:01:00 +0000 UTC",
    "Labels": {}
  },
  {
    "ID": "<secret_id_3>",
    "Name": "labeled_secret",
    "CreatedAt": "2023-10-27 10:02:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:02:00 +0002 UTC",
    "Labels": {
      "environment": "production"
    }
  },
  {
    "ID": "<secret_id_4>",
    "Name": "dev_secret",
    "CreatedAt": "2023-10-27 10:03:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:03:00 +0000 UTC",
    "Labels": {
      "environment": "development"
    }
  }
]

--format 플래그는 Docker secret 에 대한 정보를 보고 처리하는 방법에 대한 유연성을 제공합니다.

요약

이 랩에서는 docker secret ls 명령을 사용하여 Docker 환경의 모든 secret 을 나열하는 방법을 배웠습니다. Docker swarm 을 초기화하고 샘플 secret 을 생성하는 것으로 시작했습니다. 그런 다음 docker secret ls를 사용하여 생성된 secret 의 ID, 이름 및 생성 시간을 확인했습니다.

또한 --filter 플래그를 사용하여 이름과 레이블로 secret 목록을 필터링하는 방법과 가독성 또는 스크립팅을 위해 docker secret ls 명령의 출력을 형식화하는 방법을 배웠습니다.