Как настроить mysql в Docker?

Начинаю изучения докера, но многое непонятно, как это бывает в начале пути.
Чтобы я правильно понимал докер=)

1. Правильно ли я понимю: у меня есть машина с Ubuntu и вместо того, чтобы на ней разворачивать mysql я могу запустить контейнер с mysql ? Как мне тогда использовать уже существующую базу, чтобы каждый раз при старте контейнера не создавать загружать дамп, а чтобы все контейнеры уже работали с одной базой, одним и теми же пользователями и такдалее ?

2. В примерах куча варианто как это сделать, но пока ни один не завелся. Dockerfile или yaml файл ? Что в итоге испрльзовать?

3. Например я разрабатываю 3 проекта, все под разным окружением. Каждый проект использует Apache, Mysql, PHP. Каждый проект я засуну в свой контейнер со своим набором софта. Правильно ли я понимаю, что я могу запустить на хост машине только nginx и например проксировать все к разным контейнерам.

4. Сами исходники проектов где хранятся? В контейнере или же на реальном жестком диске и контейнер просто смотрит в нужную директорию и оттуда выполняет скрипты? ( например /var/www/site1.com; /var/www/site2.com/ и так далее).

Спасибо!
  • Вопрос задан
  • 16055 просмотров
Решения вопроса 1
kumaxim
@kumaxim
Web-программист
Начинаешь разрабатывать проект #1, создаешь под него каталог с двумя вложенными подкаталогами src и db
Ты уже установить docker-compose? Если нет, то сделать этого. Мой docker-compose.yml:
version: '3.1'

services:
  db:
    image: mariadb:10.2
    restart: on-failure
    ports:
      - "3306:3306"
    volumes:
      - ./db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: your_root_pass_here
      MYSQL_DATABASE: db_name_here
      MYSQL_USER: db_user_here
      MYSQL_PASSWORD: user_pass_here
  nginx:
    image: nginx
    restart: on-failure
    ports:
      - "80:80"
    links:
      - wordpress:php-fpm-server
    depends_on:
      - wordpress
    volumes:
      - $HOME/DDK/nginx-default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./development/src:/var/www/html:ro
  wordpress:
    image: php:5.6-fpm
    restart: on-failure
    links:
      - db:mysql
    depends_on:
      - db
    expose:
      - "9000"
      - "9900"
    volumes:
      - /mnt/bindfs/fire-cacher-dv1:/var/www/html


Далее у тебя встанет проблема, файлы на твоей хостовой машине будут создаваться от пользователя www-data. Единственный вменяемый способ пофиксить это без сильных танцев с бубном - bindfs. Я использую следующую строку в fstab для монтирования:
/home/user/Project/fire-cache/development/src	/mnt/bindfs/fire-cacher-dv1	fuse.bindfs	force-user=www-data,force-group=www-data,create-for-user=user,create-for-group=user,perms=0000:u+rwD:g+rD:o+rD	0	0


Все создал? ОК, запускай docker-compose up -d и останавливай после окончания работы docker-compose stop. Проект закончен? Значит docker-compose down -v

Вот это ты повторяешь каждый раз при старте нового проекта. Если есть еще какие-то вопросы по существу - пиши в комменты.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@matperez
1. Почитайте раздел "Where to Store Data" в документации по контейнеру. Если вы хотите использовать общую базу, то каталог с ней нужно монтировать в контейнер. Как это сделать в документации написано.

2. Dockerfile - это рецепт подготовки контейнера, yaml - это наверное от docker-compose (утилита, нужная для запуска нескольких связанных между собой контейнеров)

3. Правильно.

4. Папку с исходниками можно подмонтировать с вашей машины, либо скопировать в контейнер в момент его подготовки.

Имхо, если у вас таки машина на Ubuntu и PHP, Mysql, Apache, Nignx гораздо проще и быстрее это все настроить прямо на самой машине.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы