【问题标题】:Do I build a Docker Image for this or do I Need to use Docker Compose?我是为此构建 Docker 映像还是需要使用 Docker Compose?
【发布时间】:2016-05-18 19:01:45
【问题描述】:

我正在尝试进入 Docker 并使用当前项目作为学习练习。这是一个使用 Centos 7、Node 和 MySQL 的相当基本的应用程序。

我的第一个想法是拉一个 CentOS 7 镜像和上面提到的其他镜像。

当我测试一个 Node 映像时,我意识到我可能不需要 Centos 映像,但我确实需要 MySQL...不是为此组合图像的推荐方法,即使它是该项目的正确路线。

我应该从操作系统映像开始,然后在任何其他服务器上安装我需要的所有依赖项/服务,还是应该将这些映像与 Docker Compose 或类似的东西一起运行?

我尝试查看构建 WordPress 图像以了解它们在做什么,但大多数教程只是引用预构建的图像。

我确信我可以一起破解一些东西,但我想走首选路线。

我希望我可以在 Dockerfile 中指定所有这些内容,以便轻松共享。

对此的任何方向表示赞赏。谢谢!

【问题讨论】:

    标签: mysql node.js image docker docker-compose


    【解决方案1】:

    Quoting from the official best practices:

    每个容器只运行一个进程

    在几乎所有情况下,您都应该只在单个容器中运行单个进程。将应用程序解耦到多个容器中可以更轻松地水平扩展和重用容器。如果该服务依赖于另一个服务,请使用container linking

    如果您想在一个容器中运行多个进程,您将需要某种主管或初始化系统,并且您将失去 docker 提供的一些功能(日志记录、自动重启)。

    总而言之,这比每个进程运行一个容器更麻烦。后者也稍微安全一点,因为进程不能轻易攻击其他进程。


    因此,在您的具体情况下,您将运行一个mysql 容器和一个node 容器(可能基于node:onbuild)并将mysql 链接到node 以让nodemysql 对话。

    【讨论】:

    • 我需要两个单独的 Dockerfile 吗?如果我理解正确,它似乎是一个图像,比如说 mysql,被配置然后成为一个我可以命名为 some-project-mysql 的容器。当容器相互依赖时,我该如何指定?因此,如果我将其传递给另一个人,假设他们在他们的机器上运行 docker,他们可以运行 Dockerfile,并且环境应该就像在我的机器上一样?
    • 链接是在运行容器时指定的,而不是在创建镜像时指定的:docs.docker.com/engine/userguide/networking/default_network/… 如果你共享你的 Dockerfile,你会必须指定您希望链接的服务类型。例如:“您需要链接一个名为 'mysql' 的 MySQL 实例”。那么无论是 MySQL、MariaDB 还是 Percona 都无关紧要。
    • 好的,所以没有一个真正好的开箱即用的自动化方法来处理这个问题......无需自己编写脚本。好的,谢谢您的意见!
    猜你喜欢
    • 2022-11-04
    • 2020-12-20
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多