生产和开发docker使用的区别

生产和开发docker使用的区别,docker,Docker,我想为我的网站试用docker。我使用php、nginx、mysql。我已经配置了docker,并在本地运行了我的网站。现在我想将我的网站发布到生产环境中。 开发人员版本和生产版本之间没有什么区别: 我需要能够在开发者模式下连接到容器内部的mysql(用于调试),但在生产模式下,为了安全起见,mysql必须与外部隔离 我想通过地址app.dev打开我的网站,并在我的开发人员机器上使用nginx代理映像,但在生产中,我不会使用nginx代理来提高性能 我可以用一个docker-compose.

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

  • 我需要能够在开发者模式下连接到容器内部的mysql(用于调试),但在生产模式下,为了安全起见,mysql必须与外部隔离
  • 我想通过地址app.dev打开我的网站,并在我的开发人员机器上使用nginx代理映像,但在生产中,我不会使用nginx代理来提高性能
我可以用一个docker-compose.yml文件运行docker吗? 还是应该为开发人员和生产版本创建两个版本的docker compose文件?但在这种情况下,我失去了docker的优势——同样的环境。如果我更改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

您可以通过基于环境变量的配置来实现这一点。 通常,不同的环境(即暂存和生产环境)只因其需要连接到的数据库、调用的外部服务、它们的端点和凭据等配置而不同

不要硬编码所有这些配置,而是从环境变量中读取它们。因此,您可以将同一docker compose文件与不同的环境变量一起用于暂存和生产环境


您还可以在的Rancher by Rancher Labs上探索Rancher以管理您的环境。

但在这种情况下,我应该发送容器,然后配置环境变量。据我所知,docker的主要思想是在没有任何配置的情况下发货和运行。或者如果env变量不存在,我可以设置默认值吗?Docker图像将保持不变。您的应用程序需要基于环境变量的配置。如果未传递任何环境变量,您还可以在应用程序中处理以使用生产配置作为默认值。但这是不安全的,因为您将与团队中的每个人共享您的生产凭证。Docker compose用于管理应用程序堆栈,在主应用程序启动之前启动所有依赖项。对不起,我不明白。例如,只有当ENV_DEV存在且等于TRUE时,我才需要映射mysql端口3306:3306。我该怎么办?基于docker hub的mysql:5.7映像创建我自己的mysql:5.7映像。而不是在mymysql映像的dockerfile check变量和expose port中,如果该变量为true,对吗?公开容器端口是启动它的一部分。您不能使用环境属性做出这样的决定。您正在尝试将容器的端口3306映射到主机服务器。是的,我希望将端口3306从容器映射到主机。但我只想在开发机器上(开发模式)这样做。我不想在生产模式下映射任何mysql端口。我怎样才能做到这一点?对不起,我有很多问题要问。