在Docker上组织多层应用程序的最佳实践

时间:2017-02-02 12:41:39

标签: docker docker-compose

我想就使用Docker组织项目的最佳实践提出一些建议。

假设我有项目X,它由两个主要应用程序组成,即Store和一个Product Management Application。它们是完全不同的应用程序,但它们是同一项目的一部分。他们有自己的服务,源代码,存储库和基础设施。

存储[mysql,mongodb,elasticsearch,nginx,php,app源代码] PMA [mysql,nginx,php,app源代码]

由于它们是两个不同的存储库并且有自己的docker-compose文件,如何只用一个命令运行所有内容?

我是否应该创建一个docker repo,它可以扩展docker-compose并一次性运行所有内容?

2 个答案:

答案 0 :(得分:0)

  • 尽可能地隔离事物,所以如果你需要一个mysql和一个 mongodb将它们分开,并使容器尽可能小, 只有他们需要的库和二进制文件(aka microcontainers)。为此,您还可以构建图像 使用alpine linux
  • 对于数据库容器,使用卷将数据存储在主机中 而不是容器,工作得更快。您还可以将配置文件存储在卷中,这样每次要更改配置时都不必访问容器。
  • 使用Dockefiles而不是手动构建图像,这样做 图像可在任何主机中复制,您可以将它们存储在git中。
  • 使用docker compose立即构建和运行所有容器。

答案 1 :(得分:0)

首先,我不建议将数据库容器化。没有很多好的用例,因为很多复制只是在几台主机上通过IO和磁盘利用来咀嚼。您还会丢失许多针对数据库/数据存储区的典型专业化和维护/管理。

创建Dockerfiles的git存储库。它使得更新系统在未来变得更加容易。我的结构通常是

/Dockerfiles
    /Project
        Dockerfile
        (required files)
        docker-compose.yml

还有一个私有注册表,但是从上面的dockerfiles构建这些图像。使管理版本变得更加容易,并促进了devops和自动部署。

  1. 创建一个群集群(一个或多个主机)
  2. 创建两个覆盖网络(如果您愿意,可以命名为store和pma)
  3. 创建要挂载到/ docker主机的共享NFS存储点。对于docker组,Mountpoint需要处于读取,写入和执行状态。这将用于elasticsearch集群上的持久存储
  4. 在商店网络上为php-fpm(运行源代码),NGINX代理它以及弹性搜索创建服务。他们可以通过名称
  5. 在覆盖网络上互相引用
  6. 在pma网络上为php-fpm,nginx(代理)
  7. 创建服务

    你也可以创建apache / php图像。这就是我们为beadockstar / laravel所做的。

    注意PHP系统上的存储。如果您需要将某些 not 的内容上传到某种类型的CDN,您需要确保将上传目录保存到/ docker主目录中(或所有swarm主机上的任何其他统一主机目录)

相关问题