如何将 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-latest
或windows-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
运行来自用户/组织continuumio
的anaconda3
映像,版本为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