首先是一个容器要包含完整的程序加依赖(出去中间件),拿 LNMP 举例子:docker 提供的是 Linux 环境,容器中要包含 Nginx 和 Php,然后再单独部署一个 MySQL
其次,如果多个环境,可以使用多个容器,简单的可以直接使用 -p 参数加端口区分,对于 web 程序也可以通过域名区分环境(下图仅供参考,不建议把生产环境和开发环境放在同一台机器上):
+---------+ +--------------+ +--------------------+
| | | | | |
| | | Dev +------>+ |
http://dev.xxx.com | | | | | |
+-------------------> | +--------------+ | DB for Dev |
| Nginx | | |
| | +--------------+ | DB for test |
http://test.xxx.com| Proxy | | | | |
+-------------------> | | Test +------>+ |
| | | | | |
| | +--------------+ +--------------------+
http://prod.xxx.com| |
+-------------------> | +--------------+ +--------------------+
| | | | | |
| | | Prod +------>+ DB for prod |
| | | | | |
+---------+ +--------------+ +--------------------+
开发环境的容器只需要部署的容器中带上 VIRTUAL_HOST=http://dev.xxx.com
测试环境的容器只需要部署的容器中带上 VIRTUAL_HOST=http://test.xxx.com