Михаил Боднарчук "Docker для PHP разработчиков"

44
Docker для PHP разработчиков Михаил Боднарчук Codegyre Twitter: @davert GitHub: DavertMik Skype: davert.ua WWW: http://codeception.com

Transcript of Михаил Боднарчук "Docker для PHP разработчиков"

Page 1: Михаил Боднарчук "Docker для PHP разработчиков"

Docker для PHP разработчиков

Михаил БоднарчукCodegyre

Twitter: @davertGitHub: DavertMikSkype: davert.uaWWW: http://codeception.com

Page 2: Михаил Боднарчук "Docker для PHP разработчиков"

Михаил Боднарчук✘ Веб-разработчик,

✘ Разрабатываю фреймворк для тестирования

Codeception, task-runner Robo и другие open-

source проекты.

✘ Люблю путешествовать.

✘ Изучаю NodeJS

Page 3: Михаил Боднарчук "Docker для PHP разработчиков"

Немного историиЖизнь и становление веб-разработчика

Page 4: Михаил Боднарчук "Docker для PHP разработчиков"
Page 5: Михаил Боднарчук "Docker для PHP разработчиков"
Page 6: Михаил Боднарчук "Docker для PHP разработчиков"
Page 7: Михаил Боднарчук "Docker для PHP разработчиков"
Page 8: Михаил Боднарчук "Docker для PHP разработчиков"
Page 9: Михаил Боднарчук "Docker для PHP разработчиков"
Page 10: Михаил Боднарчук "Docker для PHP разработчиков"
Page 11: Михаил Боднарчук "Docker для PHP разработчиков"
Page 12: Михаил Боднарчук "Docker для PHP разработчиков"

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 разработчиков"

DockerОткрытая платформа для разработки, доставки и

эксплуатации приложений.

Page 14: Михаил Боднарчук "Docker для PHP разработчиков"

Для чего использовать Docker?

✘Создание среды для разработки

✘Сложная настройка сервисов

✘Легкая установка приложений

✘Доставка и развертывание приложений

✘Создание среды для тестирования

✘Парелелизация тестирования

✘Разработка микросервисов

✘….

Page 15: Михаил Боднарчук "Docker для PHP разработчиков"

Что такое Docker

✘Модное слово в веб-разработке

✘Система контейнеризации в Linux

✘ООП-дизайн вашей инфраструктуры

✘GitHub-like среда

Page 16: Михаил Боднарчук "Docker для PHP разработчиков"

Структура Docker

Page 17: Михаил Боднарчук "Docker для PHP разработчиков"

Что такое контейнер

✘«Дешевая» виртуализация

✘Изолированная файловая система

✘Изолированные процессы

Page 18: Михаил Боднарчук "Docker для PHP разработчиков"

Структура контейнеров

Page 19: Михаил Боднарчук "Docker для PHP разработчиков"
Page 20: Михаил Боднарчук "Docker для PHP разработчиков"
Page 21: Михаил Боднарчук "Docker для PHP разработчиков"

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 разработчиков"

Создание контейнера

docker build –t monga .

docker run –v $PWD/data:/data/db –p 27017:27017 monga

Page 23: Михаил Боднарчук "Docker для PHP разработчиков"

Один контейнер = один сервисСтарайтесь разделять приложение

между контейнерами

Page 24: Михаил Боднарчук "Docker для PHP разработчиков"

Запуск 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 разработчиков"

Запуск 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 разработчиков"

Создайние рабочего окружения

✘Скачиваем нужные образы с Docker Registry

✘Связываем контейнеры через docker-compose

✘Подключаем папку с кодом

✘Запускаем docker-compose up

✘Делимся конфигурацией с коллегами

Page 27: Михаил Боднарчук "Docker для PHP разработчиков"

DeploymentCopy-Paste на сервер

Page 28: Михаил Боднарчук "Docker для PHP разработчиков"

По-простому

✘ Устанавливаем на сервере Docker✘ Заворачиваем наше приложение вконтейнеры

✘ Заливаем на Docker Hub (docker push)✘ Настраиваем docker-compose.yml✘ Запускаем контейнеры: (docker-

compose up)

Page 29: Михаил Боднарчук "Docker для PHP разработчиков"

Используем Shipyard

✘ Система управления Docker ресурсами

✘ Поставляется в виде Docker контейнера

✘ Предоставляет REST API, WEB UI✘ Позволяет легко деплоитьконтейнеры на разные ноды

✘ Позволяет мониторить контейнерыи смотреть логи

Page 30: Михаил Боднарчук "Docker для PHP разработчиков"

Shipyard: Список контейнеров

Page 31: Михаил Боднарчук "Docker для PHP разработчиков"

Shipyard: Контейнер

Page 32: Михаил Боднарчук "Docker для PHP разработчиков"

Continuous IntegrationВсе на Докер!

Page 33: Михаил Боднарчук "Docker для PHP разработчиков"

Docker на CI

✘ Воспроизводит production среду

✘ Изолирует процессы

✘ Откатывает изменения

✘ Используется наверное всеми SaaS CI

(в том числе Travis CI)

Page 34: Михаил Боднарчук "Docker для PHP разработчиков"

Параллельный запуск тестов на Jenkins

✘ Пакуем приложение в контейнер.

✘ Устанавливаем Matrix Project Plugin

✘ Одновременно запускаем тесты в

контейнере с разными параметрами

Page 35: Михаил Боднарчук "Docker для PHP разработчиков"

Параллельный запуск тестов на Jenkins

docker run -i -t -v $WORKSPACE:/project test_container ./runtests.sh $SUITE

Page 36: Михаил Боднарчук "Docker для PHP разработчиков"

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 разработчиков"

Ожидаемый результат

Page 38: Михаил Боднарчук "Docker для PHP разработчиков"

МикросервисыНаверное, просто невозможны без Docker!

Page 39: Михаил Боднарчук "Docker для PHP разработчиков"

Нужны ли вам микросервисы?

Page 40: Михаил Боднарчук "Docker для PHP разработчиков"

РезюмируемКонтейнеры! Контейнеры! Контейнеры

Page 41: Михаил Боднарчук "Docker для PHP разработчиков"

Почему мы не используем Docker

✘ Впервые про него услышали

✘ Он только для Linux

✘ Новая технология – значит нестабильна

✘ Боязнь Vendor Lock-In

✘ Наше приложение монолитно

Page 42: Михаил Боднарчук "Docker для PHP разработчиков"

Docker позволяет запаковатьприложение (или данные) вконтейнер, залить на любой

сервер где есть Docker имгновенно запустить его.

Page 43: Михаил Боднарчук "Docker для PHP разработчиков"
Page 44: Михаил Боднарчук "Docker для PHP разработчиков"

Спасибо!

Михаил Боднарчук@davert

http://docker.comhttp://shipyard-project.com