其他
极路由4刷机
米沃奇 波箱保养
玩客云
玩客云刷第三方系统
玩客云-Home Assistant
服务器采购
RTL9210/RTL9210B
随身WiFi
固件备份与恢复
Debian
Debian-文件共享
Debian-物联网
Debian-授权
Debain-ZeroTier
Debian-自启动脚本
Debian-拓展内存
Debian-清理空间
Debian-USB控制
Debian-adb进9008
Debian-常见问题
Debian-快速使用
随身WiFi使用
切卡
快速找摄像头IP
edu教育邮箱申请
域名邮箱(转发)-Cloudflare
Web监控工具
WxPusher(微信消息推送)
WxPusher-API推送
WxPusher-Python推送
WxPusher-Shell推送
WxPusher-挪车通知
企业微信-应用
Godlike-免费游戏服务器
GitHub 国内访问(host)
常用螺丝替代型号
GitHub Actions
workflows-同步上游仓库(覆盖)
workflows-⭐同步上游仓库
workflows-构建 Docker镜像
FAT32不可读
Kindle
Kindle-救砖
Kindle-越狱
中国移动-RAX3000Q(Y)
OpenWrt
网络奇葩问题
小米手环_BandTOTP
本文档使用 MrDoc 发布
-
+
首页
workflows-构建 Docker镜像
**使用的工作流操作:** - docker/build-push-action:构建镜像并推送 - Marketplace:https://github.com/marketplace/actions/build-and-push-docker-images - GitHub:https://github.com/docker/build-push-action - 使用文档:https://docs.docker.com/build/ci/github-actions/annotations/ - upload-artifact: - Marketplace:https://github.com/marketplace/actions/upload-a-build-artifact - GitHub:https://github.com/actions/upload-artifact 多架构构建一般取决于使用的基础镜像支持架构 若是基础镜像没有该架构,那么构建的时候也无法创建对应架构的镜像 ## ⭐构建Docker镜像 构建镜像并上传Docker Hub,并打包导出(提供下载链接) `.github/workflows/docker.yml` ```yaml name: 构建 Docker镜像 # Actions名称,docker on: # 定义触发工作流的事件 release: # 当发布新的GitHub release时触发 types: [ published ] # 当发布新的GitHub release时触发 workflow_dispatch: # 手动触发 inputs: # 输入的参数 tag: # 输入的标签 description: '构建的版本号' # 手动触发时输入的标签描述 required: true # 必须输入 default: 'test' # 默认标签为'test' workflow_run: workflows: ["GoReleaser Workflow"] # 指定工作流完成时触发 types: [completed] # 当工作流完成时触发 permissions: # 工作流权限 contents: read # 工作流需要读取仓库内容的权限 # 可以有多个工作流,多个工作流依次运行 # 一个工作流运行由一个或多个作业组成,这些作业可以顺序或并行运行 jobs: # 工作流作业 image: # 作业名称,唯一标识 name: 从 Dockerfile 构建映像 # 工作流作业名称 runs-on: ubuntu-latest # 在最新的Ubuntu环境中运行 steps: # 工作流步骤 # 检出代码 - name: 检查代码是否在工作目录 # 步骤名称 uses: actions/checkout@v4 # 引用流程 # with: # 参数 # fetch-depth: '0' # 获取深度,0表示获取所有提交记录 # 设置QEMU,用于构建多平台镜像 - name: 设置 QEMU # 步骤名称 uses: docker/setup-qemu-action@v3 # 引用流程 # 设置Docker Buildx,用于构建和推送多平台镜像 - name: 设置 Docker Buildx # 步骤名称 uses: docker/setup-buildx-action@v3 # 引用流程 # 获取镜像标签名称 - name: 获取 Image Tag # 步骤名称 # 注意 | 后注释会有问题故放在这 # 如果没有提供标签,则使用GitHub Ref作为标签 # 如果提供了标签,则使用提供的标签 run: | if [ x${{ github.event.inputs.tag }} == x"" ]; then echo "TAG_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV else echo "TAG_NAME=${{ github.event.inputs.tag }}" >> $GITHUB_ENV fi # 登录到Docker Hub - name: 登录 DockerHub # 步骤名称 uses: docker/login-action@v3 # 引用流程 with: username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub用户名(需在secrets中配置) password: ${{ secrets.DOCKERHUB_PASSWORD }} # Docker Hub密码(需在secrets中配置) # 准备镜像标签 - name: 设置 Image Tags # 步骤名称 # 注意 | 后注释会有问题故放在这 # 设置引用的Dockerfile路径 # 设置构建的镜像标签:版本号+latest(注意tag全小写) run: | echo "DOCKERFILE_PATH=Dockerfile" >> $GITHUB_ENV echo "TAG=918178/sqlynx:${{ env.TAG_NAME }}" >> $GITHUB_ENV echo "TAG_LATEST=918178/sqlynx:latest" >> $GITHUB_ENV # 构建并推送镜像 - name: 编译并推送 sqlynx镜像 # 步骤名称 uses: docker/build-push-action@v5 # 引用流程 with: # 参数 context: . # 构建上下文 file: ./Dockerfile # 指定的Dockerfile platforms: linux/amd64 # 构建的平台(测试构建,少一些快一点),多架构一般取决于使用的基础镜像支持架构 # platforms: linux/amd64,linux/386,linux/arm64,linux/arm/v7 # 构建的平台(正式构建) push: true # 推送到仓库 # load: true # 加载到本地(多构建平台不支持;若其它也需调用镜像则必须加载,如打包导出) # 注意 | 后注释会有问题故放在这 # 传递构建参数(覆盖 ARG SQLYNX_VERSION=3.5.0 配置参数) # build-args: | # SQLYNX_VERSION=${{ env.TAG_NAME }} # 注意 | 后注释会有问题故放在这 # 推送的镜像标签(版本标签+latest) tags: | ${{ env.TAG }} ${{ env.TAG_LATEST }} # # 镜像打包为tar包 # - name: 镜像打包为tar包 # 步骤名称 # # 注意 | 后注释会有问题故放在这 # # 运行的具体指令,每行指令依次运行 # run: | # docker save -o sqlynx.tar 918178/sqlynx:latest # # 将构建好的镜像导出为tar包 # - name: Archive 导出内部文件 # 步骤名称 # uses: actions/upload-artifact@v4 # 引用流程 # with: # 参数 # name: sqlynx.tar # 导出的文件名称 # path: sqlynx.tar # 导出的文件路径 ``` ## 备用方案 `.github/workflows/docker.yml` ```yaml name: 构建 Docker镜像 # 名称,docker # 控制何时运行此操作。当通过UI或API手动触发时,工作流将运行,workflow_dispatch 手动开始 on: [workflow_dispatch] # 可以有多个工作流,多个工作流依次运行 # 一个工作流运行由一个或多个作业组成,这些作业可以顺序或并行运行 jobs: # 工作流作业名称,任意且唯一 docker: # 作业将在哪种类型的运行器上运行 runs-on: ubuntu-latest # 步骤代表作为作业一部分将执行的任务序列 steps: # 步骤名称 - name: 检查代码是否在工作目录 # user 引用其它流程 uses: actions/checkout@v3 - name: 设置 Docker Buildx # 使用buildx来构建镜像,这个工具功能很丰富 uses: crazy-max/ghaction-docker-buildx@v1 with: buildx-version: latest - name: 构建 dockerfile # 运行的具体指令,每行指令依次运行 run: | docker build -f Dockerfile-Dev -t habitica:latest . docker save -o habitica.tar habitica:latest - name: Archive 导出内容部文件 uses: actions/upload-artifact@v4 with: # 导出文件显示名称 name: habitica.tar # 导出的内部文件地址 path: habitica.tar # - name: 登录 DockerHub # uses: docker/login-action@v3 # with: # username: ${{ secrets.DOCKERHUB_USERNAME }} # DockerHub 用户名 # password: ${{ secrets.DOCKERHUB_TOKEN }} # DockerHub Token # # Docker编译并上传 # - name: 设置 QEMU # uses: docker/setup-qemu-action@v2 # - name: 设置 Docker Buildx # uses: docker/setup-buildx-action@v2 # - name: 编译并上传 # uses: docker/build-push-action@v4 # with: # context: . # file: ./Dockerfile-Dev # platforms: | # linux/amd64 # linux/arm64 # push: true # tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.GITHUB_REPOSITORY_NAME_PART }}:latest ``` **相关教程:** [[GitOps] 白嫖神器Github Actions,构建、推送Docker镜像一路畅通无阻](https://www.cnblogs.com/jine1987/p/17855013.html)
造物者W
2024年12月25日 13:57
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码