【问题标题】:Docker in Docker [duplicate]Docker中的Docker [重复]
【发布时间】:2018-08-28 18:25:32
【问题描述】:

我们有应用程序,它将旋转短期(短跨度)docker 容器。现在,它在 Ubunut16.04 服务器(VM)上运行,我们在同一台服务器上安装了 docker 和 nodejs。我们有在同一台服务器上运行的 nodejs 应用程序,因此每当有请求进入时,nodejs 应用程序将启动一个 docker 容器并在 docker 容器内执行用户输入。一旦 docker 完成其工作,或者如果它用完管理员定义的资源,那么 docker 容器将被强制终止(docker kill)并删除(docker rm)。

现在我的问题是,运行 Ubuntu16.04 docker 容器并运行 nodjes 应用程序和 Ubunuter16.04 docker 容器内的短期 docker 容器是否是最佳实践。

简而言之,在其他 docker 容器中运行一个 docker。

【问题讨论】:

标签: node.js docker docker-compose docker-machine


【解决方案1】:

Docker-in-Docker 通常被认为是脆弱且难以维护的,使用它并不是最佳实践。 https://hub.docker.com/_/docker/ 对此进行了一些讨论。

一种直接(但有潜在危险)的重新安排方法是让服务器进程访问主机的 Docker 套接字,docker run -v /var/run/docker.sock:/var/run/docker.sock。然后它可以根据需要启动自己的 Docker 容器。请注意,如果您这样做,这些子容器的 docker run -v 选项指的是 主机的 文件系统,而不是调用容器的文件系统,因此如果您尝试使用文件系统传输数据,这可以变得棘手。另请注意,能够以这种方式运行任何 Docker 命令可以无限制地访问主机,因此您需要非常小心如何启动容器。

更大的重新设计是引入某种消息队列系统;我过去曾成功使用过RabbitMQ,但还有很多其他选择。它不是服务器进程直接启动子进程,而是将消息写入队列。与其将工作人员作为频繁启动和停止的短期进程,您有一个长期工作人员可以从队列中读取作业并执行它们。这将您置于一个更加成熟的 Docker 空间中,无需动态启动和停止容器,并且您可以在非 Docker 环境中轻松测试 Node-Rabbit-worker 堆栈。

【讨论】:

  • 非常感谢 RabbitMQ 和长期容器的想法。
猜你喜欢
  • 1970-01-01
  • 2022-08-24
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多