사용자
Docker 작업은 기본 Docker 사용자(루트)에 의해 실행되어야 합니다.
USER 디렉터리에 액세스할 수 없으므로 Dockerfile에서 GITHUB_WORKSPACE 지침을 사용하지 마세요. 자세한 내용은 Docker 문서에서 변수 참조 및 USER 참조를 참조하세요.
FROM
Dockerfile의 첫 번째 명령은 Docker 기본 이미지를 선택하는 FROM이어야 합니다. 자세한 내용은 Docker 설명서의 FROM 참조를 참조하세요.
FROM 인수를 설정할 때 몇 가지 모범 사례는 다음과 같습니다.
- 공식 Docker 이미지를 사용하는 것이 좋습니다. 예를 들어
python또는ruby입니다. - 버전 태그가 있는 경우 주 버전과 함께 사용하는 것이 좋습니다. 예를 들어
node:10대신node:latest을 사용합니다. - Debian 운영 체제를 기반으로 Docker 이미지를 사용하는 것이 좋습니다.
WORKDIR (작업 디렉토리)
GitHub 는 환경 변수의 GITHUB_WORKSPACE 작업 디렉터리 경로를 설정합니다.
WORKDIR에서 Dockerfile 명령을 사용하지 않는 것이 좋습니다. 작업이 실행되기 전에 GitHub는 Docker 이미지에서 해당 위치에 있던 내용을 덮어쓰듯 그 위에 GITHUB_WORKSPACE 디렉터리를 마운트하고, GITHUB_WORKSPACE를 작업 디렉터리로 설정합니다. 자세한 내용은 Docker 설명서의 변수 참조 및 WORKDIR 참조를 참조하세요.
엔트리포인트
작업의 메타데이터 파일에 entrypoint을 정의하면 ENTRYPOINT에 정의된 Dockerfile를 재정의합니다. 자세한 내용은 메타데이터 구문 참조을(를) 참조하세요.
Docker ENTRYPOINT 명령에는 shell 형식과 exec 형식이 있습니다. Docker ENTRYPOINT 문서는 __ 명령어에서 ENTRYPOINT 형태를 사용할 것을 권장합니다.
exec 및 shell 형식에 대한 자세한 내용은 Docker 문서의 ENTRYPOINT 참조를 참조하세요.
Dockerfile에서 진입점을 지정하는 데 WORKDIR을 사용하면 안 됩니다. 대신 절대 경로를 사용해야 합니다. 자세한 내용은 WORKDIR을 참조하세요.
_
_ 명령의 ENTRYPOINT 형식을 사용하도록 컨테이너를 구성하면, 액션의 메타데이터 파일에 구성된 args는 명령 셸에서 실행되지 않습니다. 작업의 args에 환경 변수가 포함된 경우 변수는 대체되지 않습니다. 예를 들어 다음 exec 형식을 사용하면 $GITHUB_SHA에 저장된 값이 출력되지 않고 대신 "$GITHUB_SHA"가 출력됩니다.
ENTRYPOINT ["echo $GITHUB_SHA"]
변수를 대체하길 원하면 shell 형식을 사용하거나 셸을 직접 실행하세요. 예를 들어 다음 exec 형식을 사용하면 셸을 실행하여 GITHUB_SHA 환경 변수에 저장된 값을 출력할 수 있습니다.
ENTRYPOINT ["sh", "-c", "echo $GITHUB_SHA"]
작업의 메타데이터 파일에 정의된 args를 __ 에서 ENTRYPOINT 형식을 사용하는 Docker 컨테이너에 공급하려면 entrypoint.sh 명령에서 호출하는 ENTRYPOINT라는 셸 스크립트를 만드는 것이 좋습니다.
예제 Dockerfile
# Container image that runs your code
FROM debian:9.5-slim
# Copies your code file from your action repository to the filesystem path `/` of the container
COPY entrypoint.sh /entrypoint.sh
# Executes `entrypoint.sh` when the Docker container starts up
ENTRYPOINT ["/entrypoint.sh"]
예제 entrypoint.sh 파일
위의 Dockerfile 예제를 사용하면 GitHub는 작업의 메타데이터 파일에 구성된 args를 entrypoint.sh에 인수로 전달합니다. 시스템의 #!/bin/shPOSIX 호환 셸을 명시적으로 사용하려면 entrypoint.sh을 파일의 위쪽에 추가합니다.
#!/bin/sh
# `$#` expands to the number of arguments and `$@` expands to the supplied `args`
printf '%d args:' "$#"
printf " '%s'" "$@"
printf '\n'
코드는 실행 파일이어야 합니다. 워크플로에서 사용하기 전에 entrypoint.sh 파일에 execute 권한이 있는지 확인하세요. 다음 명령을 사용하여 터미널에서 권한을 수정할 수 있습니다.
chmod +x entrypoint.sh
ENTRYPOINT 셸 스크립트를 실행할 수 없으면 다음과 유사한 오류가 수신됩니다.
Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/entrypoint.sh\": permission denied": unknown
명령 프롬프트 (CMD)
작업의 메타데이터 파일에 args을 정의하면 args가 CMD에 지정된 Dockerfile 명령을 재정의합니다. 자세한 내용은 메타데이터 구문 참조을(를) 참조하세요.
CMD에서 Dockerfile를 사용하는 경우 다음 지침을 따르세요.
- 작업의 README에서 필요한 인수를 문서화하고
CMD명령에서 생략합니다. - 어떤
args도 지정하지 않고 작업을 사용할 수 있는 기본값을 사용합니다. - 작업이
--help플래그 또는 이와 유사한 항목을 노출 하는 경우 이를 사용하여 작업을 자체 문서화합니다.
지원되는 Linux 기능
GitHub Actions 는 Docker에서 지원하는 기본 Linux 기능을 지원합니다. 기능은 추가하거나 제거할 수 없습니다. Docker에서 지원하는 기본 Linux 기능에 대한 자세한 내용은 Docker 설명서의 Linux 커널 기능을 참조하세요. Linux 기능에 대한 자세한 내용은 Linux man-page의 Linux 기능 개요를 참조하세요.