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

Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分

在本篇博文中,我们将深入探讨 Docker in Docker (DinD) 的强大功能。这项技术使我们能够在 Docker 容器中运行 Docker 命令,为容器化工作流开辟了无限可能。

本系列文章将探讨如何让 Docker 与 Azure DevOps 无缝协作!在本篇博文中,我们将探索一个名为 Docker in Docker (DinD) 的酷炫技巧。它就像在容器中嵌套容器,对于任何使用 Kubernetes 的人来说,它都将带来颠覆性的改变。

我们将指导您创建 Docker in Docker 镜像并在 Kubernetes Pod 中运行它们。我们将把所有内容连接到 Azure DevOps,让您轻松运行 Docker 任务。

准备好简化您的 Kubernetes 工作流程,并使用 Docker 和 Azure DevOps 将 DevOps 提升到新的水平。让我们开始吧!

目录

  1. 了解 Docker in Docker
  2. 设置 Docker in Docker 镜像
  3. 在 Kubernetes 中部署 Docker in Docker (DinD) 镜像
  4. 在 DinD 自托管代理上运行 Docker 命令
  5. Docker in Docker (DinD) 对 Azure DevOps 的优势

了解 Docker in Docker


顾名思义,Docker in Docker 使我们能够将 Docker 容器嵌套在一起。此功能在需要在隔离环境中构建、测试或部署 Docker 化应用程序的场景中尤为有用。

设置 Docker in Docker 镜像


首先,我们将创建一个 Docker in Docker 镜像。该镜像允许我们在容器内无缝执行 Docker 命令。通过封装 Docker 运行时环境,我们可以确保跨不同平台的一致性和可移植性。

让我们构建一个 Docker in Docker (DinD) 镜像:

在你的 Docker 环境中创建包含以下内容的 Dockerfile

#
# Ubuntu Bionic + Docker
#
# Instructions for docker installation taken from:
# https://docs.docker.com/install/linux/docker-ce/ubuntu/
#FROM ubuntu:bionic# Docker install
RUN apt-get update && apt-get install --no-install-recommends -y \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88RUN add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable"
RUN apt-get update && apt-get install --no-install-recommends -y docker-ce docker-ce-cli containerd.ioRUN apt update -y && apt upgrade -y && apt install curl git jq libicu60 -y# Also can be "linux-arm", "linux-arm64".
ENV TARGETARCH="linux-x64"WORKDIR /azp/COPY ./start.sh ./
RUN chmod +x ./start.shENV AGENT_ALLOW_RUNASROOT="true"# # Set start.sh script as ENTRYPOINT.
ENTRYPOINT ["/azp/start.sh"]

在同一路径下创建一个start.sh脚本,内容如下(该脚本将帮助我们启动容器内的docker并连接到Azure DevOps代理池)

#!/bin/bash
set -eprint_header() {lightcyan="\033[1;36m"nocolor="\033[0m"echo -e "\n${lightcyan}$1${nocolor}\n"
}print_header "Starting the Docker Process..."
dockerd > /var/log/dockerd.log 2>&1 &if [ -z "${AZP_URL}" ]; thenecho 1>&2 "error: missing AZP_URL environment variable"exit 1
fiif [ -z "${AZP_TOKEN_FILE}" ]; thenif [ -z "${AZP_TOKEN}" ]; thenecho 1>&2 "error: missing AZP_TOKEN environment variable"exit 1fiAZP_TOKEN_FILE="/azp/.token"echo -n "${AZP_TOKEN}" > "${AZP_TOKEN_FILE}"
fiunset AZP_TOKENif [ -n "${AZP_WORK}" ]; thenmkdir -p "${AZP_WORK}"
ficleanup() {trap "" EXITif [ -e ./config.sh ]; thenprint_header "Cleanup. Removing Azure Pipelines agent..."# If the agent has some running jobs, the configuration removal process will fail.# So, give it some time to finish the job.while true; do./config.sh remove --unattended --auth "PAT" --token $(cat "${AZP_TOKEN_FILE}") && breakecho "Retrying in 30 seconds..."
http://www.dtcms.com/a/312443.html

相关文章:

  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(七级)
  • Mongo索引
  • 0基礎網站開發技術教學(二) --(前端篇 2)--
  • 【超分辨率专题】PiSA-SR:单步Diff超分新突破,即快又好,还能在线调参
  • 信息量,惊奇度,熵、KL散度(相对熵),交叉熵、最大似然估计MLE与最小化交叉熵的等价证明、
  • 每日一博 - 异步编程最佳实践
  • ABAP SQL更新DB小技巧 WITH INDICATORS
  • Python-初学openCV——图像预处理(六)
  • 【GitHub探索】Prompt开发评测平台CozeLoop踩坑体验
  • 【gStreamer】Windows VS2022 C++ 项目中调用gstreamer相关函数,获取无线摄像头视频
  • LLM - 智能体工作流设计模式
  • C++ 设计模式综合实例
  • 设计原则和设计模式
  • 浅窥Claude-Prompting for Agents的Talk
  • Go语法:闭包
  • AD方案(OpenLDAP或微软AD)适配信创存在的不足以及可能优化方案
  • 风光储综合能源系统双层优化规划设计【MATLAB模型实现】
  • Android 之 WebView与HTML交互
  • ticdc同步集群部署
  • Java ++i 与 i++ 底层原理
  • 六、Linux核心服务与包管理
  • Unity_数据持久化_IXmlSerializable接口
  • java:判断两个实例(对象)相等
  • 多向量检索:lanchain,dashvector,milvus,vestorsearch,MUVERA
  • RabbitMQ面试精讲 Day 9:优先级队列与惰性队列
  • SQL154 插入记录(一)
  • 十八、Javaweb-day18-前端实战-登录
  • JavaScript 性能优化实战指南:从运行时到用户体验的全面提升​
  • 【openlayers框架学习】十:openlayers中控件的使用
  • 学习笔记《区块链技术与应用》第六天 问答 匿名技术 零知识证明