5장. 빌드 전략 사용


다음 섹션에서는 지원되는 주요 빌드 전략과 이러한 전략을 사용하는 방법을 정의합니다.

5.1. Docker 빌드

OpenShift Container Platform은 Buildah를 사용하여 Dockerfile에서 컨테이너 이미지를 빌드합니다. Dockerfile을 사용하여 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 Dockerfile 참조 문서를 참조하십시오.

작은 정보

buildArgs 배열을 사용하여 Docker 빌드 인수를 설정하는 경우 Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.

5.1.1. Dockerfile FROM 이미지 교체

Dockerfile의 FROM 명령을 BuildConfig 오브젝트의 from으로 교체할 수 있습니다. Dockerfile에서 다중 단계 빌드를 사용하는 경우 마지막 FROM 명령의 이미지가 교체됩니다.

프로세스

Dockerfile의 FROM 명령을 BuildConfig 오브젝트의 from으로 교체

strategy:
  dockerStrategy:
    from:
      kind: "ImageStreamTag"
      name: "debian:latest"

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

5.1.3. Docker 환경 변수 사용

Docker 빌드 프로세스 및 생성된 이미지에 환경 변수를 사용할 수 있도록 빌드 구성의 dockerStrategy 정의에 환경 변수를 추가할 수 있습니다.

정의된 환경 변수는 FROM 명령 직후 단일 ENV Dockerfile 명령으로 삽입되어 나중에 Dockerfile 내에서 참조할 수 있습니다.

프로세스

변수는 빌드 중 정의되고 출력 이미지에 유지되므로 해당 이미지를 실행하는 모든 컨테이너에도 존재합니다.

예를 들어 다음은 빌드 및 런타임 중 사용할 사용자 정의 HTTP 프록시를 정의합니다.

dockerStrategy:
...
  env:
    - name: "HTTP_PROXY"
      value: "http://myproxy.net:5187/"

oc set env 명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.

5.1.4. Docker 빌드 인수 추가

buildArgs 배열을 사용하여 Docker 빌드 인수를 설정할 수 있습니다. 빌드 인수는 빌드가 시작될 때 Docker로 전달됩니다.

작은 정보

Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.

프로세스

Docker 빌드 인수를 설정하려면 BuildConfig 오브젝트의 dockerStrategy 정의에 있는 buildArgs 배열에 항목을 추가합니다. 예를 들면 다음과 같습니다.

dockerStrategy:
...
  buildArgs:
    - name: "foo"
      value: "bar"
참고

namevalue 필드만 지원됩니다. valueFrom 필드의 설정은 모두 무시됩니다.

5.1.5. Docker 빌드를 사용하여 계층 스쿼싱

Docker 빌드는 일반적으로 Dockerfile의 각 명령을 나타내는 계층을 생성합니다. imageOptimizationPolicySkipLayers로 설정하면 모든 명령을 기본 이미지 상단의 단일 계층으로 병합합니다.

프로세스

  • imageOptimizationPolicySkipLayers로 설정합니다.

    strategy:
      dockerStrategy:
        imageOptimizationPolicy: SkipLayers

5.1.6. 빌드 볼륨 사용

빌드 볼륨을 마운트하여 출력 컨테이너 이미지에 유지하지 않으려는 정보에 대한 액세스 권한을 실행 중인 빌드에 제공할 수 있습니다.

빌드 볼륨은 빌드 환경 또는 구성에만 필요한 리포지토리 자격 증명과 같은 중요한 정보를 제공합니다. 빌드 볼륨은 출력 컨테이너 이미지에 데이터가 지속될 수 있는 빌드 입력 과 다릅니다.

실행 중인 빌드가 데이터를 읽는 빌드 볼륨의 마운트 지점은 Pod 볼륨 마운트 와 기능적으로 유사합니다.

프로세스

  • BuildConfig 오브젝트의 dockerStrategy 정의에서 volumes 배열에 빌드 볼륨을 추가합니다. 예를 들면 다음과 같습니다.

    spec:
      dockerStrategy:
        volumes:
          - name: secret-mvn 1
            mounts:
            - destinationPath: /opt/app-root/src/.ssh 2
            source:
              type: Secret 3
              secret:
                secretName: my-secret 4
          - name: settings-mvn 5
            mounts:
            - destinationPath: /opt/app-root/src/.m2  6
            source:
              type: ConfigMap 7
              configMap:
                name: my-config 8
          - name: my-csi-volume 9
            mounts:
            - destinationPath: /opt/app-root/src/some_path  10
            source:
              type: CSI 11
              csi:
                driver: csi.sharedresource.openshift.io 12
                readOnly: true 13
                volumeAttributes: 14
                  attribute: value
    1 5 9
    필수 항목입니다. 고유한 이름입니다.
    2 6 10
    필수 항목입니다. 마운트 지점의 절대 경로입니다. .. 또는 : 을 포함하지 않아야 하며 빌더에서 생성한 대상 경로와 충돌하지 않아야 합니다. /opt/app-root/src 는 많은 Red Hat S2I 지원 이미지의 기본 홈 디렉터리입니다.
    3 7 11
    필수 항목입니다. 소스 유형, ConfigMap,Secret 또는 CSI.
    4 8
    필수 항목입니다. 소스의 이름입니다.
    12
    필수 항목입니다. 임시 CSI 볼륨을 제공하는 드라이버입니다.
    13
    필수 항목입니다. 이 값은 true 로 설정해야 합니다. 읽기 전용 볼륨을 제공합니다.
    14
    선택 사항: 임시 CSI 볼륨의 볼륨 속성입니다. 지원되는 속성 키 및 값은 CSI 드라이버의 설명서를 참조하십시오.
참고

공유 리소스 CSI 드라이버는 기술 프리뷰 기능으로 지원됩니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.