【问题标题】:How to setup docker architecture如何设置 docker 架构
【发布时间】:2015-07-08 21:34:51
【问题描述】:

我想要以下配置:

               Docker Containers   

||||||||||||      ||||||||||||      ||||||||||||
|          |      |          |      |          |
|          |      |          |      |          |
|          | <--> |          | <--> |          |
|          |      |          |      |          |
|          |      |          |      |          |
||||||||||||      ||||||||||||      ||||||||||||
   nginx           web server         postgres

使用以下设置:

  1. Nginx

    • 更改nginx.conf
    • 添加适当的sites-available 条目
    • 链接配置sites-enabled
  2. PostgreSQL

    • 设置用户登录名和密码
  3. 网络服务器

    • 从存储库克隆
    • 构建发布版本
    • 运行服务器进程

我也有几个问题:

a) 如何将 secrets 传递给 Docker,例如 API 密钥、密码等?

b) 这可以从 docker 克隆 repo 还是有其他方法可以做到这一点?

c) 如何以及在何处部署此类应用程序?

d) 这种设置是否可行?

【问题讨论】:

    标签: postgresql nginx deployment docker


    【解决方案1】:

    这种设置在 docker 中很常见。我建议您考虑使用 docker-compose (example),因为它可以大大简化设置。

    在 docker 运行时通过环境变量传递秘密。如果你有很多,你可以将它们存储在一个 env 文件中。

    是的,您可以从 docker 容器或在 docker 构建期间克隆 repo。在 docker build 期间克隆私有 repo 目前不可行(不暴露您的凭据),因此通常建议在运行 docker build 之前克隆您的 repo。

    【讨论】:

    • 这正是我正在使用的教程。
    【解决方案2】:

    a) 通常通过环境变量传递secrets,这样便于容器使用。

    b) 是的,你可以,如果你想克隆一个公共仓库,你可以在 Dockerfile 中使用RUN git clone repo 进行克隆;如果你想确保你的 repo 已经更新,你也可以在Entrypoint 拉你 repo。

    c) emm...我不知道怎么回答,也许docker docs

    d) 这种设置是可行的,但这里有一些建议:

    • 您可以尝试使用nginx-proxy,这样可以更轻松地为您的 Web 服务器容器创建预留代理。
    • 使用Volume 提供您的网络内容,因此您可以将卷绑定到 nginx 容器并使用 nginx 提供您的静态内容。
    • 为您的数据库构建一个仅数据容器,您可以查看this post

    【讨论】:

      【解决方案3】:

      这是 Docker 和 Docker-Compose 的小菜一碟。您所需要的只是合适的容器,您可以在其中在启动时传递参数。之后,compose-template 可以移动并多次实例化。

      容器通过链接进行通信,docker 提供主机名来处理不断变化的 IP 地址。

      这是一个使用 postgres 数据库设置 Jira Web 应用程序的示例。这应该类似于您的示例。可以轻松添加 nginx 服务器。

      jira:
        image: blacklabelops/jira
        ports:
          - '8100:8080'
        volumes:
          - /opt/atlassian-home
        environment:
          - 'DATABASE_URL=postgresql://jiradb@postgresql/jiradb'
          - 'DB_PASSWORD=jellyfish'
        links:
          - postgresql
      postgresql:
        image: sameersbn/postgresql:9.4-1
        ports:
          - '5432:5432'
        environment:
          - 'PSQL_TRUST_LOCALNET=true'
          - 'DB_USER=jiradb'
          - 'DB_PASS=jellyfish'
          - 'DB_NAME=jiradb'
      

      Jira 服务器可以通过 localhost:8100 使用,数据库可以通过 localhost:5432 使用

      【讨论】:

      • 我需要使用ports:吗?我看到了一些不必要的示例(即使对于 Postgres 图像)。我不想将ENVs 存储在我的Dockerfile 中。如何配置 postgres 或 nginx 图像而不是使用默认图像?
      • 当对话只需要沿链接进行时,您不需要端口声明,并且已安装的服务都已经知道要绑定哪些端口或它们在默认端口上运行。我不知道在没有 ENV 的情况下工作,因为它们可以灵活地重用图像并将我的凭据隐藏在视线之外。
      猜你喜欢
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 2011-09-17
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多