本篇博客为了解决docker hub关闭,镜像无法拉取问题,使用github Actions功能构建workflow并且打包java程序docker镜像,最后推送到阿里免费的docker镜像仓库中。
第一步:
创建阿里云个人镜像仓库
进入阿里云官网,登入自己的阿里云账号,搜索框输入容器镜像服务,进入该页面后创建个人实例
根据官网描述,可以免费创建3个命名空间和300个镜像仓库,对于个人开发者而言,这绝对是足够用的。
设置固定密码
记住账号密码待会儿会在github中用到。接下来创建命名空间。
自动创建仓库选项:当开启自动创建后,可以在控制台仓库不存在的情况下,直接推送,系统会自动创建对应的仓库。
默认仓库类型:命名空间可以选择公开或者私有,当你开启“自动创建仓库”功能时,这个配置才有作用。这个配置将决定系统帮你创建的仓库默认是公开还是私有。
最后创建仓库。
点击代码源,对gethub账号进行授权绑定,取消“代码变更自动构建镜像”,勾选“海外机械构建”(因为gethub在国外,如果不选择海外,推送镜像就十分慢。)
这样阿里云镜像仓库创建完毕。
第二步:创建github账号
利用vpn加速器,进入github官网,注册账号
第三步:
操作流程: Step 1.登录Gitub,点击右上角+,然后创建一个名为action-sync-images的Github仓库。
Step 2.首先点击仓库里中的settins菜单,选择安全选项卡,点击Action,然后将会进入到 Actions secrets and variables,此时为了账号密码,我们需要提前设置我们Docker hub登录的账号密码到项目的secrets中(PS: fork了此项目的朋友可以自行将对应DocekrHub设置为自己的账号密码)。
Step 3.然后点击仓库里中的Action菜单,在选择一个 simple workflows 将会为我们创建一个新的工作流文件或者在项目根目录自行创建一个.github/workflows/sync-images-dockerHub-example.yaml目录文件。
第四步:
在github/workflows目录下创建文件名sync-image-example.yml
第五步:
编写sync-image-example.yml文件
name: 拉取镜像推送
on:
workflow_dispatch:
inputs:
IMAGE_NAME:
description: '原镜像名称:版本'
required: true
default: '原镜像名称:版本'
NEW_NAME:
description: '同步后镜像名称:版本'
required: true
default: '同步后镜像名称:版本'
TARGET_REGISTRY:
description: '仓库地址'
required: true
default: 'registry.cn-hangzhou.aliyuncs.com'
TARGET_REPOSITORY:
description: '命名空间'
required: true
default: '命名空间'
TARGET_DOCKRE_REGISTRY:
description: '镜像仓库'
required: true
default: '镜像仓库'
ARCH:
description: '系统架构'
required: true
default: 'amd64'
type: choice
options:
- amd64
- arm64
- arm/v7
- arm/v6
- 386
- s390x
- ppc64le
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 登录到 Docker 仓库
id: login
run: docker login -u 阿里云账号名字 -p 账号密码${{ github.event.inputs.TARGET_REGISTRY }}
continue-on-error: true
- name: 检查 Docker 登录成功
if: ${{ steps.login.outcome == 'success' }}
run: echo "Docker 登录成功"
- name: 检查 Docker 登录失败
if: ${{ steps.login.outcome != 'success' }}
run: echo "Docker 登录失败"
- name: 拉取、标记并推送 Docker 镜像
id: pull_tag_push
run: |
docker pull --platform ${{ github.event.inputs.ARCH }} ${{ github.event.inputs.IMAGE_NAME }}
docker tag ${{ github.event.inputs.IMAGE_NAME }} ${{ github.event.inputs.TARGET_REGISTRY }}/${{ github.event.inputs.TARGET_REPOSITORY }}/${{ github.event.inputs.TARGET_DOCKRE_REGISTRY }}
docker push ${{ github.event.inputs.TARGET_REGISTRY }}/${{ github.event.inputs.TARGET_REPOSITORY }}/${{ github.event.inputs.TARGET_DOCKRE_REGISTRY }}
continue-on-error: true
- name: 检查镜像推送成功
if: ${{ steps.pull_tag_push.outcome == 'success' }}
run: echo "Docker 镜像推送成功"
- name: 检查镜像推送失败
if: ${{ steps.pull_tag_push.outcome != 'success' }}
run: echo "Docker 镜像推送失败"
例如:我所拉取的包是wordpress:4.8-apache
文件修改如下图所示:
阿里云账户和密码也得修改成自己的
第六步:
设置阿里云镜像仓库固定密码(为了方便和阿里云账号密码设置相同)
测试:(以拉取wordpress:4.8-apache为例)
点击左上角code,进入页面后点击sync-image-example.yml,然后点击编辑即可以根据自己所想拉取的镜像修改文件。
文件修改完成后,点击右上角的View runs,进入拉取镜像推送界面
点击Run workflow,即可开始拉取镜像推送
最后点击build,查看拉取推送进程,出现改页面即为成功。