sun*_*ine 11 php mysql linux nginx docker
我使用Docker编写运行nginx+php+mysql
环境,OS是centos 7.2,问题是关于一个主机上的多个子网站:
例如:
有一台主机,两个项目将运行该主机,在
命名project-a
和 project-b
,
两个不同的docker-compose.yml
项目,一个和项目-B exsist.
当执行docker-compose up
中的项目和项目B,并nginx+php+mysql
环境中运行两个或一个?如果两个,占用了很多空间,如何解决这个问题呢?
version: '2'
services:
nginx:
container_name: nginx
image: nginx
ports:
- 80:80
- 443:443
links:
- php
env_file:
- ./.env
working_dir: /usr/share/nginx/html # should be `/usr/share/nginx/html/project-a` and `/usr/share/nginx/html/project-b` here?
volumes:
- ~/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
- ~/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ~/docker/www:/usr/share/nginx/html
php:
container_name: php
image: fpm
links:
- mariadb
- redis
env_file:
- ./.env
volumes:
- ~/docker/www:/usr/share/nginx/html
mariadb:
container_name: mariadb
image: mariadb
env_file:
- ./.env
volumes:
- ~/opt/data/mysql:/var/lib/mysql
redis:
container_name: redis
image: redis
Run Code Online (Sandbox Code Playgroud)
.ENV:
project-a
和project-b
有不同的DB_DATABASE
和APP_KEY
,其他项目都是相同的.
APP_ENV=local
APP_DEBUG=true
APP_KEY=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # Here different.
DB_HOST=laravel.dev
DB_DATABASE=project-a # Here different.
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=laravel.dev
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
Run Code Online (Sandbox Code Playgroud)
项目文件:
project-a
并project-b
具有相同的目录.
网址:
project-a
:aaa.xxxxxx.com
project-b
:bbb.xxxxxx.com
项目文件夹 ::
project-a
〜/ docker/www/project
project-b
-a:〜/ docker/www/project-b
1,应working_dir
是/usr/share/nginx/html/project-name
或/usr/share/nginx/html
在docker-compose.yml
文件?
2,如果working_dir
是/usr/share/nginx/html
,我想docker-compose.yml
文件具有相同的内容project-a
和project-b
吧?有没有任何其他项目进行修改?
3,如何将compose文件合并为一个?
docker-compose.yml
version: '2'
services:
nginx:
container_name: nginx
image: nginx
php:
container_name: php
image: fpm
mariadb:
container_name: mariadb
image: mariadb
redis:
container_name: redis
image: redis
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
和project-b除项目名称外是相同的.version: '2'
services:
nginx:
external_links:
- project-common:nginx
ports:
- 80:80
- 443:443
links:
- php
env_file:
- ./.env
working_dir: /usr/share/nginx/html/project-a
volumes:
- ~/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
- ~/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ~/docker/www/project-a:/usr/share/nginx/html/project-a
php:
external_links:
- project-common:php
links:
- mariadb
- redis
env_file:
- ./.env
volumes:
- ~/docker/www:/usr/share/nginx/html/project-a
mariadb:
external_links:
- project-common:mariadb
env_file:
- ./.env
volumes:
- ~/opt/data/mysql:/var/lib/mysql
redis:
external_links:
- project-common:redis
Run Code Online (Sandbox Code Playgroud)
您不需要在不同的容器中运行 nginx 和 php-fpm。(如果您的项目共享相同的 php 版本)
您将 fpm 作为服务运行,并在同一个容器中以守护进程模式关闭运行 nginx。
然后你进入 nginx 配置并设置多个子域。
然后根据您的子域设置设置数据卷/共享文件夹。
因此,您有一个服务多个项目的 nginx/fpm 实例,以及一些其他数据库/服务容器