如何将 Docker 与 GitHub 操作一起使用?

How do I use Docker with GitHub Actions?

当我创建 GitHub Actions 工作流程文件时,示例 YAML 文件包含 runs-on: ubuntu-latestAccording to the docs,我只有 Ubuntu、Windows Server 和 macOS X 几个版本之间的选项。

我认为 GitHub 操作在 Docker 中运行。如何选择我的 Docker 图片?

工作(作为工作流程的一部分)运行在虚拟机中。您选择一种环境 provided by them(例如 ubuntu-latestwindows-2019)。

一项工作由一个或多个步骤组成。一个步骤可能是一个简单的 shell 命令,使用 运行。但也可能是 action,using uses

name: CI

on: [push]

jobs:
  myjob:
    runs-on: ubuntu-18.04 # linux required if you want to use docker
    steps:
    # Those steps are executed directly on the VM
    - run: ls /
    - run: echo $HOME
    - name: Add a file
      run: touch $HOME/stuff.txt
    # Those steps are actions, which may run inside a container
    - uses: actions/checkout@v1
    - uses: ./.github/actions/my-action
    - uses: docker://continuumio/anaconda3:2019.07
  • run: <COMMAND>用OS
  • 的shell执行命令
  • uses: actions/checkout@v1 运行s 存储库 checkouthttps://github.com/actions/checkout)中用户/组织 actions 的操作,主要版本 1
  • uses: ./.github/actions/my-action 运行s 这个路径下你自己的仓库中定义的动作
  • uses: docker://continuumio/anaconda3:2019.07 运行来自用户/组织 continuumio、版本 2019.07anaconda3 图片来自 Docker 中心(https://hub.docker.com/r/continuumio/anaconda3)

请记住,如果要使用 Docker,请将 need to select a linux distribution 作为环境。

查看 uses and run 的文档了解更多详情。

还应注意,有一个 container 选项,允许您 运行 任何通常 运行 在主机上 运行 的步骤在容器内:https://help.github.com/en/articles/workflow-syntax-for-github-actions#jobsjob_idcontainer

GitHub 操作提供虚拟机 - 如您所述,Ubuntu、Windows 或 macOS - 以及 运行 您在其中的工作流程。您 可以 然后使用该虚拟机 运行 容器内的工作流。

使用 the container specifier 到 运行 容器内的一个步骤。请务必将 runs-on 指定为容器的适当主机环境(ubuntu-latest 用于 Linux 容器,windows-latest 用于 Windows 容器)。例如:

jobs:
  vm:
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo This job does not specify a container.
          echo It runs directly on the virtual machine.
        name: Run on VM
  container:
    runs-on: ubuntu-latest
    container: node:10.16-jessie
    steps:
      - run: |
          echo This job does specify a container.
          echo It runs in the container instead of the VM.
        name: Run in container