Я использую Docker compose для запуска среды nginx+php+mysql
, OS - centos 7.2, вопрос касается множественного субсайта на одном хосте:
Например:
На этом хосте будет работать один хост, два проекта,
с именем project-a
и project-b
,
два разных docker-compose.yml
exsist в проекте-a и project-b.
Вопрос:
При выполнении docker-compose up
в project-a и project-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
.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
Файлы проекта: project-a
и project-b
имеют один и тот же каталог.
URLs: project-a
: aaa.xxxxxx.com project-b
: bbb.xxxxxx.com
Папки проекта: project-a
: ~/грузчик/WWW/проект-а project-b
: ~/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, Как объединить файл компоновки в один?
add2:
project-common: 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
project-a: 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