如何设置docker架构

时间:2015-07-08 21:34:52

标签: postgresql nginx deployment docker

我想要进行以下配置:

               Docker Containers   

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

使用以下设置:

  1. Nginx的

    • 更改nginx.conf
    • 添加适当的sites-available条目
    • link config sites-enabled
  2. 的PostgreSQL

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

    • 从存储库克隆
    • 构建发布版本
    • 运行服务器进程
  4. 我也有几个问题:

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

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

    c)部署此类应用程序的方式和位置?

    d)即使可能吗?

3 个答案:

答案 0 :(得分:4)

此设置在docker中非常常见。我建议您考虑使用docker-compose(example),因为它可以使设置更加容易。

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

是的,您可以从docker容器或docker build中克隆repo。在docker build期间克隆私有repo目前是不可行的(不公开你的凭据)所以通常建议在运行docker build之前克隆你的repo。

答案 1 :(得分:1)

a)通常通过环境变量传递 secrets ,容易使用容器。

b)是的,你可以,如果你想克隆一个公共仓库,你可以在Dockerfile中用RUN git clone repo来做;如果你想确保你的回购更新,你也可以在Entrypoint给你回购。

c)嗯......我不知道如何回答这个问题,也许是docker docs

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

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

答案 2 :(得分:0)

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

容器通过链接进行通信,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