使用生产和开发docker之间的差异

时间:2016-09-20 08:50:09

标签: docker

我想尝试使用docker作为我的网站。我使用php, nginx, mysql。我配置了docker,并且我在本地运行了我的网站。现在我想将我的网站发布到生产中。 我在开发人员和生产版本之间没什么区别:

  • 我需要能够在开发人员模式下连接到容器内的mysql(用于调试),但是在生产模式下,为了安全起见,必须将mysql与外界隔离
  • 我希望通过地址app.dev打开我的网站,并在我的开发者计算机上使用nginx-proxy图像,但在生产时我不会使用nginx-proxy来提高性能。

我可以使用一个docker-compose.yml文件运行docker吗? 或者我应该为开发人员和生产版本创建两个版本的docker-compose文件?但在这种情况下,我失去了码头工人的优势 - 同样的环境evrywhere。如果我更改docker-compose-dev.yml,我需要记住更改docker-compose-prod.yml。

我的docker-compose.yml:

version: '2'
services:
    app:
        build: .
        volumes:
         - ./app:/app
        container_name: app
    app_nginx:
        image: nginx
        ports:
         - "8080:80"
        container_name: app_nginx
        volumes:
            - ./data/nginx:/etc/nginx/conf.d
            - ./app:/app
        environment:
         - VIRTUAL_HOST=app.dev
    app_db:
        image: mysql:5.7
        volumes:
          - "./data/db:/var/lib/mysql"
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD:
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
            MYSQL_DATABASE: "app_db"
        container_name: app_db  
    nginx-proxy:
        image: jwilder/nginx-proxy
        container_name: nginx-proxy
        ports:
          - "80:80"
        volumes:
          - /var/run/docker.sock:/tmp/docker.sock:ro

1 个答案:

答案 0 :(得分:2)

您可以使用基于环境变量的配置来实现此目的。 通常不同的环境,即分段和生产,只有它需要连接的数据库,它调用的外部服务,它们的终点和凭证等配置才有所不同。

不是对所有这样的配置进行硬编码,而是从环境变量中读取它们。因此,您可以将具有不同环境变量的相同docker-compose文件用于登台和生产环境。

您还可以在http://rancher.com/探索Rancher Labs的Rancher来管理您的环境。