星球狂想战队|如何在Docker容器中运行Docker 「3种方法」

DevOps云学堂 今天
星球狂想战队|如何在Docker容器中运行Docker 「3种方法」在本博客中 , 我将向您介绍在Docker中运行docker所需的三种不同方法 。
Docker In Docker的用处

  1. dockerIndocker的一个潜在用处是CI管道 , 在代码成功构建后 , 您需要在其中构建docker镜像并将其推送到容器镜像仓库 。
  2. 使用VM构建Docker映像非常简单 。 但是 , 当您计划将基于 Jenkins docker的动态代理用于CI/CD管道时 , docker In docker是必备功能 。
  3. 沙盒环境 。
  4. 出于实验目的 , 在您的本地开发工作站上 。
在Docker容器中运行Docker在Docker中实现Docker的三种方法
  1. 通过挂载docker.sock(DooD方法)运行docker
  2. dind 方法
  3. 使用Nestybox sysbox Docker运行时
让我们详细了解每个选项 。 确保在主机中安装了docker来尝试此设置 。
方法1:使用[/var/run/docker.sock]的Docker中运行Docker
星球狂想战队|如何在Docker容器中运行Docker 「3种方法」什么是/var/run/docker.sock?/var/run/docker.sock是默认的Unix套接字 。 套接字用于在同一主机上的进程之间进行通信 。 Docker守护程序默认情况下侦听docker.sock 。 如果您在运行Docker守护程序的主机上 , 则可以使用/ var/run/docker.sock管理容器 。
例如 , 如果您运行以下命令 , 它将返回docker engine的版本 。
【星球狂想战队|如何在Docker容器中运行Docker 「3种方法」】curl --unix-socket /var/run/docker.sock http://localhost/version现在您已经了解了什么是docker.sock , 让我们看看如何使用在docker中运行docker 。
要在docker内部运行docker , 要做的只是在默认Unix套接字docker.sock作为卷的情况下运行docker。
例如 ,
docker run -v /var/run/docker.sock:/var/run/docker.sock \-ti docker-image请注意:如果您的容器可以访问docker.sock , 则意味着它具有对docker守护程序的更多特权 。 因此 , 在实际项目中使用时 , 请了解并使用安全隐患 。
现在 , 从容器中 , 您应该能够执行docker命令来构建镜像并将其推送到镜像仓库 。 在这里 , 实际的docker操作发生在运行docker容器的VM主机上 , 而不是在容器内部进行 。 意思是 , 即使您正在容器中执行docker命令 , 也指示Docker客户端通过以下docker.sock方式连接到VM主机docker-engine 。
方法2:Docker In Docker
星球狂想战队|如何在Docker容器中运行Docker 「3种方法」此方法实际上在容器内部创建一个子容器 。 仅当您确实要在容器中包含容器和图像时才使用此方法 。 否则 , 我建议您使用第一种方法 。 为此 , 您只需要使用带有dind标签的官方docker镜像即可 。 该dind映像使用Docker所需的实用程序进行制作以在Docker容器中运行 。
方法3:使用Sysbox运行时的Docker中的Docker
星球狂想战队|如何在Docker容器中运行Docker 「3种方法」方法1和2在安全方面有一些缺点 , 因为在特权模式下运行容器 。 Nestybox尝试通过使用sysbox Docker运行时来解决该问题 。


推荐阅读