利用GitHub actions实现Docker Image的构建并传送到Docker Hub或者harbor

2023-05-16

目录

1、github actions的介绍

2、dockerfile 的编写 

 2.1 dockerfile 范例

 2.2 其他指令

3、workflow的编写

3.1 上传到docker hub

3.2 上传到 harbor

4、结果展示 


1、github actions的介绍

        参考文档:  Github actions 的使用,以及workflows的编写,详细教程_忙碌且充实的博客-CSDN博客https://blog.csdn.net/cylcylccyyll/article/details/127968945

2、dockerfile 的编写 

        参考文档:https://blog.csdn.net/zx110503/article/details/10348051

 2.1 dockerfile 范例

 2.2 其他指令

 1、COPY

        复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

2、ADD

        ADD 指令和 COPY 的使用格类似,功能也类似。

        与COPY不同的是,ADD可以访问url路径,会访问网络进行下载,档到本地后打包到镜像。

        此外,如果src是压缩包的话,会自动进行解压;但通过url获取的tar文件不会被展开。

3、ENTRYPOINT

        类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

        如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

4、USER

        用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

5、VOLUME      

        定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

        避免重要的数据,因容器重启而丢失,这是非常致命的。

        避免容器不断变大。

        定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

        避免重要的数据,因容器重启而丢失,这是非常致命的。

        避免容器不断变大。

  6、ONBUILD      

        用于延迟构建命令的执行。

        简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build Dockerfile 里的 ONBUILD 指定的命令。

7、WORKDIR

        指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。

        docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

8、HEALTHCHECK

        用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

9、EXPOSE

        仅仅只是声明端口。

        帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。

        在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口

10、LABEL

        LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式.

3、workflow的编写

3.1 上传到docker hub

name: images2   # workflow名称,可以在Github项目主页的【Actions】中看到所有的workflow

on:   # 配置触发workflow的事件
  #push:
    #branches:   # master分支有push时触发此workflow
      #- 'master'
    #tags:       # tag更新时触发此workflow
      #- '*'
      
  workflow_dispatch:  #手动触发
    inputs:
      logLevel:
        description: 'Log level'
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'

jobs:  # workflow中的job

  push_to_registry:  # job的名字
    name: Push Docker image to Docker Hub
    runs-on: ebf-pod-ubuntu-2004  # job运行的基础环境

    steps:  # 一个job由一个或多个step组成
      - name: Check out the repo
        uses: actions/checkout@v2   # 官方的action,获取代码

      - name: Log in to Docker Hub
        uses: docker/login-action@v1  # 三方的action操作, 执行docker login
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}  # 配置dockerhub的认证,在Github项目主页 【Settings】 -> 【Secrets】 添加对应变量
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v2  # 抽取项目信息,主要是镜像的tag
        with:
          images: chen0928/difficulty

      - name: Build and push Docker image
        uses: docker/build-push-action@v3 # docker build & push
        with:
          context: .    #指定dockerfile文件的位置
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

3.2 上传到 harbor

name: push-harbor

on: 
  #push:
  workflow_dispatch:


jobs: 
  push-harbor:
    runs-on: ebf-pod-ubuntu-2004
    env:
      TAG: sign:1.1
    steps:
      - uses: actions/checkout@v2
      - name: harbor login
        uses: azure/docker-login@v1
        with:
          login-server: aws.registry.trendmicro.com
          username: ${{ secrets.HARBOR_ACCOUNT }}
          password: ${{ secrets.HARBOR_TOKEN }}
      
      # The image name should be xxxx/harbor/projects>:${{ env.TAG }}  #可以在harbor内看到定义的push command
      - name: build docker image
        run: docker build . -t xxxx/testcc/${{ env.TAG }}
        
      #- name: tag iamge
       # run: docker tag sing:1.0 xxxx/testcc/sing${{ env.TAG }}
        
      - name: push docker image to registry
        #run: docker push xxxx/harbor/projects:${{ env.TAG }}
        run: docker push xxxx/testcc/${{ env.TAG }}

4、结果展示 

        push完成之后可以在仓库中看见自己上传完成的镜像。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用GitHub actions实现Docker Image的构建并传送到Docker Hub或者harbor 的相关文章

随机推荐

  • codeblock图形界面编程

    Code Blocks 是一款免费开源的 C C 43 43 IDE xff0c 支持 GCC MSVC 43 43 等多种编译器 xff0c 还可以导入 Dev C 43 43 的项目 Code Blocks 的优点是 xff1a 跨平台
  • 利用FFT成功实现拓扑识别(六)--为自己设计的滤波器做仿真验证

    为自己设计的滤波器做仿真验证 前文中我们已经设计好了2 4和6阶的数字带通滤波器 xff0c 实际效果如何昵 xff1f 可以通过mathlab工具进行仿真和验证 第一步 xff1a 导出滤波器 在mathlab的fdatool中设计好滤波
  • 使用Matlab编程实现FFT的频谱分析

    目录 使用Matlab编程实现FFT的频谱分析fft函数原始波形函数原始数据导入函数数据导出函数fft分析例程 使用Matlab编程实现FFT的频谱分析 用Matlab进行fft仿真分析 xff0c 最大的优势在于其丰富的函数库支撑 xff
  • 使用Matlab实现高噪声信号的FFT的频谱分析

    目录 使用Matlab实现高噪声信号的FFT的频谱分析原始信号原始信号FFT结果加噪信号加噪信号FFT结果其他加噪函数 使用Matlab实现高噪声信号的FFT的频谱分析 在实际的系统中 xff0c 噪声可以说是无处不在 xff0c 首先生成
  • 基于freertos的嵌入式系统开发(七)FreeRTOS的内存管理方法5

    目录 基于freertos的嵌入式系统开发 七 FreeRTOS的内存管理方法5 简介 内存申请函数void pvPortMalloc size t xWantedSize 内存释放函数void vPortFree void pv 空闲内存
  • 基于freertos的嵌入式系统开发(八)FreeRTOS的TCB

    目录 基于freertos的嵌入式系统开发 xff08 八 xff09 FreeRTOS的TCB简介TCB的定义 基于freertos的嵌入式系统开发 xff08 八 xff09 FreeRTOS的TCB 简介 FreeRTOS为了实现任务
  • zabbix4.0学习四:Zabbix监控tomcat故障重启

    zabbix4 0学习四 xff1a Zabbix监控tomcat故障重启 前言 使用zabbix监控tomcat的运行 xff0c 当tomcat停止运行 xff0c 则重启它 下面教程里 xff0c 在执行远程脚本时 xff0c 使用s
  • 基于freertos的嵌入式系统开发(九)FreeRTOS的全局变量

    目录 基于freertos的嵌入式系统开发 xff08 九 xff09 FreeRTOS的全局变量当前TCB指针pxCurrentTCB就绪任务列表pxReadyTasksList阻塞任务列表xDelayedTaskList1和xDelay
  • pycharm中做web应用(一)第一个web页

    目录 pycharm中做web应用 xff08 一 xff09 第一个web页Django 简介开发环境搭建django插件选择查看django版本 新项目创建启动项目web端验证项目 pycharm中做web应用 xff08 一 xff0
  • Matlab中利用FFT实现信号频谱搬移

    目录 Matlab中利用FFT实现信号频谱搬移只有实部的频谱搬移只有虚部的频谱搬移复函数下的频谱搬移 Matlab中利用FFT实现信号频谱搬移 在fft的理论中 xff0c fft的频移特性表示为 xff1a 也就是说 xff0c 要想对信
  • 解析IEC 61850通信规约

    目录 解析IEC 61850通信规约IEC61850适用场景IEC61850组成IEC61850库 解析IEC 61850通信规约 IEC61850标准是基于通用网络通信平台的变电站自动化系统唯一国际标准 xff0c 由国际电工委员会第57
  • C语言中的字符串转数字函数常见问题详解

    目录 C语言中的字符串转数字函数常见问题详解字符串转整形atoi函数 字符串转长整形strtol函数 xff0c C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 函数原型 xff1a int atoi const cha
  • 使用MATLAB进行三维空间绘图

    目录 使用MATLAB进行三维空间绘图一个入门例程matlab中的mesh 函数matlab中的meshgrid 函数matlab中的plot3函数例程代码解释 使用MATLAB进行三维空间绘图 三维图具有直观 立体的空间形象 xff0c
  • python特殊数据类型应用(2)元组类型

    目录 标题python特殊数据类型应用 xff08 2 xff09 元组类型元组的定义声明元组元组的访问元组和列表的相互转换元组和列表的区别 标题python特殊数据类型应用 xff08 2 xff09 元组类型 元组的定义 在python
  • python特殊数据类型应用(3)集合类型

    目录 python特殊数据类型应用 xff08 3 xff09 集合类型集合的定义集合的声明集合的运算集合元素的增加 xff1a 交集intersection 并集union差集difference xff1a 对称差集symmetric
  • python中字符串及其格式转换技巧

    目录 python中字符串及其格式转换技巧其他数据转为字符串字符串的格式化带格式限定符的格式化字符串的连接字符串切片字符串转换为 ASCII 值 python中字符串及其格式转换技巧 在python语言中 xff0c 对字符串的处理可以说是
  • Linux命令发送Http的get或post请求(curl和wget两种方法)

    xfeff xfeff Http请求指的是客户端向服务器的请求消息 xff0c Http请求主要分为get或post两种 xff0c 在Linux系统下可以用curl和wget命令来模拟Http的请求 下面就来介绍一下Linux系统如何模拟
  • 让bat文件后台运行

    让bat文件后台运行 文章目录 让bat文件后台运行 前言方法一方法二 前言 bat文件运行时会有一个黑黑的cmd exe窗口 xff0c 很吓人 xff0c 就算用start min命令去运行bat文件 xff0c 电脑的任务栏下仍然会有
  • 5.C语言中全局变量在多个文件中使用

    转自 xff1a https www eefocus com codevisionlife blog 13 12 300658 1a0b8 html 用C语言编写程序的时候 xff0c 我们经常会遇到这样一种情况 xff1a 希望在头文件中
  • 利用GitHub actions实现Docker Image的构建并传送到Docker Hub或者harbor

    目录 1 github actions的介绍 2 dockerfile 的编写 2 1 dockerfile 范例 2 2 其他指令 3 workflow的编写 3 1 上传到docker hub 3 2 上传到 harbor 4 结果展示