メモ
GitHub ホステッド ランナーは、現在 GitHub Enterprise Server ではサポートされていません。
概要
jobs.<job_id>.container を使用して、コンテナーを作成し、コンテナーをまだ指定していないジョブのステップを実行します。 スクリプトアクションとコンテナアクションの両方を使うステップがある場合、コンテナアクションは同じボリュームマウントを使用して、同じネットワーク上にある兄弟コンテナとして実行されます。
container を設定しない場合、ステップがコンテナーで実行するように構成されたアクションを参照しない限り、すべてのステップは runs-on で指定されたホスト上で直接実行されます。
メモ
コンテナー内の 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)
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 リファレンスを参照してください。
Docker 命令の中には GitHub Actions を操作するものがあり、アクションのメタデータ ファイルは一部の Docker 命令をオーバーライドできます。 予期しない動作を避けるために、DockerfileがGitHub Actionsとどのように関わるかについて馴染んでおいてください。
参考情報については、「GitHub ActionsのためのDockerfileサポート」を参照してください。
コンテナー イメージを定義する
jobs.<job_id>.container.image を使用して、アクションを実行するコンテナーとして使用する Docker イメージを定義します。 値には、Docker Hub イメージ名またはレジストリ名を指定できます。
メモ
通常、Docker Hub により、プッシュ操作とプル操作の両方にレート制限が課せられます。これは、セルフホステッド ランナーのジョブに影響します。 ただし、GitHub と Docker の間の同意に基づくこれらの制限は、GitHub ホステッド ランナーには適用されません。
コンテナー レジストリの資格情報を定義する
イメージのコンテナー レジストリでイメージをプルするための認証が必要な場合は、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 を設定します。 volumes (ボリューム) を使用すると、サービス間で、または1つのジョブのステップ間でデータを共有できます。 指定できるのは、名前付き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 のオプションに関するページを参照してください。
警告
--network と --entrypoint オプションはサポートされていません。