Локальная разработка Drupal сайтов с использованием Docker

Опубликовано admin - пн, 06/27/2016 - 11:28

Docker очень популярная тема, давно интересуюсь контейнеризацией, и всё чаще в последнее время использую для своих проектов, а также для проектов в drupal-coder.ru.

Подробнее про саму технологию можно почитать тут:
https://docs.docker.com/engine/understanding-docker/
https://habrahabr.ru/company/infobox/blog/237405/
https://habrahabr.ru/post/253877/

Сегодня я хочу рассказать как можно использовать Docker для локальной разработки Drupal сайтов. Инструкция приведена для ubuntu 16.04 LTS.

Условия задачи:
1) Быстро запускать требуемую среду для Drupal 7/8 проектов
2) Папки с файлами сайтов не должны быть привязаны к контейнеру, должны пробрасываться в контейнер, чтобы была возможность локально редактировать.
3) Возможность подключиться по ssh в контейнер
4) Базы mysql также не должны быть привязаны к контейнеру, папка с данными mysql пробрасывается в контейнер, данные будут сохраняться вне зависимости от наличия контейнера.

Установка Docker

Подробная инструкия по установке на официальном сайте

Пошаговая инструкция на русском:

  1. Обновление информации о пакетах и проверяем что APT готов работать по HTTPS:
     
    $ sudo apt-get update
    $ sudo apt-get install apt-transport-https ca-certificates
    
  2. Добавляем новый GPG ключ:
    sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  3. В файл /etc/apt/sources.list.d/docker.list добавляем строку:
    deb https://apt.dockerproject.org/repo ubuntu-xenial main
  4. Обновляем информацию о пакетах, устанавливаем docker и запускаем демон:
    $ sudo apt-get update
    $ sudo apt-get install docker-engine
    $ sudo service docker start
  5. Проверяем что docker установлен корректно:
    $ sudo docker run hello-world
  6. Добавляем текущего пользователя в группу docker, чтобы была возможно запуска без sudo:
    sudo usermod -aG docker $(whoami)
    

Запуск контейнера

Создадим под локальным пользователем папку projects в которой будут содержаться наши проекты и папку проекта drupal-admin.ru:

mkdir -p ~/projects/drupal-admin.ru

В качестве образа docker мне понравился https://hub.docker.com/r/wadmiraal/drupal/ его и будем использоваться для запуска.

docker run -d -p 8080:80 -p 30022:22 -p 3306:3306 -v ~/projects/drupal-admin.ru:/var/www -v mysql-data:/var/lib/mysql  --name testsite -t wadmiraal/drupal

В этой команде мы примонтировали папку проекта в /var/www и создали data volume для хранения баз mysql.

По поводу именования образов:

  • для Drupal 8 можно использовать образ wadmiraal/drupal:8
  • для Drupal 7 можно использовать образ wadmiraal/drupal:7

 

Работа с Drupal сайтом в контейнере docker

Подключение по ssh к docker контейнеру (пользователь: root, пароль: root, порт: 30022):

ssh root@127.0.0.1 -p 30022

К mysql можно подключаться из консоли ssh командой:

mysql

Просмотреть сайт из браузера можно по адресу: http://127.0.0.1:8080

Просмотреть список запущенных контейнеров:

docker ps

 

Остановить запущенный контейнер:

docker kill [id контейнера]

 

Используем Docker-compose для быстрого старта

Docker-compose удобная утилита для работы с контейнерами, позволяющая быстро стартовать и останавливать контейнеры. Установка docker-compose:

$ curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

Подготавливаем файл конфигурации ~/projects/compose/docker-compose.yml:

version: '2'
services:
  drupal_admin:
    image: wadmiraal/drupal:8
    volumes:
      - mysql-data:/var/lib/mysql
      - /home/testuser/projects/drupal-admin.ru/:/var/www
    ports:
      - "8080:80"
      - "30022:22"
      - "3306:3306"
    restart: always

volumes:
  mysql-data:
    external: true

Это yml файл, в котором можно хранить информацию о всех сайтах и их окружениях, которые необходимо запускать в контейнерах.

Запуск контейнера:

docker-compose up -d drupal_admin

 

Остановка контейнера:

docker-compose stop drupal_admin

 

Таким образом c использование docker-compose можно существенно упростить управление контейнерами, а в docker-compose.yml хранить информацию о всех своих Drupal сайтах в разработке.

Теги

Вот бы еще про докер под Винду... никак не займусь мазохизмом, пересаживаясь на *nix, ubuntu и всякие няшки. Почему-то консоль всегда вызывает уныние, а без линухов толком не запустишь ни драш, ни друпалконсоль. Есть vagrant, но xdebug плохо из под винды с phpstorm дружит, наверно потому что не умею готовить(((( приходится извращаться

А если контейнер остановлен или уничтожен - изменения тоже пропадут? Как вообще с этим работать чтобы всё сохранялось, или оно не пропадает?

Добавить комментарий

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.
  • Web page addresses and email addresses turn into links automatically.