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

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.xdnf.cn/news/17080.html

相关文章:

  • 微分方程模型:用“变化率”的语言,描绘世间万物的动态演化
  • 前端面试手撕题目全解析
  • 2、docker容器命令 | 信息查看
  • io_submit系统调用及示例
  • 01.Redis 概述
  • AI Agent 重塑产业发展新格局
  • ICT模拟零件测试方法--电位器测试
  • Linux 文件与目录操作命令宝典
  • Kali基础知识点【1】
  • std::unordered_map 和 std::map的区别【C++】
  • 【开发备忘】下载并本地部署天地图WMTS服务
  • 文本换行问题
  • Node.js 操作 MySQL
  • SpringAI的使用
  • Mysql的MVCC是什么
  • 基于开源AI智能客服、AI智能名片与S2B2C商城小程序的餐饮行业私域流量运营策略研究
  • 数据结构-双链表
  • 【数据分享】各省粮食外贸依存度、粮食波动率等粮食相关数据合集(2011-2022)(获取方式看文末)
  • MCP革命:AI世界的“USB-C”接口如何重塑智能体与外部工具的连接
  • 信号传播速度与延时
  • 机器学习——下采样(UnderSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测
  • 【2025ICCV-目标检测方向】WaveMamba:用于 RGB-红外目标检测的小波驱动曼巴融合
  • 从零开始实现Qwen3(Dense架构)
  • template<typename R = void> 意义
  • 构建企业级Web应用:AWS全栈架构深度解析
  • ⭐CVPR2025 FreeUV:无真值 3D 人脸纹理重建框架
  • IDEA查看源码利器XCodeMap插件
  • DMDRS产品概述和安装部署
  • 服务端⾼并发分布式结构演进之路
  • 每日面试题19:深拷贝和浅拷贝的区别