2.5. 빌드 전략 사용
다음 섹션에서는 지원되는 주요 빌드 전략과 이러한 전략을 사용하는 방법을 정의합니다.
2.5.1. Docker 빌드
OpenShift Container Platform은 Buildah를 사용하여 Dockerfile에서 컨테이너 이미지를 빌드합니다. Dockerfile을 사용하여 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 Dockerfile 참조 문서를 참조하십시오.
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정하는 경우 Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
2.5.1.1. Dockerfile FROM 이미지 교체
Dockerfile의 FROM
명령을 BuildConfig
오브젝트의 from
으로 교체할 수 있습니다. Dockerfile에서 다중 단계 빌드를 사용하는 경우 마지막 FROM
명령의 이미지가 교체됩니다.
프로세스
Dockerfile의 FROM
명령을 BuildConfig
오브젝트의 from
으로 교체
strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
2.5.1.2. Dockerfile 경로 사용
기본적으로 Docker 빌드는 BuildConfig.spec.source.contextDir
필드에 지정된 컨텍스트의 루트에 있는 Dockerfile을 사용합니다.
dockerfilePath
필드를 사용하면 BuildConfig.spec.source.contextDir
필드와 상대되는 다른 경로를 사용하여 Dockerfile을 찾을 수 있습니다. 파일 이름은 기본 Dockerfile(예: MyDockerfile
) 또는 하위 디렉터리의 Dockerfile 경로(예: dockerfiles/app1/Dockerfile
)와 다를 수 있습니다.
프로세스
빌드에서 다른 경로를 사용하여 Dockerfile을 찾도록 dockerfilePath
필드를 사용하려면 다음과 같이 설정합니다.
strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
2.5.1.3. Docker 환경 변수 사용
Docker 빌드 프로세스 및 생성된 이미지에 환경 변수를 사용할 수 있도록 빌드 구성의 dockerStrategy
정의에 환경 변수를 추가할 수 있습니다.
정의된 환경 변수는 FROM
명령 직후 단일 ENV
Dockerfile 명령으로 삽입되어 나중에 Dockerfile 내에서 참조할 수 있습니다.
프로세스
변수는 빌드 중 정의되고 출력 이미지에 유지되므로 해당 이미지를 실행하는 모든 컨테이너에도 존재합니다.
예를 들어 다음은 빌드 및 런타임 중 사용할 사용자 정의 HTTP 프록시를 정의합니다.
dockerStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
oc set env
명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.
2.5.1.4. Docker 빌드 인수 추가
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정할 수 있습니다. 빌드 인수는 빌드가 시작될 때 Docker로 전달됩니다.
Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
절차
Docker 빌드 인수를 설정하려면 BuildConfig
오브젝트의 dockerStrategy
정의에 있는 buildArgs
배열에 항목을 추가합니다. 예를 들면 다음과 같습니다.
dockerStrategy: ... buildArgs: - name: "foo" value: "bar"
name
및 value
필드만 지원됩니다. valueFrom
필드의 설정은 모두 무시됩니다.
2.5.1.5. Docker 빌드가 포함된 스쿼시 계층
Docker 빌드는 일반적으로 Dockerfile의 각 명령을 나타내는 계층을 생성합니다. imageOptimizationPolicy
를 SkipLayers
로 설정하면 모든 명령을 기본 이미지 상단의 단일 계층으로 병합합니다.
프로세스
imageOptimizationPolicy
를SkipLayers
로 설정합니다.strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers