![Page 1: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/1.jpg)
Docker для PHP разработчиков
Михаил БоднарчукCodegyre
Twitter: @davertGitHub: DavertMikSkype: davert.uaWWW: http://codeception.com
![Page 2: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/2.jpg)
Михаил Боднарчук✘ Веб-разработчик,
✘ Разрабатываю фреймворк для тестирования
Codeception, task-runner Robo и другие open-
source проекты.
✘ Люблю путешествовать.
✘ Изучаю NodeJS
![Page 3: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/3.jpg)
Немного историиЖизнь и становление веб-разработчика
![Page 4: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/4.jpg)
![Page 5: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/5.jpg)
![Page 6: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/6.jpg)
![Page 7: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/7.jpg)
![Page 8: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/8.jpg)
![Page 9: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/9.jpg)
![Page 10: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/10.jpg)
![Page 11: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/11.jpg)
![Page 12: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/12.jpg)
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
![Page 13: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/13.jpg)
DockerОткрытая платформа для разработки, доставки и
эксплуатации приложений.
![Page 14: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/14.jpg)
Для чего использовать Docker?
✘Создание среды для разработки
✘Сложная настройка сервисов
✘Легкая установка приложений
✘Доставка и развертывание приложений
✘Создание среды для тестирования
✘Парелелизация тестирования
✘Разработка микросервисов
✘….
![Page 15: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/15.jpg)
Что такое Docker
✘Модное слово в веб-разработке
✘Система контейнеризации в Linux
✘ООП-дизайн вашей инфраструктуры
✘GitHub-like среда
![Page 16: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/16.jpg)
Структура Docker
![Page 17: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/17.jpg)
Что такое контейнер
✘«Дешевая» виртуализация
✘Изолированная файловая система
✘Изолированные процессы
![Page 18: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/18.jpg)
Структура контейнеров
![Page 19: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/19.jpg)
![Page 20: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/20.jpg)
![Page 21: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/21.jpg)
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
![Page 22: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/22.jpg)
Создание контейнера
docker build –t monga .
docker run –v $PWD/data:/data/db –p 27017:27017 monga
![Page 23: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/23.jpg)
Один контейнер = один сервисСтарайтесь разделять приложение
между контейнерами
![Page 24: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/24.jpg)
Запуск 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
![Page 25: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/25.jpg)
Запуск WordPress через Docker Composedocker-compose.yml:
wordpress:image: wordpress
links: - db:mysql
ports: - 8080:80
db: image: mysqlenvironment: MYSQL_ROOT_PASSWORD: 123456
docker-compose up
![Page 26: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/26.jpg)
Создайние рабочего окружения
✘Скачиваем нужные образы с Docker Registry
✘Связываем контейнеры через docker-compose
✘Подключаем папку с кодом
✘Запускаем docker-compose up
✘Делимся конфигурацией с коллегами
![Page 27: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/27.jpg)
DeploymentCopy-Paste на сервер
![Page 28: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/28.jpg)
По-простому
✘ Устанавливаем на сервере Docker✘ Заворачиваем наше приложение вконтейнеры
✘ Заливаем на Docker Hub (docker push)✘ Настраиваем docker-compose.yml✘ Запускаем контейнеры: (docker-
compose up)
![Page 29: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/29.jpg)
Используем Shipyard
✘ Система управления Docker ресурсами
✘ Поставляется в виде Docker контейнера
✘ Предоставляет REST API, WEB UI✘ Позволяет легко деплоитьконтейнеры на разные ноды
✘ Позволяет мониторить контейнерыи смотреть логи
![Page 30: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/30.jpg)
Shipyard: Список контейнеров
![Page 31: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/31.jpg)
Shipyard: Контейнер
![Page 32: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/32.jpg)
Continuous IntegrationВсе на Докер!
![Page 33: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/33.jpg)
Docker на CI
✘ Воспроизводит production среду
✘ Изолирует процессы
✘ Откатывает изменения
✘ Используется наверное всеми SaaS CI
(в том числе Travis CI)
![Page 34: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/34.jpg)
Параллельный запуск тестов на Jenkins
✘ Пакуем приложение в контейнер.
✘ Устанавливаем Matrix Project Plugin
✘ Одновременно запускаем тесты в
контейнере с разными параметрами
![Page 35: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/35.jpg)
Параллельный запуск тестов на Jenkins
docker run -i -t -v $WORKSPACE:/project test_container ./runtests.sh $SUITE
![Page 36: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/36.jpg)
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
![Page 37: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/37.jpg)
Ожидаемый результат
![Page 38: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/38.jpg)
МикросервисыНаверное, просто невозможны без Docker!
![Page 39: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/39.jpg)
Нужны ли вам микросервисы?
![Page 40: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/40.jpg)
РезюмируемКонтейнеры! Контейнеры! Контейнеры
![Page 41: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/41.jpg)
Почему мы не используем Docker
✘ Впервые про него услышали
✘ Он только для Linux
✘ Новая технология – значит нестабильна
✘ Боязнь Vendor Lock-In
✘ Наше приложение монолитно
![Page 42: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/42.jpg)
Docker позволяет запаковатьприложение (или данные) вконтейнер, залить на любой
сервер где есть Docker имгновенно запустить его.
![Page 43: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/43.jpg)
![Page 44: Михаил Боднарчук "Docker для PHP разработчиков"](https://reader030.vdocuments.site/reader030/viewer/2022013117/58a6b31c1a28ab661f8b4881/html5/thumbnails/44.jpg)
Спасибо!
Михаил Боднарчук@davert
http://docker.comhttp://shipyard-project.com