소개
이 랩에서는 docker buildx ls 명령어를 사용하여 빌더 인스턴스와 관련 노드를 나열하는 방법을 배우게 됩니다. 사용 가능한 빌드 환경과 해당 구성을 보기 위해 이 명령의 기본적인 사용법을 살펴볼 것입니다.
또한, docker buildx ls의 출력을 Go 템플릿을 사용하여 형식화하여 표시되는 정보를 사용자 정의하는 방법을 배우게 됩니다. 여기에는 특정 필드를 표시하고 빌더 인스턴스와 해당 노드 간의 관계를 시각화하기 위해 출력을 형식화하는 것이 포함됩니다.
모든 빌더 인스턴스 및 노드 목록 확인
이 단계에서는 docker buildx ls 명령어를 사용하여 모든 빌더 인스턴스와 노드를 나열하는 방법을 배우게 됩니다. 이 명령어는 사용 가능한 빌드 환경과 해당 구성을 이해하는 데 유용합니다.
먼저, 빌더 인스턴스와 노드를 나열하는 기본 명령어를 실행해 보겠습니다.
docker buildx ls
다음과 유사한 출력을 볼 수 있습니다.
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default docker
default docker running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x
이 출력은 빌더 인스턴스와 관련 노드에 대한 정보를 제공합니다. NAME/NODE 열은 빌더 인스턴스의 이름과 해당 인스턴스 내의 노드를 보여줍니다. DRIVER/ENDPOINT 열은 사용된 드라이버와 노드의 엔드포인트를 나타냅니다. STATUS 열은 노드의 현재 상태 (예: running) 를 보여줍니다. BUILDKIT 열은 BuildKit 버전을 표시합니다. 마지막으로, PLATFORMS 열은 노드에서 지원되는 플랫폼을 나열합니다.
이 예제에서는 default라는 빌더 인스턴스와 default라는 단일 노드를 볼 수 있습니다. docker 드라이버를 사용하고 있으며 현재 running 상태입니다. 여러 플랫폼을 지원합니다.
Go 템플릿을 사용하여 출력 형식 지정
이 단계에서는 Go 템플릿을 사용하여 docker buildx ls 명령의 출력을 형식화하는 방법을 배우게 됩니다. Go 템플릿은 필요한 정보만 표시하도록 출력 형식을 사용자 정의하는 유연한 방법을 제공합니다.
--format 플래그를 사용하면 Go 템플릿을 지정할 수 있습니다. 템플릿은 {{.Name}}, {{.Driver}}, {{.Status}} 등과 같은 자리 표시자를 사용하여 빌더 인스턴스 및 노드 객체의 다양한 필드에 액세스합니다.
빌더 인스턴스 및 노드의 이름과 드라이버만 표시하도록 출력을 형식화해 보겠습니다.
docker buildx ls --format "{{.Name}}\t{{.Driver}}"
다음과 유사한 출력을 볼 수 있습니다.
default docker
default docker
이 템플릿에서 {{.Name}}은 빌더 또는 노드의 이름을 나타내고, {{.Driver}}는 드라이버를 나타냅니다. \t는 가독성을 높이기 위해 이름과 드라이버 사이에 탭 문자를 삽입하는 데 사용됩니다.
이것은 간단한 Go 템플릿을 사용하여 docker buildx ls 출력에서 특정 정보를 추출하는 방법을 보여줍니다. 다음 단계에서는 출력을 다양한 방식으로 형식화하기 위해 더 복잡한 템플릿을 탐색할 것입니다.
특정 필드로 출력 형식 지정
이 단계에서는 docker buildx ls의 출력을 형식화하고 관심 있는 특정 필드를 표시하기 위해 Go 템플릿을 계속 탐색합니다. 사용자 정의 출력에 포함할 빌더 인스턴스 및 노드 객체에서 다양한 필드를 선택할 수 있습니다.
각 빌더 노드의 이름, 상태 및 지원되는 플랫폼을 표시하도록 출력을 형식화해 보겠습니다.
docker buildx ls --format "{{.Name}}\t{{.Status}}\t{{.Platforms}}"
다음과 유사한 출력을 볼 수 있습니다.
default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x
default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x
이 템플릿에서:
{{.Name}}은 빌더 노드의 이름을 나타냅니다.{{.Status}}는 빌더 노드의 상태 (예:running) 를 나타냅니다.{{.Platforms}}는 빌더 노드에서 지원되는 플랫폼 목록을 나타냅니다.
필드를 탭으로 구분하기 위해 다시 \t를 사용하고 있습니다. 이를 통해 각 노드의 상태와 지원되는 플랫폼을 빠르게 확인할 수 있습니다.
필요에 따라 템플릿에서 다양한 필드를 결합할 수 있습니다. {{.Driver}} 또는 {{.Buildkit}}과 같은 다른 필드를 포함하여 출력이 어떻게 변경되는지 실험해 보십시오.
빌더 및 노드 관계를 표시하도록 출력 형식 지정
이 단계에서는 더 복잡한 Go 템플릿을 사용하여 빌더 인스턴스와 해당 노드 간의 관계를 시각화합니다. 이는 여러 빌더 인스턴스와 노드가 구성된 경우 유용할 수 있습니다.
Go 템플릿 내에서 조건문과 루프를 사용하여 이를 달성할 수 있습니다. 그러나 단순성을 위해, 그리고 기본적인 형식 지정에 집중하기 위해, 어떤 노드가 어떤 빌더 인스턴스에 속하는지 명확하게 보여주는 템플릿을 만들 것입니다.
빌더 이름과 들여쓰기된 해당 노드를 출력하는 템플릿을 사용해 보겠습니다.
docker buildx ls --format "{{range .}}{{if .Builder}}{{.Name}} (Builder){{range .Nodes}}\n - {{.Name}} (Node){{end}}{{else}}\n{{.Name}} (Node){{end}}{{end}}"
다음과 유사한 출력을 볼 수 있습니다.
default (Builder)
- default (Node)
이 템플릿을 분석해 보겠습니다.
{{range .}}...{{end}}: 빌더 인스턴스 및 노드 목록을 반복합니다.{{if .Builder}}...{{else}}...{{end}}: 현재 항목이 빌더 인스턴스인지 확인합니다 (.Builder가 true).- 빌더인 경우:
{{.Name}} (Builder): 빌더의 이름과 "(Builder)"를 출력합니다.{{range .Nodes}}...{{end}}: 현재 빌더 내의 노드를 반복합니다.\n - {{.Name}} (Node): 줄 바꿈, 들여쓰기, "- ", 노드의 이름 및 "(Node)"를 출력합니다.
- 빌더가 아닌 경우 (기본 설정에서는 덜 일반적이지만 독립 실행형 노드인 경우):
\n{{.Name}} (Node): 줄 바꿈, 노드의 이름 및 "(Node)"를 출력합니다.
이 템플릿은 어떤 노드가 어떤 빌더 인스턴스와 연결되어 있는지 명확하게 보여주는 구조화된 출력을 제공합니다. 이 예제는 하나의 빌더와 하나의 노드만 있는 간단한 예제이지만, 이 템플릿은 더 복잡한 buildx 구성을 사용할 때 더 유용해집니다.
요약
이 랩에서는 docker buildx ls 명령을 사용하여 빌더 인스턴스와 관련 노드를 나열하는 방법을 배웠습니다. 기본 명령을 실행하여 시작했으며, 빌더 이름, 노드 이름, 드라이버, 상태, BuildKit 버전 및 지원되는 플랫폼에 대한 세부 정보를 제공하는 기본 출력을 확인했습니다.
또한 --format 플래그를 사용하여 Go 템플릿으로 출력을 형식 지정하는 방법을 살펴보았습니다. 이를 통해 다양한 필드에 대한 자리 표시자를 지정하여 표시되는 정보를 사용자 정의할 수 있으며, 빌더 인스턴스 및 노드에 대한 관련 데이터만 추출하고 표시할 수 있습니다.



