Я оцениваю Docker как отход от Бродяги. Наша ситуация такова, что мы управляем примерно 20 микросайтами LAMP (WordPress) и нуждаемся в возможности одновременного запуска нескольких сайтов на наших локальных компьютерах.
Я смотрел на Docker Создать, но не могу понять, как разрешить запускать каждый из наших сайтов одновременно без конфликтующих портов. Каждый сайт представляет собой простое приложение Apache / MySQL / PHP. Существует ли конфигурация, методика или стратегия, позволяющая одновременно запускать несколько сайтов X на одном локальном хосте? Или, поскольку стек одинаков для каждого сайта, стоит ли мне использовать одну конфигурацию для управления ими всеми?
Мы будем использовать это только для локальной разработки, пока не готовы к развертыванию контейнеров в dev / prod или чем-то в этом роде - просто устаём от ресурсов и места в vagrant.
Ниже, где вещи сейчас. Я предположил бы, что каждый docker-compose.yml
был бы почти идентичен для каждого из наших сайтов. Как запустить многие из них одновременно?
version: '3'
services:
wp:
image: wordpress:latest # https://hub.docker.com/_/wordpress/
ports:
- 127.0.0.1:80:80 # change ip if required
volumes:
- ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
- ./wp-app:/var/www/html # Full wordpress project
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: "${DB_NAME}"
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: "${DB_ROOT_PASSWORD}"
depends_on:
- db
links:
- db
wpcli:
image: wordpress:cli
volumes:
- ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
- ./wp-app:/var/www/html
depends_on:
- db
- wp
pma:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
PMA_PORT: 3306
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
ports:
- 127.0.0.1:8080:80
links:
- db:db
db:
image: mysql:latest # https://hub.docker.com/_/mysql/ - or mariadb https://hub.docker.com/_/mariadb
ports:
- 127.0.0.1:3306:3306 # change ip if required
command: [
'--default_authentication_plugin=mysql_native_password',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
volumes:
- ./wp-data:/docker-entrypoint-initdb.d
- db_data:/var/lib/mysql
environment:
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
volumes:
db_data: