Как использовать один и тот же MySQL и один и тот же PHPMyAdmin для нескольких контейнеров, таких как Joomla! а WordPress? - PullRequest
0 голосов
/ 07 марта 2020

Я новичок от ie до docker, и я хотел бы задать вопрос о том, как получить один Joomla! и один сайт WordPress с использованием того же MySQL и PHPMyAdmin. Я предполагаю, что это должно быть с сетью, но я не знаю, как.

ДЛЯ JOOMLA:

У меня есть это "./joomla/docker -compose.yml "файл:

version: '3'

services:

    mysql:
        image: mysql:8.0.1
        restart: always
        env_file: .env
        environment: 
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
        ports:
            - 3306:3306
        restart: always
        container_name: yt_test_mysql_joomla

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        depends_on:
            - mysql
        ports:
            - "9090:80"
        restart: always
        links:
            - mysql:db
        container_name: yt_test_phpmyadmin_joomla

    joomla:
        image: "joomla:${JOOMLA_VERSION:-5.2.1}-php${PHP_VERSION:-7.3}-apache"
        depends_on:
            - mysql
        ports:
            - "8082:80"
        restart: always
        environment: 
            JOOMLA_DB_HOST: mysql:3306
            JOOMLA_DB_USER: ${MYSQL_USER}
            JOOMLA_DB_PASSWORD: ${MYSQL_PASSWORD}
            JOOMLA_DB_NAME: ${MYSQL_DATABASE}
        container_name: yt_test_joomla
        volumes:
            - "./joomla_files/modules/mod_breadcrumbs:/var/www/html/modules/mod_breadcrumbs"

и это мой файл ./joomla/.env:

MYSQL_ROOT_PASSWORD=rootpass
MYSQL_USER=sqlusr
MYSQL_PASSWORD=123456
MYSQL_DATABASE=joomladb

JOOMLA_VERSION=3.9.15
PHP_VERSION=7.4

ДЛЯ WORDPRESS:

У меня есть этот файл "./wordpress/docker-compose.yml":

version: '3'

services:

    mysql:
        image: mysql:8.0.1
        restart: always
        env_file: .env
        environment: 
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
        ports:
            - 3307:3306
        restart: always
        container_name: yt_test_mysql_wp

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        depends_on:
            - mysql
        ports:
            - "9091:80"
        restart: always
        links:
            - mysql:db
        container_name: yt_test_phpmyadmin_wp

    wordpress:
        depends_on: 
            - mysql
        image: "wordpress:${WP_VERSION:-5.2.1}-php${PHP_VERSION:-7.3}-apache"
        container_name: yt_test_wp
        restart: always
        ports:
            - "8081:80"
        env_file: .env
        environment:
            WORDPRESS_DB_HOST: mysql:3306
            WORDPRESS_DB_USER: ${MYSQL_USER}
            WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
            WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
        volumes:
            - "./wordpress_files/wp-content/plugins/img-src-corrector:/var/www/html/wp-content/plugins/img-src-corrector"
            - "./wordpress_files/wp-content/plugins/login-as-user:/var/www/html/wp-content/plugins/login-as-user"

, и это мой файл ./wordpress/.env:

MYSQL_ROOT_PASSWORD=rootpass
MYSQL_USER=sqlusr
MYSQL_PASSWORD=123456
MYSQL_DATABASE=wordpressdb

WP_VERSION=5.3.2
PHP_VERSION=7.4

Если я запускаю команду docker-compose up -d, все работает правильно с указанными ниже URL.

Итак, мой вопрос:

  1. Является ли вышеуказанный правильный метод?

  2. Как можно иметь только один MySQL (один и тот же порт) и только один PHPMyAdmin (один и тот же порт) как для WordPress, так и для Joomla! вместо того, чтобы иметь разные порты для каждого отдельно (например, для PHPMyAdmin у меня есть два разных порта вместо одного)?

Есть предложения?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 марта 2020

Является ли вышеуказанный правильный метод? Это зависит от того, чего вы пытаетесь достичь. Если вы хотите разделить эти экземпляры и оставить данные разделенными, то да, это правильный путь. С другой стороны, если вы пытаетесь минимизировать усилия по управлению экземплярами MySQL, это не так.

Если вы хотите иметь один экземпляр MySQL, вам нужно позаботиться о создании пользователей и баз данных (вы не можете использовать переменные env, такие как «MYSQL_USER», более одного раза). Одним из способов управления пользователями и базами данных является создание bootstrap файлов, как показано ниже.

sql -скриптов. sql

# create databases
CREATE DATABASE IF NOT EXISTS `wordpressdb`;
CREATE DATABASE IF NOT EXISTS `joomladb`;

CREATE USER 'sqlusr'@'%' IDENTIFIED BY 'sqlusr_pass';
GRANT ALL PRIVILEGES ON *.* TO 'sqlusr'@'%';

Dockerfile

FROM mysql:8.0.1
COPY ./sql-scripts.sql /docker-entrypoint-initdb.d/

MySQL compose

version: '3.7'

services:

  mysql:
    image: mysqlx
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: dummy
      MYSQL_DATABASE: soso
      MYSQL_USER: soso
      MYSQL_PASSWORD: soso
    restart: always
    container_name: yt_test_mysql_joomla

на примере выше, контейнер MySQL будет иметь три базы данных (soso, wordpressdb, joomladb).

Обратите внимание, что если вы разбить службы на разные файлы, которые вам могут понадобиться для настройки сети на контейнерах, чтобы обеспечить связь между контейнерами

...