Upload
taras-lyapun
View
351
Download
2
Embed Size (px)
DESCRIPTION
Docker for the Win! Презентация с конференции Km Code'n'Coffee #5 Ляпун Тарас
Citation preview
ABOUT ME• Компьютер с рождения
• Программирование с ~10 лет
• Работал в
• 42coffeecups.com
• prom.ua
• qbeats.com
• getgoing.com
• Сейчас фрилансер на oDesk
ПРОБЛЕМЫ• Соответствие development\staging\production среды (Vagrant?)
• Разворачивание новых серверов и новых сервисов (Ansible\Puppet\Chef ?)
• Deployment - обновление приложения (git? rsync? tar ball? deb package?).
• Изоляция сервисов друг от друга (Виртуализация? LXC?)
• Тестирование
VAGRANT
• Большой оверхед
• Длительное время запуска
• Как деплоить?
Создание и конфигурация легковесных, повторяемых и портируемых сред разработки.
В ИТОГЕ
• Ручная погрузка судна обходится в $5,86 за тонну до 1956.
• Используя контейнеры - $0.16 за тонну.
LXC• Lightweight Linux Container (Легковесный Linux контейнер).
• Первая версия в Linux 2.6.24
• Способ виртуализации на уровне операционной системы для запуска множества изолированных Linux систем
• Дает возможность запустить мини Linux внутри другого Linux’a
• Используется Heroku для их Dynos
LXC
• Основан на cgroups и namespace
• cgroups - фича линукса для ограничения, контроля и изолирования использования ресурсов (CPU, Memory, disk I/O, etc) без необходимости запуска виртуальной машины
• namespace - дает возможность полностью изолировать приложения от операционной системы, включая дерево процессов, сеть, пользователей, файловую систему и т.д.
MEET DOCKER
«Docker - это open-source движок для легкого создания легковесных, портируеммых, независимых контейнеров для любых приложений. Один и тот же контейнер который разработчик создал и протестировал на своем ноутбуке, может быть запущен в продакшене, на виртуальной машине, выделенном сервере, OpenStack кластере, облаке и т.п.»
- docker.io
DOCKER• Проект был создан Solomon Hykes, как внутренний проект компании dotCloud в 2013 году.
• Делает Linux Containers легкими в использовании добавляя инструменты и подходы.
• Написан на Go
• Уже есть 1.1 версия (100% production ready!)
• 546 Contributors, 1030 watchers, 14k stars, 2k5 forks (30.07.2014)
• Интеграция с чем угодно, кучу проектов на основе Docker’а
• Используется в Ebay, Yandex, Spotify, Uber, Rackspace, CloudFlare, Trueship и т.д.
DOCKER• Легкий, минимум оверхеда
• Быстрый
• Open Source
• Простой
• Позволяет деплоить что угодно и куда угодно
• легко
• надежно
• масштабируемо
DOCKER
• Docker состоит из демона сервера - который предоставляет REST API (не обязательно запущен локально)
• и из клиента, который работает с этим демоном и предоставляет CLI
• Docker registry - репозиторий
DOCKER IMAGE
• Read-only шаблон ваших контейнеров
• Используется для создания Docker containers.
• Может состоять например из Ubuntu + ваше приложение + supervisor
• Вы можете создавать новые images, редактировать , скачивать существующие и делиться своими
DOCKER CONTAINER• Запущенный экземпляр image
• Может быть создан, запущен, остановлен и удален
• Полностью изолированный от других процессов вашей OS
• Содержит все тоже самое что Image + read\write слой для работы приложения.
IMAGE VS CONTAINER
• Image указывает Docker’у что контейнер содержит, какие процессы запустить когда запускается контейнер, и всю необходимую конфигурационную информацию
• Когда Docker запускает container с image, он добавляет read-write слой поверх image, в котором ваше приложение может быть запущенно
DOCKER CLI• docker run - запускаем новый контейнер
• docker stop - останавливаем контейнер
• docker start - запускаем остановленный ранее контейнер
• docker rm - удаляем контейнер
• docker rmi - удаляем image
• docker inspect - информация о контейнере
• docker commit - создаем новый image из контейнера
• docker logs - смотрим stdout контейнера
• docker build - создаем image с Dockerfile
• docker ps - список запущенных контейнеров (docker ps -a - список всех контейнеров)
• docker pull - загружаем image с репозитория
• docker push - загружаем image в репозиторий
DOCKERFILEFROM ubuntu # наследуемся от другого image
RUN apt-get update # RUN - любая команда
RUN apt-get install -y python-dev python-distribute python-pip # устанавливем системные завимости
ADD ./requirements.txt /www/requirements.txt # копируем файл с зависимости нашего приложения
RUN pip install -r /www/requirements.txt # устанавливаем зависимости приложения
ADD ./app.py /www/app.py # копируем наше приложение
EXPOSE 5000 # Делаем порт доступным из вне
CMD python /www/app.py # Команда при запуске контейнера по умолчанию
RUN OPTIONS• -d - запуск в фоне (в виде демона)
• -e - устанавливаем переменные окружения
• -p - прокидываем порты
• -v - маунтим папки с нашей машины в контейнер
• -link - соединяем контейнеры между собой
• -volumes-from - маунтим папки одного контейнера в другой
• -m - устанавливаем лимит памяти
• -c - устанавливаем коэффициент CPU
DOCKER REGISTRY
• https://registry.hub.docker.com/
• https://github.com/docker/docker-registry
КАКИЕ ПРОБЛЕМЫ МЫ РЕШИЛИ?
• Соответствие development\staging\production среды
• Разворачивание новых серверов и новых сервисов
• Deployment - обновление приложения
• Изоляция сервисов друг от друга
• Тестирование
ПАТТЕРНЫ• Один процесс - один image
• init.d, upstart не работают. Запускаем не в демон режиме.
• Data only containers
• Создайте свой базовый image
• Используйте link
СОВЕТЫ• То что меняется чаще всего - ближе к концу Dockerfile (каждая строчка Dockerfile - это состояние которое кешируется)
• ENTRYPOINT VS CMD
• docker rm $(docker ps -a -q)
• docker rmi $(docker images -q)
• Легкие OS как основа вашего контейнера (например debian:jessie)
ПРОБЛЕМЫ• Нельзя указать определенный Dockerfile (решается симлинком или с помощью tarball)
• Нельзя применить шаблон (но можно делать вручную в ENTRYPOINT)
• Пока нет простого способа проапгрейдить работающий контейнер
• Все таки встречаются баги
ЧТО ДАЛЬШЕ?• Ansible (docker, docker_image modules).
• Maestro - Orchestration of Docker-based, multi-host environments.
• Shipyard - web UI for Docker.
• Deis - open source PAAS based on Docker. (like Heroku.com)
• Dokku - super small PAAS based on Docker. (like Heroku.com)
• Fig - Fast, isolated development environments using Docker.
• Flynn - PAAS from Dokku author.
• Orchard - PASS provider for Docker.
• CoreOS - OS заточенная под Docker.