注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。
Dockerfileの命令について
Dockerfile には、Docker コンテナーの内容と起動時の動作を定義する命令と引数が含まれています。 Docker がサポートする手� �の詳細については、Docker ドキュメントの「Dockerfile リファレンス」を参照してく� さい。
Dockerfileの命令とオーバーライド
Dockerの命令の中にはGitHub Actionsと関わるものがあり、アクションのメタデータファイルはDockerの命令のいくつかをオーバーライドできます。 予期しない動作を避けるために、DockerfileがGitHub Actionsとどのように関わるかについて馴染んでおいてく� さい。
User
DockerアクションはデフォルトのDockerユーザ(root)で実行されなければなりません。 Dockerfile では USER 命令を使用しないでく� さい。そうしないと、GITHUB_WORKSPACE にアクセスできなくなります。 詳細については、Docker ドキュメントの "環境変数の使用" に関するページと USER リファレンスを参照してく� さい。
FROM
Dockerfile の最初の命令は、FROM とする必要があります。これにより、Docker ベース イメージが選択されます。 詳細については、Docker ドキュメントの FROM リファレンスを参照してく� さい。
FROM 引数の設定には、いくつかのベストプラクティスがあります。
- 公式のDockerイメージを使うことをおすすめします。 たとえば、
pythonまたはrubyです。 - バージョンタグが存在する� �合は使ってく� さい。メジャーバージョンも含めることが望ましいです。 たとえば、
node:latestの代わりにnode:10を使用します。 - Debian オペレーティング システ� に基づいて Docker イメージを使用することをお勧めします。
WORKDIR
GitHub Enterprise Server では、ワーキング ディレクトリのパスを環境変数 GITHUB_WORKSPACE に設定します。 Dockerfile では、WORKDIR 命令を使用しないことをお勧めします。 アクションが実行される前に、GitHub Enterprise Server では、GITHUB_WORKSPACE ディレクトリを、Docker イメージ内にあったその� �所になにがあってもその上にマウントし、GITHUB_WORKSPACE をワーキング ディレクトリとして設定します。 詳細については、"Docker ドキュメントの環境変数の使用" に関するページと WORKDIR リファレンスを参照してく� さい。
ENTRYPOINT
アクションのメタデータ ファイルで entrypoint を定義すると、それによって、Dockerfile 内に定義されている ENTRYPOINT がオーバーライドされます。 詳細については、"GitHub Actions のメタデータ構文" に関するページを参照してく� さい。
Docker の ENTRYPOINT 命令には、shell 形式と exec 形式があります。 Docker ENTRYPOINT ドキュメントでは、ENTRYPOINT 命令の exec 形式を使用することを推奨しています。 exec 形式と shell 形式の詳細については、Docker ドキュメントの ENTRYPOINT リファレンスを参照してく� さい。
Dockerfile でエントリポイントを指定する� �合は、WORKDIR を使用しないでく� さい。 代わりに、絶対パスを使用する必要があります。 詳細については、「WORKDIR」を参照してく� さい。
ENTRYPOINT 命令の exec 形式を使用するようにコンテナーを構成した� �合、アクションのメタデータ ファイルで構成された args はコマンド シェルで実行されません。 アクションの args に環境変数が含まれている� �合、その変数は置換されません。 たとえば、次の exec 形式を使用すると、$GITHUB_SHA に� �納されている値は出力されませんが、代わりに "$GITHUB_SHA" が出力されます。
ENTRYPOINT ["echo $GITHUB_SHA"] 変数の置換が必要な� �合は、shell 形式を使用するか、直接シェルを実行してく� さい。 たとえば、以下の exec 形式を使用すれば、シェルを実行して環境変数 GITHUB_SHA に保存された値を出力できます。
ENTRYPOINT ["sh", "-c", "echo $GITHUB_SHA"] アクションのメタデータ ファイルで定義されている args を、ENTRYPOINT で exec 形式を使用している Docker コンテナーに指定するには、ENTRYPOINT 命令から呼び出す entrypoint.sh というシェル スクリプトを作成することをお勧めします。
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 Enterprise Server によって、アクションのメタデータ ファイル内に引数として構成された argsが entrypoint.sh に送信されます。 entrypoint.sh ファイルの先� �に #!/bin/sh shebang を追� して、システ� の POSIX準� のシェルを明示的に使用します。
#!/bin/sh # `$*` expands the `args` supplied in an `array` individually # or splits `args` in a string separated by whitespace. sh -c "echo $*" コードは実行可能になっていなければなりません。 ワークフローで使用する前に、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 によって、Dockerfile で指定された CMD 命令がオーバーライドされます。 詳細については、"GitHub Actions のメタデータ構文" に関するページを参照してく� さい。
Dockerfile で CMD を使用する� �合は、次のガイドラインに従ってく� さい。
- アクションの README 中で必� �の引数をドキュメント化し、
CMD命令から除外します。 argsを指定せずにアクションを利用できるよう、既定値を使用します。- アクションが
--helpフラグやそれに類するものを備えているなら、アクションを自己ドキュメント化するためにそれを利用します。
サポートされているLinuxの機能
GitHub Actionsは、DockerがサポートするデフォルトのLinuxの機能をサポートします。 機能の追� や削除はできません。 Docker でサポートされる既定の Linux 機能の詳細については、Docker ドキュメントの「ランタイ� 特権と Linux 機能」を参照してく� さい。 Linux 機能の詳細については、Linux の man ページの "Linux 機能の概要" に関するページを参照してく� さい。