Интернет вещей: программа Intel Developer Zone для разработчиков
Михаил Боднарчук "Docker для PHP разработчиков"
-
Upload
fwdays -
Category
Technology
-
view
3.075 -
download
6
Transcript of Михаил Боднарчук "Docker для PHP разработчиков"
Docker для PHP разработчиков
Михаил БоднарчукCodegyre
Twitter: @davertGitHub: DavertMikSkype: davert.uaWWW: http://codeception.com
Михаил Боднарчук✘ Веб-разработчик,
✘ Разрабатываю фреймворк для тестирования
Codeception, task-runner Robo и другие open-
source проекты.
✘ Люблю путешествовать.
✘ Изучаю NodeJS
Немного историиЖизнь и становление веб-разработчика
Symfony Zend Framework Vagrant
Composer JQuery Nginx
MongoDB Capistrano Yii
Redis ElasticSearch WebSockets
Chef Puppet Ansible
OAuth REST SOAP
HTML5 CSS Linux
PHPUnit GIT Docker
DockerОткрытая платформа для разработки, доставки и
эксплуатации приложений.
Для чего использовать Docker?
✘Создание среды для разработки
✘Сложная настройка сервисов
✘Легкая установка приложений
✘Доставка и развертывание приложений
✘Создание среды для тестирования
✘Парелелизация тестирования
✘Разработка микросервисов
✘….
Что такое Docker
✘Модное слово в веб-разработке
✘Система контейнеризации в Linux
✘ООП-дизайн вашей инфраструктуры
✘GitHub-like среда
Структура Docker
Что такое контейнер
✘«Дешевая» виртуализация
✘Изолированная файловая система
✘Изолированные процессы
Структура контейнеров
Dockerfile: Создание ImageFROM fedora:20
RUN yum install -y mongodb-server && yum clean all
RUN mkdir -p /var/lib/mongodb && \touch /var/lib/mongodb/.keep && \chown -R mongodb:mongodb /var/lib/mongodb
ADD mongodb.conf /etc/mongodb.conf
VOLUME [ "/data/db" ]
EXPOSE 27017
USER mongodbWORKDIR /var/lib/mongodbCMD mongod
Создание контейнера
docker build –t monga .
docker run –v $PWD/data:/data/db –p 27017:27017 monga
Один контейнер = один сервисСтарайтесь разделять приложение
между контейнерами
Запуск WordPressdocker pull wordpressdocker pull mysql
docker run --name wp-mysqlMYSQL_ROOT_PASSWORD=123456 -d mysql
docker run --name my-wordpress --link wp-mysql:mysql -p 8080:80 -d wordpress
Запуск WordPress через Docker Composedocker-compose.yml:
wordpress:image: wordpress
links: - db:mysql
ports: - 8080:80
db: image: mysqlenvironment: MYSQL_ROOT_PASSWORD: 123456
docker-compose up
Создайние рабочего окружения
✘Скачиваем нужные образы с Docker Registry
✘Связываем контейнеры через docker-compose
✘Подключаем папку с кодом
✘Запускаем docker-compose up
✘Делимся конфигурацией с коллегами
DeploymentCopy-Paste на сервер
По-простому
✘ Устанавливаем на сервере Docker✘ Заворачиваем наше приложение вконтейнеры
✘ Заливаем на Docker Hub (docker push)✘ Настраиваем docker-compose.yml✘ Запускаем контейнеры: (docker-
compose up)
Используем Shipyard
✘ Система управления Docker ресурсами
✘ Поставляется в виде Docker контейнера
✘ Предоставляет REST API, WEB UI✘ Позволяет легко деплоитьконтейнеры на разные ноды
✘ Позволяет мониторить контейнерыи смотреть логи
Shipyard: Список контейнеров
Shipyard: Контейнер
Continuous IntegrationВсе на Докер!
Docker на CI
✘ Воспроизводит production среду
✘ Изолирует процессы
✘ Откатывает изменения
✘ Используется наверное всеми SaaS CI
(в том числе Travis CI)
Параллельный запуск тестов на Jenkins
✘ Пакуем приложение в контейнер.
✘ Устанавливаем Matrix Project Plugin
✘ Одновременно запускаем тесты в
контейнере с разными параметрами
Параллельный запуск тестов на Jenkins
docker run -i -t -v $WORKSPACE:/project test_container ./runtests.sh $SUITE
Runtests.sh
#!/bin/sh
echo "Starting Services...."
service elasticsearch start > /dev/null 2>&1
service nginx start > /dev/null 2>&1
service php5-fpm start > /dev/null 2>&1
service mysql start > /dev/null 2>&1
service memcached start > /dev/null 2>&1
phantomjs --webdriver=4444 > /dev/null 2>&1 &
mailcatcher -f > /dev/null 2>&1 &
echo "Running tests"
cd /project/$1 # switch to application
codecept run $2 # run tests from specific suite
Ожидаемый результат
МикросервисыНаверное, просто невозможны без Docker!
Нужны ли вам микросервисы?
РезюмируемКонтейнеры! Контейнеры! Контейнеры
Почему мы не используем Docker
✘ Впервые про него услышали
✘ Он только для Linux
✘ Новая технология – значит нестабильна
✘ Боязнь Vendor Lock-In
✘ Наше приложение монолитно
Docker позволяет запаковатьприложение (или данные) вконтейнер, залить на любой
сервер где есть Docker имгновенно запустить его.
Спасибо!
Михаил Боднарчук@davert
http://docker.comhttp://shipyard-project.com