当前位置: 首页 > article >正文

如何构建容器镜像并将其推送到极狐GitLab容器镜像库?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有:

  • 极狐GitLab 中文文档
  • 极狐GitLab 中文论坛
  • 极狐GitLab 官网

构建容器镜像并将其推送到容器镜像库 (BASIC ALL)


在构建和推送容器镜像之前,您必须通过容器镜像库的身份验证。

使用 Docker 命令

您可以使用 Docker 命令构建容器镜像并将其推送到您的容器镜像库:

1.使用容器镜像库进行身份验证。

2.运行 Docker 命令构建或推送。例如:

  • 构建:
docker build -t registry.example.com/group/project/image .
  • 推送:
docker push registry.example.com/group/project/image

配置您的 .gitlab-ci.yml 文件


您可以配置 .gitlab-ci.yml 文件来构建容器镜像并将其推送到容器镜像库。

  • 如果多个作业需要身份验证,请将身份验证命令放在 before_script 中。

  • 在构建之前,使用 docker build --pull 获取对基础镜像的更改,它需要稍长的时间,但可以确保您的镜像是最新的。

  • 在每次 docker run 之前,执行 docker pull 来获取刚刚构建的镜像。如果您使用多个在本地缓存镜像的 runner,此步骤尤为重要。如果您在镜像标签中使用 Git SHA,则每个作业都是独一无二的,您永远不应该拥有陈旧的镜像。但是,如果您在依赖项发生更改后重建特定的提交,仍然可能会出现陈旧的镜像。

  • 不要直接构建到 latest 标签,因为多个作业可能同时发生。

使用极狐GitLab CI/CD


您可以使用极狐GitLab CI/CD 构建容器镜像并将其推送到容器镜像库。您可以使用 CI/CD 从您创建的容器镜像测试、构建和部署您的项目。

使用容器镜像库中的 Docker-in-Docker 容器镜像

您可以将自己的容器镜像用于 Docker-in-Docker。

1.设置 Docker-in-Docker。
2.更新 imageservice 指向您的镜像库。
3.添加服务别名。

.gitlab-ci.yml 示例:

build:image: $CI_REGISTRY/group/project/docker:20.10.16services:- name: $CI_REGISTRY/group/project/docker:20.10.16-dindalias: dockerstage: buildscript:- docker build -t my-docker-image .- docker run my-docker-image /script/to/run/tests

如果忘记设置服务别名,容器镜像会找不到 dind 服务,报如下错误:

error during connect: Get http://docker:2376/v1.39/info: dial tcp: lookup docker on 192.168.0.1:53: no such host

将 Docker-in-Docker 容器镜像与依赖代理结合使用

您可以将自己的容器镜像与依赖代理结合使用。

1.设置 Docker-in-Docker。
2.更新 imageservice 指向您的镜像库。
3.添加服务别名。

.gitlab-ci.yml 示例:

build:image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:20.10.16services:- name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:18.09.7-dindalias: dockerstage: buildscript:- docker build -t my-docker-image .- docker run my-docker-image /script/to/run/tests

如果忘记设置服务别名,容器镜像会找不到 dind 服务,报如下错误:

error during connect: Get http://docker:2376/v1.39/info: dial tcp: lookup docker on 192.168.0.1:53: no such host

使用极狐GitLab CI/CD 的容器镜像库示例


如果您在 runner 上使用 Docker-in-Docker,.gitlab-ci.yml 文件示例如下:

build:image: docker:20.10.16stage: buildservices:- docker:20.10.16-dindscript:- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY- docker build -t $CI_REGISTRY/group/project/image:latest .- docker push $CI_REGISTRY/group/project/image:latest

您可以在 .gitlab-ci.yml 文件中使用 CI/CD 变量。例如:

build:image: docker:20.10.16stage: buildservices:- docker:20.10.16-dindvariables:IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUGscript:- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY- docker build -t $IMAGE_TAG .`在这里插入代码片`- docker push $IMAGE_TAG

在此示例中,$CI_REGISTRY_IMAGE 解析为与此项目关联的镜像库地址。$CI_COMMIT_REF_NAME 解析为分支或标签名称,可以包含正斜杠。镜像标签不能包含正斜杠。使用 $CI_COMMIT_REF_SLUG 作为镜像标签。您可以声明变量 $IMAGE_TAG,结合 $CI_REGISTRY_IMAGE$CI_REGISTRY_IMAGE,节省 script 部分中的一些输入。
此示例将任务拆分为 4 个流水线阶段,包括两个并行运行的测试。build 存储在容器镜像库中,供后续阶段使用,在需要时下载容器镜像。对 main 的更改也被标记为 latest 并使用特定于应用程序的部署脚本进行部署:

image: docker:20.10.16
services:- docker:20.10.16-dindstages:- build- test- release- deployvariables:# Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabledDOCKER_HOST: tcp://docker:2376DOCKER_TLS_CERTDIR: "/certs"CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUGCONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latestbefore_script:- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRYbuild:stage: buildscript:- docker build --pull -t $CONTAINER_TEST_IMAGE .- docker push $CONTAINER_TEST_IMAGEtest1:stage: testscript:- docker pull $CONTAINER_TEST_IMAGE- docker run $CONTAINER_TEST_IMAGE /script/to/run/teststest2:stage: testscript:- docker pull $CONTAINER_TEST_IMAGE- docker run $CONTAINER_TEST_IMAGE /script/to/run/another/testrelease-image:stage: releasescript:- docker pull $CONTAINER_TEST_IMAGE- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE- docker push $CONTAINER_RELEASE_IMAGEonly:- maindeploy:stage: deployscript:- ./deploy.shonly:- mainenvironment: production

NOTE:此示例明确调用 docker pull。如果您更喜欢使用 image: 拉取容器镜像,并使用 Docker 或 Kubernetes 执行器,确保 pull_policy 设置为 always。

相关文章:

如何构建容器镜像并将其推送到极狐GitLab容器镜像库?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 构建容器镜像并将其推送到容器镜像库 (BASIC ALL) 在构建和推送容器镜像之前,您必须通过容器镜像库的身份验证。 …...

计网学习笔记———网络

🌿网络是泛化的概念 网络是泛化的概念 🍂泛化理解 网络的概念在生活中无处不在举例:社交网络、电话网路、电网、计算机网络 🌿网络的定义 定义: 离散的个体通过通讯手段连成群体,实现资源的共享与交流、个…...

计算机三大主流操作系统的前世今生 - Linux|macOS|Windows

全文目录 1 引言2 起源之路2.1 Linux 起源2.2 macOS 起源2.3 Windows 起源 3 综合解析3.1 Linux系统综合解析3.1.1 系统定义与核心架构3.1.2 发展历程3.1.3 核心特点3.1.4 主流发行版3.1.5 应用场景 3.2 macOS系统综合解析3.2.1 系统定义与核心架构3.2.2 发展历程3.2.3 核心特点…...

数据集-目标检测系列- 烟雾 检测数据集 smoke >> DataBall

数据集-目标检测系列- 消防 浓烟 检测数据集 smoke>> DataBall 数据集-目标检测系列- 烟雾 检测数据集 smoke >> DataBall * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-10…...

【单片机毕业设计15-基于stm32c8t6的智能酒窖系统设计】

【单片机毕业设计15-基于stm32c8t6的智能酒窖系统设计】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 🔥这里是小殷学长,单片机毕业设计篇15-基于stm32c8t6的智能酒窖系统设计 🧿创作不易,拒绝白嫖可私 一、功能介绍 ----…...

【Bluedroid】蓝牙 HID 设备服务注册流程源码解析:从初始化到 SDP 记录构建

本文围绕蓝牙 HID(人机接口设备)服务注册流程,详细解析从 HID 服务启用、设备初始化、L2CAP 通道注册到 SDP(服务发现协议)记录构建的全流程。通过分析关键函数如btif_hd_service_registration、BTA_HdEnable、HID_Dev…...

TWAS、GWAS、FUSION

全基因组关联研究(GWAS,Genome-Wide Association Study)是一种统计学方法,用于在全基因组水平上识别与特定性状或疾病相关的遗传变异。虽然GWAS可以识别与性状相关的遗传信号,但它并不直接揭示这些遗传变异如何影响生物…...

测试一下多模态提取图片中文字的能力

测试一下多模态提取图片中文字的能力 原图片, 提取结果, 各位嘉宾,大家好!明天(5月11日)9:00-12:00将在大连市高新园区星火亚庭32号A座一层二楼设置咖啡厅等六个小水活动。请大家积极安排时间,…...

(51单片机)LCD显示红外遥控相关数字(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)

前言: 本次Timer0模块改装了一下,注意!!!今天只是简单的实现一下,明天用次功能显示遥控密码锁 演示视频: 在审核 源代码: 如上图将9个文放在Keli5 中即可,然后烧录在…...

物品识别 树莓派4 YOLO v11

让树莓派可以识别身边的一些物品 python3 -m venv --system-site-packages yolooo source yolooo/bin/activate 树莓派换清华源,bookworm 下面这条命令将安装 OpenCV 以及运行 YOLO 所需的基础设施 pip install ultralytics 还会安装大量其他软件包&#xff0c…...

【计算机视觉】3DDFA_V2中表情与姿态解耦及多任务平衡机制深度解析

3DDFA_V2中表情与姿态解耦及多任务平衡机制深度解析 1. 表情与姿态解耦的技术实现1.1 参数化建模基础1.2 解耦的核心机制1.2.1 基向量正交化设计1.2.2 网络架构设计1.2.3 损失函数设计 1.3 实现代码解析 2. 多任务联合学习的权重平衡2.1 任务定义与损失函数2.2 动态权重平衡策略…...

istio in action之流量控制与路由

当流量进入集群后,我们如何确保它能被精确地路由到正确的服务?特别是当我们需要发布新版本时,如何在不中断服务的前提下,安全地将用户引入到新版本?这正是我们今天要深入探讨的精细化流量控制,看看 Istio 如…...

图像处理篇---opencv实现坐姿检测

文章目录 前言一、方法概述使用OpenCV和MediaPipe关键点检测角度计算姿态评估 二、完整代码实现三、代码说明PostureDetector类find_pose()get_landmarks()cakculate_angle()evaluate_posture() 坐姿评估标准(可进行参数调整):可视化功能&…...

优选算法——前缀和

目录 1. 数组的中心下标 2. 除自身以外数组的乘积 3. 和为k的子数组 4. 和可被K整除的子数组 5. 连续数组 6. 矩阵区域和 1. 数组的中心下标 题目链接:724. 寻找数组的中心下标 - 力扣(LeetCode) 题目展示: 题目分析&am…...

用AI写简历是否可行?

让AI批量写简历然后投简历是绝对不行的!!! 为什么不行,按照 "招聘经理" 工作经历举例: ai提示词:请帮我写一份招聘经理的工作经历内容: 招聘经理 | XXX科技有限公司 | 2020年…...

力扣题解:2、两数相加

个人认为,该题目可以看作合并两个链表的变种题,本题与21题不同的是,再处理两个结点时,对比的不是两者的大小,而是两者和是否大于10,加法计算中大于10要进位,所以我们需要声明一个用来标记是否进…...

C语言_函数hook方案

背景 单体测试中测试一个函数时,该函数调用的其他函数,需要按照测试case,依赖其他函数进行调用参数检查,返回特定值。但是其他函数,不容易做到参数检查和返回特定值,这时需要将其他函数进行hook,hook函数用户自己实现,比较容易实现参数检查和返回值特定值。 本文主要…...

IPM IMI111T-026H 高效风扇控制板

概述: REF-MHA50WIMI111T 是一款专为风扇驱动设计的参考开发板,搭载了英飞凌的IMI111T-026H iMOTION™智能功率模块(IPM)。这个模块集成了运动控制引擎(MCE)、三相栅极驱动器和基于IGBT的功率级,全部封装在一个紧凑的DSO22封装中。REF-MHA50…...

Qt 关于获取postgres time with time zone类型字段存在无效值的情况

Qt 获取 postgres time with time zone类型字段存在无效值的情况 事件起因 在使用Qt获取pg数据库中time with time zone类型字段时偶发出现时间获取失败,体现为获取结果为无效值 QVariant vt sqlQuery->value(i); // QVariant(QTime, QTime(Invalid))查看源码 查看Qt q…...

武汉火影数字|数字科技馆打造:开启科技探索新大门

足不出户,就能畅游科技的奇幻世界,你相信吗?数字科技馆就能帮你实现!在这个数字化的时代,数字科技馆如同一颗璀璨的新星,照亮了我们探索科学的道路。 那么,数字科技馆究竟是什么呢? …...

suricata之日志截断

一、背景 在suricata的调试过程中,使用SCLogXXX api进行信息的输出,发现输出的日志被截断了,最开始以为是解析逻辑有问题,没有解析完整,经过排查后,发现SCLogXXX api内部进行了长度限制,最长2K…...

leetcode 2918. 数组的最小相等和 中等

给你两个由正整数和 0 组成的数组 nums1 和 nums2 。 你必须将两个数组中的 所有 0 替换为 严格 正整数,并且满足两个数组中所有元素的和 相等 。 返回 最小 相等和 ,如果无法使两数组相等,则返回 -1 。 示例 1: 输入&#xf…...

简易图片编辑工具,支持抠图和替换背景

软件介绍 Photo Retouch是一款由微软官方商店推出的免费图片处理软件,具有抠图、换背景、修复等功能,操作便捷且效率极高,非常值得尝试。 功能详解 这款软件提供五大功能,包括删除物体、快速修复、一键抠图、背景调整和裁剪…...

Java Bean容器详解:核心功能与最佳使用实践

在Java企业级开发中,Bean容器是框架的核心组件之一,它通过管理对象(Bean)的生命周期、依赖关系等,显著提升了代码的可维护性和扩展性。主流的框架如Spring、Jakarta EE(原Java EE)均提供了成熟的…...

Spring Security 深度解析:打造坚不可摧的用户认证与授权系统

Spring Security 深度解析:打造坚不可摧的用户认证与授权系统 一、引言 在当今数字化时代,构建安全可靠的用户认证与授权系统是软件开发中的关键任务。Spring Security 作为一款功能强大的 Java 安全框架,为开发者提供了全面的解决方案。本…...

Selenium模拟人类行为,操作网页的方法(全)

看到有朋友评论问,用selenium怎么模仿人类行为,去操作网页的页面呢? 我想了想,这确实是一个很大的点,不应该是一段代码能解决的, 就像是,如果让程序模拟人类的行为。例如模拟人类买菜,做饭&am…...

HNUST湖南科技大学-软件测试期中复习考点(保命版)

使用说明:本复习考点仅用于及格保命。软件测试和其他专业课不太一样,记忆的太多了,只能说考试的时候,想到啥就写啥,多写一点!多写一点!多写一点!(重要事情说三遍&#xf…...

如何使用极狐GitLab 软件包仓库功能托管 python?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 PyPI 包 (BASIC ALL) 在项目的软件包库中发布 PyPI 包。然后在需要将它们用作依赖项时安装它们。 软件包库适用…...

右值引用的剖析

引入:为什么要有右值引用? 右值引用的存在,就是为了解决左值引用解决不了的问题! 左值引用的问题: 我们知道,左值引用在做参数和做返回值都可以提高效率;但是有时候,我们无法用左…...

tmpfs和普通文件系统相比有哪些优缺点

tmpfs 是一种基于内存的文件系统,与普通文件系统相比,在读写速度、数据安全性等方面存在明显差异,以下是其优缺点对比: 优点 读写速度快:普通文件系统读写数据时,需要通过硬盘等存储设备进行 I/O 操作&…...