소개
이 랩에서는 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_secret와 another_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_secret 및 dev_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_secret와 dev_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 명령의 출력을 형식화하는 방법을 배웠습니다.



