生产和开发docker使用的区别

我想尝试docker为我的网站。 我使用php, nginx, mysql 。 我configuration了docker,并且在本地运行了我的网站。 现在我想发布我的网站到生产。 开发者和生产版本之间我几乎没有区别:

  • 我需要能够在开发人员模式(用于debugging)连接到容器内的MySQL,但在生产模式下,为了安全起见,mysql必须与外部隔离
  • 我想通过地址app.dev打开我的网站,并在我的开发人员机器上使用nginx-proxy映像,但在生产环境中,我不会使用nginx-proxy来提高性能。

我可以用一个docker-compose.yml文件运行docker吗? 还是应该为开发人员和生产版本创build两个版本的docker-compose文件? 但在这种情况下,我失去了docker的优势 – 同样的环境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 

您可以使用基于环境variables的configuration来实现此目的 通常情况下,不同的环境,即分段和生产只有像它需要连接到数据库,它调用的外部服务,它们的端点和凭证的configuration不同。

而不是硬编码所有这样的configuration,从环境variables读取它们。 因此,您可以为分段和生产环境使用具有不同环境variables的相同docker-compose文件。

您也可以通过http://rancher.com/浏览Rancher Labs的Rancher来pipe理您的环境。