使用GitHub Action构建image&推送docker hub
前言
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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)