Обзор
Используйте jobs.<job_id>.container для создания контейнера для выполнения всех этапов задания, для которых еще не указан контейнер. При наличии этапов, которые используют действия скрипта и контейнера, действия контейнера будут выполняться как одноуровневые контейнеры в той же сети с теми же подключениями томов.
Если container не задан, все этапы будут выполняться непосредственно на узле, указанном, runs-on, если только этап не относится к действию, настроенному на выполнение в контейнере.
Примечание.
Оболочка по умолчанию для run шагов внутри контейнера sh вместо bash. Это значение может быть изменено на 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, см . в справочнике по Dockerfile в документации по Docker.
Некоторые инструкции Docker взаимодействуют с GitHub Actions, а файл метаданных действия может переопределить некоторые инструкции Docker. Обязательно изучите то, как Dockerfile взаимодействует с GitHub Actions, чтобы предотвратить непредвиденную реакцию на событие.
Справочные сведения см. в разделе Поддержка Dockerfile для GitHub Actions.
Определение образа контейнера
Используйте jobs.<job_id>.container.image для определения образа Docker, который будет использоваться в качестве контейнера для выполнения действия. Значением может быть имя образа Docker Hub или имя реестра.
Примечание.
Docker Hub обычно накладывает ограничения скорости для операций отправки и извлечения, которые повлияют на задания на локальных запусках. Однако GitHub, размещенные в runner, не подлежат этим ограничениям на основе соглашения между переменными данных.product.github %} и Docker.
Определение учетных данных для реестра контейнеров
Если реестру контейнеров образа требуется проверка подлинности для извлечения образа, можно использовать jobs.<job_id>.container.credentials, чтобы настроить map для username и password. Учетные данные являются теми же значениями, которые будут предоставлены команде 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 параметров.
Предупреждение
Параметры --network и --entrypoint параметры не поддерживаются.