目录
前言
docker hub自带链接GitHub仓库功能,提交更改会自动构建docker image,那么为什么还要用GitHub Action来构建?原因如下,docker hub构建镜像速度很慢,简单一点的镜像,构建的速度还能接受,复杂一点的,比如说需要编译程序,那速度就很捉急了,这时候就需要用到GitHub Action,速度翻个3倍还是能做到的,其二:docker hub的自动构建是每一条推送修改都会构建,意味着即使只修改readme,它也会再build,因为队列排队的缘故,真正修改好,需要用的时候,那个镜像还再排队等着构建,这就很难让人接受了,并且这样很浪费docker hub的资源,GitHub Action在这方面就的可自定义能力就强很多了
教程
在仓库中开启GitHub Action功能
之后所在仓库会出现一个yml,路径是/.github/workflows/
这里我用的是https://github.com/elgohr/Publish-Docker-Github-Action 的yml
把下面这段代码复制进这个yml,并重命名为Publish Docker.yml
name: Publish Docker
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: superng6/test
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
tag_names: true
cache: true
部分名词解释:on,条件判断,判断是何种情况开始执行流程,常用的有push
,release
,我推荐release
name:这个job的名字,我这个job是构建镜像并推送
uses:这个是yml编写者的名字和流程名,我这里选用的是elgohr/Publish-Docker-Github-Action@master
,简单易用,文档也写的非常翔实
后面with这个,name就不说了,你的dockerhub id和你的docker镜像名,我相信都能看懂
cache
:加快构建速度,如果镜像不复杂不需要编译的话可以不用
tag_names
:依据分支名称推送,master分支默认latest,其他分支按照分支名称命名并推送
着重说一下最后两个参数
username:dockerhub id
password:dockerhub password
需要在GitHub这个项目的所在仓库创建secrets
在这里手动添加KV
开始构建
如果你的仓库已经准备好开始构建镜像了,就点击release,之后会自动构建并推送到docker hub上
原本在dockerhub需要90分钟才能构建完成的镜像,在GitHub Action中只需要30分钟(编译qBittorrent-Enhanced-Edition)
本文由 NG6 于2020年01月06日发表在 sleele的博客
如未特殊声明,本站所有文章均为原创;你可以在保留作者及原文地址的情况下转载
转载请注明:2020.01.09更新 使用GitHub Action构建image&推送docker hub | sleele的博客
这个还支持全平台镜像构建吗?
@DDD 支持,不过我现在直接用docker官方的了,可以参考这个workflows
https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition/blob/master/.github/workflows/Manual%20Build%20Docker%20Image.yml
@NG6 谢谢~