前言
偶尔会构建一些自己用的容器,之前一直用的是Docker提供的构建服务,然而Docker开始收费了,那只能另寻他法。
之所以不本地构建推送,是因为构建的时候经常因为网络问题,访问不了一些资源,所以就依赖外网的服务。
Github Action
之前知道Github Action可以做到这个事情,由于Docker官方提供了相关服务,我对于实时性的需求不高,所以一般就将Dockerfile推送到Github就了事了。
创建Action
如下图操作:

编写Action
这里使用了手动构建,文件变更之后不会自动构建。
同时这里依赖Github设置中的SECRET服务。
name: Publish Docker image
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: imjcw/ssh-go
tags: latest
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
定义SERECT

执行构建
进入Actions操作界面,选择对应workflow,点击执行。
这时候只需要等待构建成功,若出现失败,可以查看失败原因,然后重新构建。

推送到其它云
吐槽一下阿里云的自动构建,不能访问外网,连golang基本的都支持不了
这里以阿里云作为示例
设置阿里云环境信息
容器镜像服务 -> 个人实例 -> 访问凭证 -> 设置固定密码(也可以通过临时密码获取,需要做的事情会复杂一点)

编写Action
name: Publish Docker image 2 Aliyun
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: registry.cn-beijing.aliyuncs.com
username: ${{ secrets.ALIYUN_DOCKER_USERNAME }}
password: ${{ secrets.ALIYUN_DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: registry.cn-beijing.aliyuncs.com/imjcw/ssh-go
tags: latest
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
其它操作和上面一致
不演示了
最后
使用Github Action构建,是为了利用其可以正常访问外网的资源,使用阿里云镜像服务是为了能够使用加速服务(Docker配置过相关镜像,效果不明显)。
虽然过程有点折腾,最后问题还是得到解决了。
作者因原本使用的容器构建服务收费,且本地构建受网络限制,转而使用Github Action。文章介绍了创建、编写Action,定义SECRET,执行构建等步骤,还以阿里云为例,说明了推送到其他云的操作,最终利用其外网访问和加速服务解决了构建问题。

被折叠的 条评论
为什么被折叠?



