5.2. S2I(Source-to-Image) 빌드


S2I(Source-to-Image)는 재현 가능한 컨테이너 이미지를 빌드하는 툴입니다. 컨테이너 이미지에 애플리케이션 소스를 삽입하고 새 이미지를 어셈블하여 실행할 수 있는 이미지를 생성합니다. 새 이미지는 기본 이미지, 빌더, 빌드 소스를 통합하고 buildah run 명령과 함께 사용할 수 있습니다. S2I는 이전에 다운로드한 종속 항목, 이전에 빌드한 아티팩트 등을 다시 사용하는 증분 빌드를 지원합니다.

5.2.1. S2I(Source-to-Image) 증분 빌드 수행

S2I(Source-to-Image)는 증분 빌드를 수행할 수 있으므로 이전에 빌드한 이미지의 아티팩트를 재사용할 수 있습니다.

프로세스

  • 증분 빌드를 생성하려면 전략 정의를 다음과 같이 수정합니다.

    strategy:
      sourceStrategy:
        from:
          kind: "ImageStreamTag"
          name: "incremental-image:latest" 
    1
    
        incremental: true 
    2
    Copy to Clipboard Toggle word wrap
    1
    증분 빌드를 지원하는 이미지를 지정합니다. 빌더 이미지 설명서를 참조하여 이 동작을 지원하는지 확인합니다.
    2
    이 플래그는 증분 빌드 시도 여부를 제어합니다. 빌더 이미지에서 증분 빌드를 지원하지 않는 경우 빌드는 성공하지만 save-artifacts 스크립트 누락으로 인해 증분 빌드가 성공하지 못했다는 로그 메시지가 표시됩니다.

5.2.2. S2I(Source-to-Image) 빌더 이미지 스크립트 덮어쓰기

빌더 이미지에서 제공하는 assemble, run, save-artifacts S2I(Source-to-Image) 스크립트를 덮어쓸 수 있습니다.

프로세스

  • 빌더 이미지에서 제공하는 assemble, run, save-artifacts S2I 스크립트를 덮어쓰려면 다음 중 하나를 수행합니다.

    • 애플리케이션 소스 리포지토리의 .s2i/bin 디렉터리에 assemble, run, 또는 save-artifacts 스크립트를 제공합니다.
    • BuildConfig 오브젝트의 전략 정의의 일부로 스크립트가 포함된 디렉터리의 URL을 제공합니다. 예를 들면 다음과 같습니다.

      strategy:
        sourceStrategy:
          from:
            kind: "ImageStreamTag"
            name: "builder-image:latest"
          scripts: "http://somehost.com/scripts_directory" 
      1
      Copy to Clipboard Toggle word wrap
      1
      빌드 프로세스는 run,assemble, save-artifacts를 경로에 추가합니다. 이러한 이름이 있는 스크립트 또는 모든 스크립트가 있는 경우 빌드 프로세스에서 이미지에 제공된 이름이 동일한 스크립트 대신 이러한 스크립트를 사용합니다.
      참고

      scripts URL에 있는 파일은 소스 리포지토리의 .s2i/bin에 있는 파일보다 우선합니다.

5.2.3. S2I(Source-to-Image) 환경 변수

소스 빌드 프로세스와 결과 이미지에서 환경 변수를 사용할 수 있도록 하는 방법은 환경 파일과 BuildConfig 환경 값입니다. 두 방법 중 하나를 사용하여 제공하는 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.

5.2.3.1. S2I(Source-to-Image) 환경 파일 사용

소스 빌드를 사용하면 소스 리포지토리의 .s2i/environment 파일에 지정하는 방식으로 애플리케이션 내에서 행당 하나씩 환경 값을 설정할 수 있습니다. 이 파일에 지정된 환경 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.

소스 리포지토리에 .s2i/environment 파일을 제공하는 경우 빌드 중 S2I(Source-to-Image)에서 이 파일을 읽습니다. 그러면 assemble 스크립트에서 이러한 변수를 사용할 수 있으므로 빌드 동작을 사용자 정의할 수 있습니다.

프로세스

예를 들어 빌드 중 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.

  • .s2i/environment 파일에 DISABLE_ASSET_COMPILATION=true를 추가합니다.

빌드 외에 지정된 환경 변수도 실행 중인 애플리케이션 자체에서 사용할 수 있습니다. 예를 들어 Rails 애플리케이션이 production 대신 development 모드에서 시작되도록 하려면 다음을 수행합니다.

  • RAILS_ENV=development.s2i/environment 파일에 추가합니다.

지원되는 환경 변수의 전체 목록은 각 이미지의 이미지 사용 섹션에서 확인할 수 있습니다.

5.2.3.2. S2I(Source-to-Image) 빌드 구성 환경 사용

빌드 구성의 sourceStrategy 정의에 환경 변수를 추가할 수 있습니다. 여기에 정의된 환경 변수는 assemble 스크립트를 실행하는 동안 표시되고 출력 이미지에 정의되어 run 스크립트 및 애플리케이션 코드에서도 사용할 수 있습니다.

프로세스

  • 예를 들어 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.

    sourceStrategy:
    ...
      env:
        - name: "DISABLE_ASSET_COMPILATION"
          value: "true"
    Copy to Clipboard Toggle word wrap

5.2.4. S2I(Source-to-Image) 소스 파일 무시

S2I(Source-to-Image)는 무시해야 하는 파일 패턴 목록이 포함된 .s2iignore 파일을 지원합니다. .s2iignore 파일에 있는 패턴과 일치하고 다양한 입력 소스에서 제공하는 빌드 작업 디렉터리의 파일은 assemble 스크립트에서 사용할 수 없습니다.

5.2.5. S2I(Source-to-Image)를 사용하여 소스 코드에서 이미지 생성

S2I(Source-to-Image)는 애플리케이션 소스 코드를 입력으로 사용하고 어셈블된 애플리케이션을 실행하는 새 이미지를 출력으로 생성하는 이미지를 쉽게 작성할 수 있는 프레임워크입니다.

재현 가능한 컨테이너 이미지를 빌드하는 데 S2I를 사용하는 주요 장점은 개발자가 쉽게 사용할 수 있다는 점입니다. 빌더 이미지 작성자는 이미지에서 최상의 S2I 성능, 빌드 프로세스, S2I 스크립트를 제공하도록 두 가지 기본 개념을 이해해야 합니다.

5.2.5.1. S2I(Source-to-Image) 빌드 프로세스 이해

빌드 프로세스는 최종 컨테이너 이미지로 통합되는 다음 세 가지 기본 요소로 구성됩니다.

  • 소스
  • S2I(Source-to-Image) 스크립트
  • 빌더 이미지

S2I는 첫 번째 FROM 명령으로 빌더 이미지가 포함된 Dockerfile을 생성합니다. 그런 다음 S2I에서 생성된 Dockerfile은 Buildah로 전달됩니다.

5.2.5.2. S2I(Source-to-Image) 스크립트를 작성하는 방법

스크립트를 빌더 이미지 내에서 실행할 수 있는 경우 모든 프로그래밍 언어로 S2I(Source-to-Image) 스크립트를 작성할 수 있습니다. S2I는 assemble/run/save-artifacts 스크립트를 제공하는 다양한 옵션을 지원합니다. 이러한 위치는 모두 다음 순서에 따라 각 빌드에서 확인합니다.

  1. 빌드 구성에 지정된 스크립트입니다.
  2. 애플리케이션 소스 .s2i/bin 디렉터리에 있는 스크립트입니다.
  3. 라벨이 io.openshift.s2i.scripts-url인 기본 이미지 URL에 있는 스크립트입니다.

이미지에 지정된 io.openshift.s2i.scripts-url 라벨과 빌드 구성에 지정된 스크립트 모두 다음 양식 중 하나를 취할 수 있습니다.

  • image:///path_to_scripts_dir: S2I 스크립트가 있는 디렉터리에 대한 이미지 내부의 절대 경로입니다.
  • file:///path_to_scripts_dir: S2I 스크립트가 있는 호스트의 디렉터리에 대한 상대 또는 절대 경로입니다.
  • http(s)://path_to_scripts_dir: S2I 스크립트가 있는 디렉터리에 대한 URL입니다.
Expand
표 5.1. S2I 스크립트
스크립트설명

assemble

assemble 스크립트는 소스에서 애플리케이션 아티팩트를 빌드하여 이미지 내부의 적절한 디렉터리에 배치합니다. 이 스크립트는 필수입니다. 이 스크립트의 워크플로는 다음과 같습니다.

  1. 선택 사항: 빌드 아티팩트를 복구합니다. 증분 빌드를 지원하려면 save-artifacts도 정의해야 합니다.
  2. 애플리케이션 소스를 원하는 위치에 배치합니다.
  3. 애플리케이션 아티팩트를 빌드합니다.
  4. 아티팩트를 실행할 수 있는 적절한 위치에 설치합니다.

run

run 스크립트는 애플리케이션을 실행합니다. 이 스크립트는 필수입니다.

save-artifacts

save-artifacts 스크립트는 이어지는 빌드 프로세스의 속도를 높일 수 있는 모든 종속 항목을 수집합니다. 이 스크립트는 선택 사항입니다. 예를 들면 다음과 같습니다.

  • Ruby의 경우 Bundler에서 설치한 gems입니다.
  • Java의 경우 .m2 콘텐츠입니다.

이러한 종속 항목은 tar 파일로 수집되어 표준 출력으로 스트리밍됩니다.

usage

usage 스크립트를 사용하면 사용자에게 이미지를 올바르게 사용하는 방법을 알릴 수 있습니다. 이 스크립트는 선택 사항입니다.

test/run

test/run 스크립트를 사용하면 이미지가 올바르게 작동하는지 확인하는 프로세스를 생성할 수 있습니다. 이 스크립트는 선택 사항입니다. 해당 프로세스의 제안된 흐름은 다음과 같습니다.

  1. 이미지를 빌드합니다.
  2. 이미지를 실행하여 usage 스크립트를 확인합니다.
  3. s2i build를 실행하여 assemble 스크립트를 확인합니다.
  4. 선택 사항: s2i build를 다시 실행하여 save-artifactsassemble 스크립트에서 아티팩트 기능을 저장 및 복원하는지 확인합니다.
  5. 이미지를 실행하여 테스트 애플리케이션이 작동하는지 확인합니다.
참고

test/run 스크립트로 빌드한 테스트 애플리케이션을 배치하도록 제안된 위치는 이미지 리포지토리의 test/test-app 디렉터리입니다.

S2I 스크립트의 예

다음 예제 S2I 스크립트는 Bash로 작성됩니다. 각 예에서는 tar 콘텐츠가 /tmp/s2i 디렉터리에 압축 해제되어 있다고 가정합니다.

assemble 스크립트:

#!/bin/bash

# restore build artifacts
if [ "$(ls /tmp/s2i/artifacts/ 2>/dev/null)" ]; then
    mv /tmp/s2i/artifacts/* $HOME/.
fi

# move the application source
mv /tmp/s2i/src $HOME/src

# build application artifacts
pushd ${HOME}
make all

# install the artifacts
make install
popd
Copy to Clipboard Toggle word wrap

run 스크립트:

#!/bin/bash

# run the application
/opt/application/run.sh
Copy to Clipboard Toggle word wrap

save-artifacts 스크립트:

#!/bin/bash

pushd ${HOME}
if [ -d deps ]; then
    # all deps contents to tar stream
    tar cf - deps
fi
popd
Copy to Clipboard Toggle word wrap

usage 스크립트:

#!/bin/bash

# inform the user how to use the image
cat <<EOF
This is a S2I sample builder image, to use it, install
https://github.com/openshift/source-to-image
EOF
Copy to Clipboard Toggle word wrap

5.2.6. 빌드 볼륨 사용

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

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

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

사전 요구 사항

  • 입력 보안, 구성 맵 또는 둘 다를 BuildConfig 오브젝트에 추가했습니다.

프로세스

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

    spec:
      sourceStrategy:
        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
    Copy to Clipboard Toggle word wrap
    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 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat