Jacky's Blog Jacky's Blog
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
  • 0
  • 1

在 Drone CI 中使用 DooD

Jacky
23 4 月, 2023
目录
  1. 前言
  2. 实验过程
  3. 在 Drone CI 中使用
  4. 引用

前言

DooD (Docker-outside-Docker) 是一种实现在 Docker 容器内部运行 Docker 的方法。与 DinD(Docker-inside-of-Docker)不同的是,DooD 使用的是宿主机的 Docker Engine。通过 DooD,我们可以在容器中构建镜像,并直接将其保存在宿主机的 Images 列表中。

Docker 采用客户端-服务器架构。Docker 客户端负责与 Docker 守护进程进行通信,而 Docker 守护进程则负责执行构建、运行和分发 Docker 容器的重要任务。Docker 客户端和守护进程可以在同一系统上运行,或者你可以将 Docker 客户端连接到远程的 Docker 守护进程。Docker 客户端和守护进程使用 REST API 通过 UNIX 套接字或网络接口进行通信。Docker Compose 是另一个 Docker 客户端,它允许你处理由多个容器组成的应用程序[1]。下图是对上述内容的抽象。

在 Drone CI 中使用 DooD-Jacky's Blog
Docker 架构图

根据 Docker 官网文档的描述,我们可以尝试在容器中安装 Docker Client,通过将主机上的 Docker 套接字映射到容器内部,实现容器内的 Docker 客户端与主机上运行的 Docker 守护进程通信。

实验过程

创建一个 debian 容器,将 /var/run 映射到容器内,并安装 Docker CLI。

apt-get update
apt-get install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce-cli

接下来执行 docker ps -a 如果在宿主机中执行的输出结果一样,则说明 DooD 启动成功。

在 Drone CI 中使用

本文以在 DooD 中构建一个 nextcloud 镜像为例,通过将宿主机的 /var/run 目录映射到容器内,在容器内安装 DooD,然后启动镜像构建过程。值得注意的是,需要为容器赋予 privileged 权限,否则 Drone 无法启动容器。

kind: pipeline
type: docker
name: nextcloud

steps:
    - name: build image
      image: debian
      privileged: true
      volumes:
      - name: dockersock
        path: /var/run
      commands:
        - apt-get update
        - apt-get install -y ca-certificates curl gnupg
        - install -m 0755 -d /etc/apt/keyrings
        - curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
        - chmod a+r /etc/apt/keyrings/docker.gpg
        - echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
        - apt-get update
        - apt-get install -y docker-ce-cli
        - docker ps -a
        - cd nextcloud
        - docker build -t nextcloud .

volumes:
- name: dockersock
  host:
    path: /var/run

引用

[1] Docker overview, https://docs.docker.com/get-started/overview/

0
解决动态 IP 和 DDNS 下 Nginx 反向代理的 504 超时问题
上一篇
Drone Bark 通知发送插件
下一篇

评论 (1)

再想想
  • 22攻略

    非常感谢你分享这篇文章,我从中学到了很多新的知识。

    2 年前

近期评论

  • Jacky 发表在《留言板》
  • 菜鸟 发表在《留言板》
  • merlin 发表在《留言板》
  • orz 发表在《Xcode 中使用 Clang-format》
  • Jacky 发表在《关于》
1
Copyright © 2016-2025 Jacky's Blog. Designed by nicetheme.
粤ICP备16016168号-1
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习

搜索

  • Mac
  • Apple
  • OS X
  • iOS
  • macOS
  • Linux
  • 阿里云
  • WordPress
  • 运维
  • macOS Sierra

Jacky

Go Python C C++ | 弱冠之年 | 物联网工程
183
文章
192
评论
267
喜欢