У меня есть установщик Docker, обслуживающий два блога WordPress с прокси и использующий следующую структуру и файл docker-compose:
.
├── nginx-proxy
│ └── docker-compose.yml
└── blogs
└── docker-compose.yml
docker-compose.yml
version: "3"
services:
db:
container_name: ${CONTAINER_DB_NAME}
image: mariadb:latest
restart: unless-stopped
volumes:
- ${DB_PATH}:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
wordpress1:
depends_on:
- db
container_name: ${CONTAINER_WP_NAME1}
image: wordpress:latest
restart: unless-stopped
volumes:
- ${WP_CORE}:/var/www/html
- ${WP_CONTENT}:/var/www/html/wp-content
- ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
environment:
WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME1}:3306
WORDPRESS_DB_NAME: ${MYSQL_DATABASE1}
WORDPRESS_DB_USER: ${MYSQL_USER1}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD1}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX1}
VIRTUAL_HOST: ${DOMAINS1}
LETSENCRYPT_HOST: ${DOMAINS1}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL1}
logging:
options:
max-size: ${LOGGING_OPTIONS_MAX_SIZE1:-200k}
wordpress2:
depends_on:
- db
container_name: ${CONTAINER_WP_NAME2}
image: wordpress:latest
restart: unless-stopped
volumes:
- ${WP_CORE}:/var/www/html
- ${WP_CONTENT}:/var/www/html/wp-content
- ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
environment:
WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME2}:3306
WORDPRESS_DB_NAME: ${MYSQL_DATABASE2}
WORDPRESS_DB_USER: ${MYSQL_USER2}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD2}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX2}
VIRTUAL_HOST: ${DOMAINS2}
LETSENCRYPT_HOST: ${DOMAINS2}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL2}
logging:
options:
max-size: ${LOGGING_OPTIONS_MAX_SIZE2:-200k}
networks:
default:
external:
name: ${NETWORK}
Но я бы хотел сделать его более ремонтопригодным. Я хочу реорганизовать это, чтобы создать отдельный контейнер для базы данных mysql, изменить рефакторинг каждой конфигурации блога в свой собственный файл docker-compose и ссылаться на базу данных в каждой конфигурации блога, например:
.
├── db
│ └── docker-compose.yml
├── blog1
│ └── docker-compose.yml
├── blog2
│ └── docker-compose.yml
└── blog3
└── docker-compose.yml
dbконтейнер
version: "3"
services:
db:
container_name: ${CONTAINER_DB_NAME}
image: mariadb:latest
restart: unless-stopped
volumes:
- ${DB_PATH}:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
default:
external:
name: ${NETWORK}
блог1 контейнер
version: "3"
services:
wordpress1:
depends_on:
- db // Does Docker knows this is db service I created outside it?
container_name: ${CONTAINER_WP_NAME1}
image: wordpress:latest
restart: unless-stopped
volumes:
- ${WP_CORE}:/var/www/html
- ${WP_CONTENT}:/var/www/html/wp-content
- ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
environment:
WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME1}:3306
WORDPRESS_DB_NAME: ${MYSQL_DATABASE1}
WORDPRESS_DB_USER: ${MYSQL_USER1}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD1}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX1}
VIRTUAL_HOST: ${DOMAINS1}
LETSENCRYPT_HOST: ${DOMAINS1}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL1}
logging:
options:
max-size: ${LOGGING_OPTIONS_MAX_SIZE1:-200k}
networks:
default:
external:
name: ${NETWORK}
... и т. д.
Я понятия не имею, как обрабатывать соединение БД. Сегодня я разместил ссылку на него в разделе «depen_on», поскольку конфигурация службы db находится в том же файле, что и блог. Но как мне вызвать экземпляр db, когда сайты объявлены в отдельных файлах? Знает ли Докер, что "db" - это служба db, объявленная извне этому файлу?
Любые идеи были бы великолепны!