Bake 표준 라이브러리 함수
Bake 표준 라이브러리 함수 (Bake standard library functions)
Bake는 HCL의 표준 라이브러리 함수들을 기본 내장하고 있어요. 이 함수들은 문자열 조작, 산술 연산, 인코딩, 파일·경로 처리 등 다양한 작업에 쓰입니다.
출처: 문서
본문
각 함수를 Bake 파일의 args 값 등에서 ${함수(...)} 형태로 호출해요. 몇 가지 대표적인 함수를 예시와 함께 살펴볼게요.
숫자 관련 함수
절대값과 덧셈 계산:
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
val = "${absolute(-42)}" # => 42
}
}
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
result = "${add(123, 1)}" # => 124
}
}
논리 함수
and로 두 값을 논리곱:
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
result = "${and(true, false)}" # => false
}
}
인코딩 함수
base64 디코딩/인코딩:
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
decoded = "${base64decode("SGVsbG8=")}" # => "Hello"
}
}
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
encoded = "${base64encode("Hello")}" # => "SGVsbG8="
}
}
파일·경로 함수
경로에서 파일명 추출, 바이트 길이·슬라이스, bcrypt 해시:
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
file = "${basename("/usr/local/bin/docker")}" # => "docker"
}
}
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
hash = "${bcrypt("mypassword")}" # => "$2a$10$..."
}
}
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
length = "${byteslen("Docker")}" # => 6
}
}
# docker-bake.hcl
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp:latest"]
args = {
part = "${bytesslice("Docker", 0, 3)}" # => "Doc"
}
}
이 외에도 Bake에 내장된 표준 라이브러리에는 문자열, 컬렉션, 날짜·시간, 파일시스템, IP/네트워크, 매핑, 인코딩 등 수많은 함수가 있어요. 필요한 함수의 정확한 시그니처는 HCL 표준 라이브러리 문서에서 확인할 수 있어요.