GitHub Action构建并推送DockerHub

前言

偶尔会构建一些自己用的容器,之前一直用的是Docker提供的构建服务,然而Docker开始收费了,那只能另寻他法。

之所以不本地构建推送,是因为构建的时候经常因为网络问题,访问不了一些资源,所以就依赖外网的服务。

Github Action

之前知道Github Action可以做到这个事情,由于Docker官方提供了相关服务,我对于实时性的需求不高,所以一般就将Dockerfile推送到Github就了事了。

创建Action

如下图操作:

GitHub Action构建并推送DockerHub_第1张图片

编写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

GitHub Action构建并推送DockerHub_第2张图片

执行构建

进入Actions操作界面,选择对应workflow,点击执行。

这时候只需要等待构建成功,若出现失败,可以查看失败原因,然后重新构建。

GitHub Action构建并推送DockerHub_第3张图片

推送到其它云

吐槽一下阿里云的自动构建,不能访问外网,连golang基本的都支持不了

这里以阿里云作为示例

设置阿里云环境信息

容器镜像服务 -> 个人实例 -> 访问凭证 -> 设置固定密码(也可以通过临时密码获取,需要做的事情会复杂一点)

GitHub Action构建并推送DockerHub_第4张图片

编写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配置过相关镜像,效果不明显)。

虽然过程有点折腾,最后问题还是得到解决了。

你可能感兴趣的:(Docker,github,docker,linux)