Docker 在 Docker
Docker in Docker
我们有应用程序,它将运行短期(短期)docker 容器。现在,它 运行 在 Ubunut16.04 服务器(VM)中,我们在同一台服务器上安装了 docker 和 nodejs。我们在同一台服务器上有 运行 的 nodejs 应用程序,因此无论何时收到请求,nodejs 应用程序都会启动一个 docker 容器并在 docker 容器内执行用户输入。在 docker 完成其工作后,或者如果它 运行 超出了管理员定义的资源,那么 docker 容器将被强制终止(docker 终止)并删除(dockerrm).
现在我的问题是,运行 Ubunte16.04 docker 容器和 运行 nodjes 应用程序以及短期 docker 容器是否是最佳实践Ubunuter16.04 docker 容器。
简而言之 运行 一个 docker 在其他 docker 容器内。
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,但还有许多其他选项。它不是服务器进程直接启动子进程,而是将消息写入队列。 worker 不再是频繁启动和停止的短命进程,而是一个长寿的 worker,它从队列中读取作业并执行它们。这使您处于更加成熟的 Docker space 中,不需要动态启动和停止容器,并且您可以在非 Docker 环境中轻松测试 Node-Rabbit-worker 堆栈.
我们有应用程序,它将运行短期(短期)docker 容器。现在,它 运行 在 Ubunut16.04 服务器(VM)中,我们在同一台服务器上安装了 docker 和 nodejs。我们在同一台服务器上有 运行 的 nodejs 应用程序,因此无论何时收到请求,nodejs 应用程序都会启动一个 docker 容器并在 docker 容器内执行用户输入。在 docker 完成其工作后,或者如果它 运行 超出了管理员定义的资源,那么 docker 容器将被强制终止(docker 终止)并删除(dockerrm).
现在我的问题是,运行 Ubunte16.04 docker 容器和 运行 nodjes 应用程序以及短期 docker 容器是否是最佳实践Ubunuter16.04 docker 容器。
简而言之 运行 一个 docker 在其他 docker 容器内。
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,但还有许多其他选项。它不是服务器进程直接启动子进程,而是将消息写入队列。 worker 不再是频繁启动和停止的短命进程,而是一个长寿的 worker,它从队列中读取作业并执行它们。这使您处于更加成熟的 Docker space 中,不需要动态启动和停止容器,并且您可以在非 Docker 环境中轻松测试 Node-Rabbit-worker 堆栈.