Docker Hardened Image 또는 차트 커스터마이즈하기
Docker Hardened Image 또는 차트 커스터마이즈하기
Docker Hub 웹 인터페이스, DHI CLI, 또는 Terraform으로 Docker Hardened Images(DHI)와 차트를 커스터마이즈하는 방법과, OCI 아티팩트를 활용하는 방법을 알아봐요.
출처: 문서
본문
DHI Select 또는 DHI Enterprise 구독이 있으면 Docker Hub 웹 인터페이스를 사용해 Docker Hardened Images(DHI)와 차트를 특정 요구사항에 맞게 커스터마이즈할 수 있어요. 이미지의 경우 베이스 이미지를 선택하고, 패키지를 추가하고, OCI 아티팩트(예: 커스텀 인증서나 추가 도구)를 추가하고, 설정을 구성할 수 있어요. 차트의 경우 이미지 참조를 커스터마이즈할 수 있어요.
커스터마이즈는 자동으로 안전하게 유지돼요. 베이스 Docker Hardened Image나 차트가 보안 패치를 받거나 OCI 아티팩트가 업데이트되면, Docker가 백그라운드에서 커스터마이즈를 자동으로 재빌드해요. 이는 수동 작업 없이 지속적인 컴플라이언스와 기본 제공 보호를 보장해요. 재빌드된 아티팩트는 베이스 이미지와 차트와 동일한 SLSA Build Level 3 표준으로 서명·증명되어, 안전하고 검증 가능한 공급망을 보장해요.
Docker Hardened Image 커스터마이즈하기
조직에 커스터마이즈된 Docker Hardened Image를 추가하려면 조직 소유자가 먼저 Docker Hub의 조직으로 DHI 저장소를 미러링해야 해요. 저장소가 미러링되면 미러링된 DHI 저장소에 접근 권한이 있는 모든 사용자가 커스터마이즈된 이미지를 만들 수 있어요.
DHI CLI 또는 Docker Hub 웹 인터페이스를 사용해 커스터마이즈를 만들 수 있어요.
Docker Hub
-
Docker Hub에 로그인해요.
-
My Hub를 선택해요.
-
네임스페이스 드롭다운에서 미러링된 DHI 저장소가 있는 조직을 선택해요.
-
Hardened Images > Manage > Mirrored Images를 선택해요.
-
커스터마이즈하려는 미러링된 DHI 저장소에서 맨 오른쪽 열의 메뉴 아이콘을 선택해요.
-
Customize를 선택해요.
이 시점부터 화면 지침이 커스터마이즈 프로세스를 안내해요. 더 자세한 내용은 다음 단계를 계속 진행할 수 있어요.
-
커스터마이즈하려는 하나 이상의 이미지 또는 Helm 차트와 버전을 선택해요.
여러 이미지와 버전을 선택할 때 모든 선택 항목은 동일한 배포판과 배포판 버전을 공유해야 해요. 예를 들어
dhi-node:22_alpine3.23과dhi-python:3.13_alpine3.23을 함께 선택할 수 있지만(둘 다 Alpine 3.23),dhi-node:22_debian을 Alpine 이미지와 섞거나alpine3.23과alpine3.22같은 서로 다른 Alpine 버전을 섞을 수는 없어요.또는 여러 Helm 차트 버전을 선택해 모두에 동일한 커스터마이즈를 적용할 수 있어요. 같은 커스터마이즈에서 이미지와 Helm 차트를 섞을 수는 없어요.
-
Next를 선택해요.
-
선택 사항. 패키지를 추가해요.
-
패키지 드롭다운에서 이미지에 추가하려는 패키지를 선택해요.
드롭다운에서 사용할 수 있는 패키지는 선택한 이미지 변형의 OS 시스템 패키지예요. Alpine 기반 이미지 버전 3.23 이상의 경우, Docker가 소스에서 빌드하고 암호화 서명과 완전한 공급망 보안을 갖춘 강화된(hardened) 패키지예요. Alpine 기반 이미지 3.22 버전과 Debian 기반 이미지의 경우 표준 시스템 패키지예요.
-
OCI artifacts 드롭다운에서 먼저 OCI 아티팩트 이미지가 들어 있는 저장소를 선택해요. 그런 다음 해당 저장소에서 사용할 태그를 선택해요. 마지막으로 OCI 아티팩트 이미지에서 포함할 특정 경로를 지정해요.
OCI 아티팩트는 미러링된 DHI와 같은 네임스페이스의 저장소에 이전에 빌드·푸시한 이미지예요. 예를 들어 커스텀 루트 CA 인증서나 Node.js 이미지에 Python을 추가하는 것처럼 필요한 도구가 있는 다른 이미지를 추가할 수 있어요.
단일 커스터마이즈에 여러 OCI 아티팩트 이미지를 추가할 수 있어요. 둘 이상 추가하면 OCI artifacts 드롭다운에서 추가한 순서대로 적용돼요. 여러 이미지에 같은 경로의 디렉터리나 파일이 있으면 나중에 추가된 이미지가 먼저 추가된 이미지의 파일을 덮어써요. 이를 관리하려면 각 OCI 아티팩트 이미지에서 포함할 경로를 선택하고 선택적으로 제외해야 해요. 이렇게 하면 최종 커스터마이즈된 이미지에 어떤 파일이 포함될지 제어할 수 있어요.
기본적으로 OCI 아티팩트 이미지에서 어떤 파일도 포함되지 않아요. 원하는 경로를 명시적으로 포함해야 해요. 경로를 포함한 후에는 그 아래의 파일이나 디렉터리를 명시적으로 제외할 수 있어요.
[!NOTE]
런타임에 필요한 파일이 OCI 아티팩트로 덮어써지면 이미지 빌드는 여전히 성공하지만, 이미지 실행 시 문제가 생길 수 있어요.
자세한 내용은 OCI artifacts를 봐요.
-
Scripts 섹션에서 스크립트를 추가, 편집, 제거할 수 있어요.
스크립트는 런타임에 접근할 수 있는 파일을 컨테이너 이미지에 추가할 수 있게 해줘요. 빌드 프로세스 중에는 실행되지 않아요. 이는
/var/lock이나/out같은 디렉터리에 대한 설정 스크립트나 파일 쓰기처럼 시작 전 초기화가 필요한 서비스에 유용해요.다음을 지정해야 해요.
- 스크립트가 배치될 경로
- 스크립트 내용
- 스크립트의 UID와 GID 소유권
- 스크립트의 8진수 파일 권한
-
-
Next: Configure를 선택해 다음 이미지 설정을 구성해요.
[!NOTE]
한 번에 여러 이미지를 커스터마이즈할 때 이 구성 옵션 중 다수는 기본적으로 제한되며 사용하지 못할 수 있어요.
- 이미지가 포함할 환경 변수와 값을 지정해요.
- 이미지에 레이블을 추가해요.
- 이미지에 annotations를 추가해요.
- 이미지에 추가할 사용자를 지정해요. 사용자를 추가하면 해당 사용자에 대해 0755 권한의 홈 디렉터리가 자동 생성돼요.
- 이미지에 추가할 사용자 그룹을 지정해요.
- 이미지를 실행할 사용자를 선택해요.
- 이미지에
ENTRYPOINT인자를 추가해요. 이 인자는 베이스 이미지의 엔트리포인트에 추가돼요. - 이미지에
CMD인자를 추가해요. 이 인자는 베이스 이미지의 명령에 추가돼요. - 이미지의 기본(
/) 작업 디렉터리를 재정의해요. - 커스터마이즈된 이미지의 태그에 추가되는 커스터마이즈 이름의 접미사를 지정해요. 예를 들어
dhi-python:3.13이미지를 커스터마이즈할 때custom을 지정하면 커스터마이즈된 이미지는dhi-python:3.13_custom으로 태그돼요. - 이미지 레이어의 압축 형식을 선택해요. ZSTD(기본값) 또는 GZIP 압축 중에서 선택할 수 있어요. ZSTD는 일반적으로 더 빠른 이미지 풀과 더 나은 압축 비율을 제공하지만, 오래된 소프트웨어와 호환성 문제가 있을 수 있어요. 오래된 Docker 버전과의 호환성이 필요하다면 GZIP을 사용해요.
- 이미지를 빌드할 플랫폼을 선택해요. 최소 하나의 플랫폼을 선택해야 해요.
-
Next: Review customization을 선택해요.
-
Create Customization을 선택해요.
커스터마이즈 요약이 나타나요. 이미지가 빌드되는 데 시간이 걸릴 수 있어요. 빌드되면 저장소의 Tags 탭에 나타나며, 팀 멤버가 다른 이미지처럼 풀할 수 있어요.
CLI
docker login으로 Docker 자격 증명 또는 Read & Write 권한의 개인 액세스 토큰(PAT), 또는 조직 액세스 토큰(OAT)으로 인증해요. OAT를 사용할 때 사용 가능한 작업은 토큰의 권한 범위에 따라 달라져요.
- 커스터마이즈를 나열하거나 가져오거나 빌드 로그를 보려면 OAT가 대상 저장소에 대해 읽기(pull) 접근 권한이 있어야 해요. 결과는 OAT가 접근할 수 있는 저장소로 제한돼요.
- 커스터마이즈를 생성·업데이트·삭제하려면 OAT가 대상 저장소에 push 접근 권한이 있어야 해요. 벌크 작업은 참조되는 모든 대상 저장소에 대해 push 접근 권한이 필요해요.
docker dhi customization 명령을 사용해요.
# Prepare a single customization scaffold
$ docker dhi customization prepare golang 1.25 \
--org my-org \
--destination my-org/dhi-golang \
--name "golang with git" \
> my-customization.yaml
# Prepare a bulk customization scaffold (pipe JSON array via stdin)
$ echo '[{"destination":"my-org/dhi-golang","tag-definition-id":"golang/alpine-3.23/1.24-dev"}]' \
| docker dhi customization prepare --name "golang with git" --org my-org \
> my-customization.yaml
# Create a customization
$ docker dhi customization create my-customization.yaml --org my-org
# List customizations
$ docker dhi customization list --org my-org
# Filter customizations by name, repository, or source
$ docker dhi customization list --org my-org --filter git
$ docker dhi customization list --org my-org --repo dhi-golang
$ docker dhi customization list --org my-org --source golang
# Get a customization by ID
$ docker dhi customization get <id> --org my-org
# Update a customization
$ docker dhi customization edit my-customization.yaml --org my-org
# Delete a customization by ID
$ docker dhi customization delete <id> --org my-org
# Delete without confirmation prompt
$ docker dhi customization delete <id> --org my-org --force
모든 YAML 필드의 전체 참조는 Image customization YAML file을 봐요.
Terraform
DHI Terraform 공급자를 사용해 DHI 커스터마이즈를 코드형 인프라(IaC)로 관리할 수 있어요. 아직 공급자를 구성하지 않았다면 DHI Terraform provider에서 설정 지침을 봐요.
커스터마이즈마다 dhi_customization 리소스를 정의해요.
resource "dhi_customization" "golang_with_git" {
repository = "dhi-golang"
name = "golang with git"
contents {
packages = ["git", "curl"]
}
platform {
os = "linux"
architecture = "amd64"
}
}
dhi_customization 리소스는 accounts, files, labels, annotations, environment, entrypoint, cmd, user, workdir, stop_signal에 대한 선택적 구성 블록도 지원해요.
terraform apply를 실행해 커스터마이즈를 만들어요.
커스터마이즈를 편집하려면 리소스 구성을 업데이트하고 terraform apply를 실행해요. 삭제하려면 리소스를 제거하고 terraform apply를 실행해요.
리소스 속성의 전체 목록은 Terraform Registry 문서를 봐요.
[!NOTE]
Terraform 공급자를 통한 커스터마이즈 빌드 모니터링은 지원되지 않아요. 빌드를 모니터링하려면 Docker Hub 웹 인터페이스나 DHI CLI를 사용해요.
이미지 커스터마이즈 YAML 파일
CLI를 사용할 때 커스터마이즈는 YAML 파일로 정의돼요. docker dhi customization prepare를 사용해 모든 사용 가능한 필드와 주석 처리된 예시가 있는 스캐폴드를 생성해요. 원하는 내용을 설명하도록 파일을 편집한 다음 docker dhi customization create에 전달해요.
파일은 두 부분으로 구성돼요: 커스터마이즈와 그 대상을 식별하는 서문(preamble), 그리고 무엇을 변경할지 지정하는 구성 섹션.
id 필드 정보
id 필드는 docker dhi customization create를 실행할 때 Docker Hub가 자동으로 할당해요. 새 커스터마이즈를 만들 때는 id를 완전히 생략해요. 읽기 전용이에요.
기존 커스터마이즈의 ID를 찾으려면 다음을 실행해요.
$ docker dhi customization list --org my-org
id는 출력과 docker dhi customization get <id> --org my-org로 가져온 파일에 나타나요. docker dhi customization edit이 어떤 커스터마이즈를 업데이트할지 식별할 수 있게 해줘요. docker dhi customization prepare의 스캐폴드에는 id가 포함되지 않는데, 이는 정상이에요.
대상 설정
name과 targets 필드는 모든 커스터마이즈 파일에 필수예요. targets 배열은 커스터마이즈가 적용되는 이미지 버전을 지정해요. 단일 이미지 커스터마이즈에는 단일 항목을, 여러 이미지에 동일한 구성을 한 번에 적용하는 벌크 커스터마이즈에는 여러 항목을 사용해요.
name: golang with git
targets:
- destination: my-org/dhi-golang
tag_definition_id: golang/alpine-3.23/1.25
| 필드 | 설명 |
|---|---|
name |
사람이 읽을 수 있는 이름. 소문자로 변환되고 하이픈으로 연결되어 이미지 태그 접미사가 됨. 예를 들어 golang with git은 _golang-with-git으로 끝나는 태그를 만듦. |
targets[].destination |
Docker Hub의 대상 저장소(예: my-org/dhi-golang). |
targets[].tag_definition_id |
커스터마이즈할 태그 정의(예: golang/alpine-3.23/1.25). 탭 완성과 함께 docker dhi customization prepare를 사용해 유효한 값을 찾아요. |
[!NOTE]
targets에 항목이 둘 이상이면accounts,entrypoint,cmd필드는 지원되지 않아요. 포함하면docker dhi customization create가 오류를 반환해요.
패키지 추가
커스터마이즈된 이미지에 추가 OS 패키지를 설치하려면 contents.packages 아래에 나열해요. 사용 가능한 패키지는 베이스 이미지 변형에 따라 달라져요.
contents:
packages:
- git
- curl
OCI 아티팩트 추가
커스터마이즈된 이미지에 커스텀 인증서, 내부 도구, 구성 파일 같은 추가 파일을 레이어링하려면 contents.artifacts 아래에 OCI 아티팩트 이미지를 나열해요.
contents:
artifacts:
- name: my-org/my-certs:latest
includes:
- etc/ssl/certs
excludes:
- etc/ssl/certs/old
| 필드 | 설명 |
|---|---|
name |
OCI 아티팩트의 이미지 참조. 미러링된 DHI와 동일한 Docker Hub 네임스페이스에 있어야 함. |
includes |
아티팩트에서 복사할 경로. 기본적으로 어떤 파일도 포함되지 않음. 최소 하나의 경로를 나열해야 함. |
excludes |
includes를 적용한 후 제외할 경로. |
OCI 아티팩트(만드는 방법, 모범 사례, 환경 변수 동작 포함)에 대해 더 알아보려면 OCI artifacts를 봐요.
이미지에 파일 주입
구성 파일이나 시작 스크립트 같은 정적 파일을 빌드 시기에 추가하려면 paths 필드를 사용해요. 파일은 정적 콘텐츠로 추가되며 빌드 중에 실행되지 않아요.
paths:
- path: /etc/myconfig
contents: |
key=value
mode: "0644"
uid: 0
gid: 0
| 필드 | 설명 |
|---|---|
path |
이미지에서 파일이 배치될 절대 경로. |
contents |
파일 내용. 여러 줄 콘텐츠에는 YAML 블록 스칼라(|)를 사용해요. |
mode |
8진수 파일 권한(예: "0644"). YAML이 앞의 0을 8진수 표기로 처리하지 않도록 값을 따옴표로 감싸요. |
uid |
파일 소유자의 사용자 ID. |
gid |
파일 소유자의 그룹 ID. |
사용자 계정 구성
이미지에 사용자나 그룹을 추가하거나 컨테이너가 실행되는 사용자를 변경하려면 accounts 필드를 사용해요.
[!NOTE]
벌크 커스터마이즈(여러
targets)에서는 지원되지 않아요.
accounts:
root: true
runs-as: nonroot
users:
- name: nonroot
uid: 65532
gid: 65532
groups:
- name: nonroot
gid: 65532
members:
- nonroot
| 필드 | 설명 |
|---|---|
root |
root 사용자를 활성화할지 여부. 기본값은 false. runs-as가 root로 설정되면 필수. |
runs-as |
컨테이너가 실행되는 기본 사용자. |
users[].name |
사용자 이름. |
users[].uid |
사용자 ID. |
users[].gid |
기본 그룹 ID. 선택 사항. |
groups[].name |
그룹 이름. |
groups[].gid |
그룹 ID. |
groups[].members |
이 그룹에 추가할 사용자 이름. 선택 사항. |
환경 변수 설정
이미지에 환경 변수를 추가하거나 재정의하려면 environment 필드를 사용해요. 베이스 이미지의 기존 환경과 병합되며 교체하지 않아요.
environment:
MY_VAR: my_value
DEBUG: "false"
YAML 파서가 문자열이 아닌 유형으로 해석할 값(예: "false", "0", "null")은 따옴표로 감싸요.
레이블과 annotations 설정
이미지에 OCI 메타데이터를 추가하려면 labels와 annotations를 사용해요. 레이블은 이미지 구성에 저장되고, annotations는 이미지 매니페스트에 저장돼요. 해당되는 곳에는 OCI 표준 키를 사용해요.
labels:
org.opencontainers.image.authors: [email protected]
org.opencontainers.image.version: "1.0.0"
annotations:
org.opencontainers.image.title: Custom hardened image
org.opencontainers.image.description: Customized Docker Hardened Image
엔트리포인트와 명령 재정의
컨테이너가 시작되는 방식을 변경하려면 entrypoint와 cmd를 사용해요. 이 인자는 베이스 이미지의 기존 엔트리포인트와 명령에 추가돼요.
[!NOTE]
벌크 커스터마이즈(여러
targets)에서는 지원되지 않아요.
entrypoint:
- /docker-entrypoint.sh
cmd:
- /bin/bash
플랫폼과 압축 설정
여러 아키텍처로 빌드하려면 platforms 아래에 나열해요. 최소 하나의 플랫폼이 필요해요.
platforms:
- linux/amd64
- linux/arm64
레이어 압축을 제어하려면 compression을 설정해요. ZSTD(기본값)는 더 나은 압축과 더 빠른 풀을 제공해요. 오래된 도구와의 호환성에는 GZIP을 사용해요.
compression: ZSTD
OCI 아티팩트
DHI 커스터마이즈에서 OCI 아티팩트는 커스텀 인증서, 내부 도구, 구성 파일처럼 이미지에 레이어링하려는 파일이 들어 있는 Docker 이미지예요.
OCI 아티팩트 이미지 만들기
아티팩트 이미지를 가능한 한 최소화하고 필요한 파일만 포함해요.
예를 들어 신뢰하는 CA 번들에 커스텀 루트 CA 인증서를 배포하려면 멀티 스테이지 빌드를 사용할 수 있어요. 이 접근 방식은 인증서를 시스템에 등록하고 업데이트된 CA 번들을 출력하며, 이를 최소 최종 이미지로 추출할 수 있어요.
# syntax=docker/dockerfile:1
FROM dhi.io/bash:5-dev AS certs
ENV DEBIAN_FRONTEND=noninteractive
RUN mkdir -p /usr/local/share/ca-certificates/my-rootca
COPY certs/rootCA.crt /usr/local/share/ca-certificates/my-rootca
RUN update-ca-certificates
FROM scratch
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
이 패턴을 따라 커스터마이즈된 DHI에 포함하려는 도구나 라이브러리가 담긴 이미지 같은 다른 OCI 아티팩트를 만들 수 있어요. 첫 번째 단계에서 필요한 도구나 라이브러리를 설치한 다음, 관련 파일을 FROM scratch를 사용하는 최종 단계로 복사해요. 이렇게 하면 OCI 아티팩트가 최소화되고 필요한 파일만 포함되도록 보장돼요.
OCI 아티팩트가 DHI 커스터마이즈에서 사용 가능하려면 미러링된 DHI 저장소와 같은 네임스페이스의 저장소에 빌드·푸시되어야 해요.
여러 플랫폼(예: linux/amd64와 linux/arm64)용 DHI를 커스터마이즈한다면 --platform 플래그로 모든 플랫폼용 OCI 아티팩트를 빌드해요.
$ docker buildx build --platform linux/amd64,linux/arm64 \
-t <your-namespace>/my-oci-artifact:latest \
--push .
이 명령은 각 플랫폼에 사용할 수 있는 단일 이미지 매니페스트를 만들어요. 커스터마이즈 빌드 시스템은 각 커스터마이즈된 이미지를 빌드할 때 올바른 플랫폼 변형을 자동으로 선택해요.
[!IMPORTANT]
커스터마이즈 UI는 추가한 모든 OCI 아티팩트에서 사용 가능한 플랫폼만 선택할 수 있게 해줘요. 어떤 OCI 아티팩트에 플랫폼이 없으면 해당 플랫폼을 커스터마이즈에 선택할 수 없어요.
조직 네임스페이스의 저장소에 푸시되면, 커스터마이즈된 Docker Hardened Image에 추가할 OCI 아티팩트를 선택할 때 OCI 아티팩트가 커스터마이즈 워크플로에 자동으로 나타나요.
환경 변수
커스터마이즈에 OCI 아티팩트를 포함하면 해당 아티팩트에 정의된 환경 변수가 최종 이미지에 병합돼요. 병합은 다음 규칙을 따라요.
- 커스터마이즈의 환경 설정이 우선해요. 아티팩트의 변수는 해당 키가 커스터마이즈에 없거나 비어 있을 때만 적용돼요.
PATH는 예외예요. 아티팩트의PATH항목이 기존PATH앞에 추가되어 런타임 우선순위를 얻어요.
이것은 Dockerfile의 COPY --from과 다르며, COPY --from은 소스 이미지의 환경 변수를 상속하지 않고 파일만 복사해요. 환경 변수를 상속하지 않으려면 FROM scratch 최종 단계로 아티팩트를 빌드해요. OCI 아티팩트 이미지 만들기를 참조해요.
모범 사례(Best practices)
DHI 커스터마이즈용 OCI 아티팩트를 만들 때 다음 모범 사례를 따르세요.
-
멀티 스테이지 빌드 사용: 빌더 단계에서 의존성을 빌드하거나 설치한 다음, 필요한 파일만
FROM scratch최종 단계로 복사해요. 이렇게 하면 OCI 아티팩트가 최소화되고 빌더 이미지의 환경 변수가 커스터마이즈로 상속되는 것을 피할 수 있어요. -
필수 파일만 포함: OCI 아티팩트에는 커스터마이즈된 이미지에 추가해야 하는 파일만 포함해야 해요. 최종 이미지에서 사용되지 않을 패키지 매니저, 셸, 기타 유틸리티를 포함하지 마세요.
-
대상 플랫폼 매칭: 커스터마이즈에서 사용할 모든 플랫폼용 OCI 아티팩트를 빌드해요. 필요할 때
docker buildx build --platform으로 멀티플랫폼 이미지를 만들어요. -
특정 태그 사용:
latest에만 의존하지 말고 OCI 아티팩트를 특정 버전이나 날짜(예:v1.0또는20250101)로 태그하세요. 이렇게 하면 재현 가능한 빌드를 보장하고 어떤 아티팩트가 어떤 커스터마이즈에 사용되는지 추적하기 쉬워져요. -
불변 태그 활성화: OCI 아티팩트 저장소에 불변 태그(immutable tags)를 활성화하는 것을 고려하세요. 이렇게 하면 실수로 덮어쓰는 것을 방지하고 OCI 아티팩트의 각 버전이 변경되지 않도록 보장해, 커스터마이즈의 재현성과 신뢰성이 향상돼요.
DHI Helm 차트 커스터마이즈하기
DHI Helm 차트를 조직의 특정 요구사항에 맞게 커스터마이즈할 수 있어요. Docker Hub 웹 인터페이스를 통해 이미지 참조를 미러링된 이미지나 만든 커스터마이즈된 이미지를 참조하도록 수정할 수 있어요. 이렇게 하면 Docker Hub나 다른 프라이빗 레지스트리에 저장된 이미지를 참조하는 커스텀하고 안전하게 빌드된 차트를 만들 수 있어요. DHI는 어디에 저장되어 있든 내 저장소를 참조하는 커스터마이즈된 Helm 차트를 기본적으로 안전하게 패키징해요.
이미지 참조를 커스터마이즈하려면 조직 소유자가 DHI 차트 저장소를 Docker Hub의 조직으로 미러링해야 해요.
Helm 차트 저장소마다 차트 커스터마이즈를 하나 만들 수 있어요. 이것은 저장소당 여러 커스터마이즈를 만들 수 있는 이미지 커스터마이즈와 다르다는 점을 유의하세요. 변경이 필요하면 기존 커스터마이즈를 편집할 수 있어요. 또는 동일한 Helm 차트 저장소를 다시 미러링하고 새 미러에 새 커스터마이즈를 추가할 수도 있어요.
[!NOTE]
Docker Hub 밖에서 표준 Helm 도구와 관행(예:
values.yaml파일)을 사용해 Docker Hardened Image 차트를 다른 Helm 차트처럼 커스터마이즈할 수 있어요. 다음 지침은 Docker Hub 웹 인터페이스를 사용해 차트의 이미지 참조를 커스터마이즈하는 방법을 설명해요.
미러링된 Docker Hardened Image Helm 차트를 커스터마이즈하려면:
-
Docker Hub에 로그인해요.
-
My Hub를 선택해요.
-
네임스페이스 드롭다운에서 미러링된 DHI 저장소가 있는 조직을 선택해요.
-
Hardened Images > Manage > Mirrored Helm charts를 선택해요.
-
커스터마이즈하려는 미러링된 DHI 저장소에서 Name을 선택해요.
-
Customizations 탭을 선택해요.
-
Create customization을 선택해요.
이 시점부터 화면 지침이 커스터마이즈 프로세스를 안내해요.
Helm 차트 커스터마이즈 YAML 파일
CLI를 사용할 때 Helm 차트 커스터마이즈는 이미지 커스터마이즈와 동일한 prepare / create 워크플로를 사용하지만, 구성 섹션은 이미지 필드 대신 reference_mappings를 사용해요.
reference_mappings를 사용해 차트 내 이미지 참조를 대체해요. 예를 들어 차트의 이미지 참조가 미러링된 DHI를 가리키도록 만들 수 있어요.
name: use mirrored images
targets:
- destination: my-org/dhi-haproxy-chart
tag_definition_id: haproxy/helm/1
reference_mappings:
- from: dhi/haproxy
to: my-org/dhi-haproxy
| 필드 | 설명 |
|---|---|
reference_mappings[].from |
차트에서 대체할 이미지 참조. |
reference_mappings[].to |
교체할 이미지 참조(일반적으로 조직의 미러링된 DHI). |
커스터마이즈 빌드 모니터링
커스터마이즈를 만든 후 Docker Hub나 DHI CLI를 통해 빌드 상태를 추적하고 로그를 볼 수 있어요.
Docker Hub
- Docker Hub에 로그인해요.
- My Hub를 선택해요.
- 네임스페이스 드롭다운에서 조직을 선택해요.
- Hardened Images > Manage를 선택해요.
- Customizations 탭을 선택해요.
CLI
커스터마이즈의 빌드 나열:
$ docker dhi customization build list <customization-id> --org my-org
특정 빌드의 세부 정보 가져오기:
$ docker dhi customization build get <customization-id> <build-id> --org my-org
빌드 로그 보기:
$ docker dhi customization build logs <customization-id> <build-id> --org my-org
커스터마이즈 편집 또는 삭제
Docker Hub
- Docker Hub에 로그인해요.
- My Hub를 선택해요.
- 네임스페이스 드롭다운에서 미러링된 저장소가 있는 조직을 선택해요.
- Hardened Images > Manage를 선택해요.
- Customizations를 선택해요.
- 관리하려는 커스터마이즈된 DHI 저장소에서 맨 오른쪽 열의 메뉴 아이콘을 선택해요. 여기서 다음을 할 수 있어요.
- Edit: 커스터마이즈 편집.
- Create new: 소스 저장소를 기반으로 새 커스터마이즈 생성.
- Delete: 커스터마이즈 삭제.
- 편집 또는 삭제를 완료하려면 화면 지침을 따라요.
CLI
커스터마이즈를 편집하려면 YAML 파일을 업데이트하고 실행해요.
$ docker dhi customization edit my-customization.yaml --org my-org
YAML 파일에는 업데이트할 커스터마이즈를 식별하는 id 필드가 포함되어야 해요. ID를 찾으려면 docker dhi customization list --org my-org을 실행해요.
ID로 커스터마이즈를 삭제하려면:
$ docker dhi customization delete <id> --org my-org
$ docker dhi customization delete <id> --org my-org --force
--force 플래그는 확인 프롬프트를 건너뜁니다.