如何将 Docker 与 GitHub Actions 一起使用?

Posted

技术标签:

【中文标题】如何将 Docker 与 GitHub Actions 一起使用?【英文标题】:How do I use Docker with GitHub Actions? 【发布时间】:2019-12-24 05:49:07 【问题描述】:

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

我认为 GitHub Actions 在 Docker 中运行。如何选择我的 Docker 镜像?

【问题讨论】:

【参考方案1】:

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

【讨论】:

@FlorianWilhelm 作者已更正语法,现在可以正常工作。 如果container 是 GH 注册表中的私有镜像怎么办?这还能用吗? 有没有办法缓存容器镜像,这样每次触发作业时就不会从 docker hub 下载? 从技术上讲,这是同一个工作,有 2 个不同的操作。【参考方案2】:

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

一项工作由一个或多个步骤组成。一个步骤可能是一个简单的 shell 命令,使用 run。但它也可能是一个动作,使用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>用操作系统的shell执行命令 uses: actions/checkout@v1 在存储库 checkout (https://github.com/actions/checkout) 中运行来自用户/组织 actions 的操作,主要版本 1 uses: ./.github/actions/my-action 运行此路径下您自己的存储库中定义的操作 uses: docker://continuumio/anaconda3:2019.07 运行来自用户/组织continuumioanaconda3 映像,版本为2019.07,来自Docker Hub (https://hub.docker.com/r/continuumio/anaconda3)

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

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

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

【讨论】:

最后一点,我无法让我的run 命令在容器中正确执行,甚至无法在echo "hello world" 中执行。它只是在启动后立即死亡,然后作业以Error response from daemon: Container 60e7cf...0b17 is not running 失败。您知道为什么会发生这种情况/如何解决吗?我使用的图像是python:3.7-alpine @Arne 不,不是马上。也许只是他们身边的一个错误。但这有点超出了这个问题的范围,我认为你应该打开一个新的并发布你的 workflow.yml

以上是关于如何将 Docker 与 GitHub Actions 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置github操作将docker容器部署到aws elasticbeanstalk多容器环境

docker与Spring boot的集成:docker-maven-plugin使用

如何在我的github自述文件中显示docker pulls作为图像

Github 操作将 docker 部署到 AWS ECS ECR

如何使用未提交的本地证书文件通过 GitHub 操作构建 Docker 映像

如何编写 Dockerfile 将两个或多个 docker 映像合并为一个?