컨테이너에서 잡 실행하기
컨테이너에서 잡 실행하기
잡의 스텝을 컨테이너에서 실행할 수 있어요. 러너 환경과 분리된 일관된 실행 환경이 필요할 때 유용해요.
출처: 문서
본문
잡의 스텝을 실행하기 위해 컨테이너를 사용합니다.
개요
jobs.<job_id>.container를 사용해서 아직 컨테이너를 지정하지 않은 잡의 모든 스텝을 실행할 컨테이너를 만들 수 있습니다. 스크립트 액션과 컨테이너 액션을 모두 사용하는 스텝이 있다면, 컨테이너 액션은 같은 네트워크와 볼륨 마운트로 형제 컨테이너(sibling container)로 실행됩니다.
container를 설정하지 않으면, 스텝이 컨테이너에서 실행되도록 구성된 액션을 참조하지 않는 한 모든 스텝이 runs-on이 지정한 호스트에서 직접 실행됩니다.
[!NOTE] 컨테이너 안
run스텝의 기본 셸은bash가 아니라sh입니다. 이 값은jobs.<job_id>.defaults.run이나jobs.<job_id>.steps[*].shell로 덮어쓸 수 있습니다.
예시: 컨테이너 안에서 잡 실행하기
name: CI
on:
push:
branches: [ main ]
jobs:
container-test-job:
runs-on: ubuntu-latest
container:
image: node:18
env:
NODE_ENV: development
ports:
- 80
volumes:
- my_docker_volume:/volume_mount
options: --cpus 1
steps:
- name: Check for dockerenv file
run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
컨테이너 이미지만 지정할 때는 image 키워드를 생략할 수 있습니다.
jobs:
container-test-job:
runs-on: ubuntu-latest
container: node:18
Dockerfile 지침과 재정의
Dockerfile에는 Docker 컨테이너의 내용과 시작 동작을 정의하는 지침과 인수가 들어 있습니다. Docker가 지원하는 지침에 대한 자세한 내용은 Docker 문서의 Dockerfile reference를 참고하세요.
일부 Docker 지침은 GitHub Actions와 상호 작용하며, 액션의 메타데이터 파일이 일부 Docker 지침을 재정의할 수 있습니다. 예상치 못한 동작을 방지하려면 Dockerfile이 GitHub Actions와 어떻게 상호 작용하는지 잘 알고 있어야 합니다.
참고 자료는 Dockerfile support for GitHub Actions를 참고하세요.
컨테이너 이미지 정의하기
jobs.<job_id>.container.image를 사용해서 액션을 실행할 컨테이너로 사용할 Docker 이미지를 정의합니다. 값은 Docker Hub 이미지 이름이거나 레지스트리 이름일 수 있습니다.
[!NOTE] Docker Hub는 일반적으로 push와 pull 작업 모두에 속도 제한을 적용하며, 이는 셀프 호스팅 러너의 잡에 영향을 줍니다. 그러나 GitHub 호스팅 러너는 GitHub와 Docker 간의 계약에 따라 이러한 제한의 적용을 받지 않습니다.
컨테이너 레지스트리용 자격 증명 정의하기
이미지의 컨테이너 레지스트리가 이미지를 pull하려면 인증을 요구하는 경우, jobs.<job_id>.container.credentials를 사용해서 username과 password의 map을 설정할 수 있습니다. 자격 증명은 docker login 명령에 제공하는 값과 동일합니다.
예시: 컨테이너 레지스트리용 자격 증명 정의하기
container:
image: ghcr.io/owner/image
credentials:
username: ${{ github.actor }}
password: ${{ secrets.github_token }}
컨테이너에서 환경 변수 사용하기
jobs.<job_id>.container.env를 사용해서 컨테이너 안의 환경 변수 map을 설정합니다.
컨테이너에 네트워크 포트 노출하기
jobs.<job_id>.container.ports를 사용해서 컨테이너에 노출할 포트의 array를 설정합니다.
컨테이너에 볼륨 마운트하기
jobs.<job_id>.container.volumes를 사용해서 컨테이너가 사용할 볼륨의 array를 설정합니다. 볼륨을 사용해서 잡의 서비스나 다른 스텝 간에 데이터를 공유할 수 있습니다. 명명된 Docker 볼륨, 익명 Docker 볼륨, 또는 호스트의 바인드 마운트를 지정할 수 있습니다.
볼륨을 지정하려면 소스와 대상 경로를 지정합니다:
<source>:<destinationPath>.
<source>는 호스트 머신의 볼륨 이름 또는 절대 경로이고, <destinationPath>는 컨테이너 안의 절대 경로입니다.
예시: 컨테이너에 볼륨 마운트하기
volumes:
- my_docker_volume:/volume_mount
- /data/my_data
- /source/directory:/destination/directory
컨테이너 리소스 옵션 설정하기
jobs.<job_id>.container.options를 사용해서 추가 Docker 컨테이너 리소스 옵션을 구성합니다. 옵션 목록은 docker create options을 참고하세요.
[!WARNING]
--network와--entrypoint옵션은 지원되지 않습니다.