Депрокрастинируем docker: контейнеры здесь и сейчас

56
Депрокрастинируем Docker: контейнеры здесь и сейчас 29-ый Омский IT субботник, 06-06-2015 https://vk.com/omskit Денис Нелюбин @den_gelin Руслан Шарипов @sharipov_ru

Upload: ruslan-sharipov

Post on 11-Aug-2015

119 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Депрокрастинируем Docker: контейнеры здесь и сейчас

Депрокрастинируем Docker: контейнеры здесь и сейчас

29-ый Омский IT субботник, 06-06-2015https://vk.com/omskit

Денис Нелюбин@den_gelin

Руслан Шарипов@sharipov_ru

Page 2: Депрокрастинируем Docker: контейнеры здесь и сейчас

Что такое Docker?

Docker is an open platform for developers and sysadmins to build, ship, and run distributed

applications

Page 3: Депрокрастинируем Docker: контейнеры здесь и сейчас

Зачем?

- Собрал один раз - запустил идентичное окружение везде

- Иммутабельность: нет проблемы с уже установленным набором софта

- Изоляция рантайма- Выделение ресурсов

Page 4: Депрокрастинируем Docker: контейнеры здесь и сейчас

Отличия Docker от VMs

Page 5: Депрокрастинируем Docker: контейнеры здесь и сейчас

Отличия Docker от VMs

- Контейнеры запускаются в той же операционной системе,что и хост

- AuFS в качестве файловой системы- Ресурсы между хостом и контейнером расшарены- Быстрый запуск (секунды против минут для

полностью виртуализированной системы)- VM живёт вечно, контейнер - запускается и

удаляется

Page 6: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker architecture

Page 7: Депрокрастинируем Docker: контейнеры здесь и сейчас

Как работает Docker

- изоляция root fs- изоляция процессов- абстракция над сетью- cgroups- capabilities

Page 8: Депрокрастинируем Docker: контейнеры здесь и сейчас

План мастер класса

Упражнение 1Работаем с образами, контейнерами, registry

Упражнение 2Пишем Dockerfile, тестируем с RSpec и Serverspec

Упражнение 3Деплоим webapp + db, оркестрируем ансиблом, балансим контейнеры через haproxy

Page 9: Депрокрастинируем Docker: контейнеры здесь и сейчас

План мастер класса

Упражнение 1Работаем с образами, контейнерами, registry

Page 10: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image

Образ - неизменяемый слепок состояния файловой системы.

ubuntu:latest, postgresql:9.4, coreos/apache,vasya-pupkin/superimage:3.4

Page 11: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image: fs layers

Page 12: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image layers example

Page 13: Депрокрастинируем Docker: контейнеры здесь и сейчас

Base image, слои

Page 14: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image

> docker images

Page 15: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image: pull

> docker pull 192.168.200.100:5000/redis

Page 16: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image: pull

> docker pull 192.168.200.100:5000/redis:latest

Page 17: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image: pull

> docker pull 192.168.200.100:5000/redis:2.6.17

Page 18: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker images: просмотр слоёв

> docker images --tree

Page 19: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker images: “git log” для образов

> docker history redis

Page 20: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker images: “git log” для образов

> docker inspect redis

Page 21: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker images: “git log” для образов

> docker rmi IMAGE_ID

Page 22: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker image

Образы в публичных хабах могутсодержать небезопасные пакеты!

Page 23: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker container

Контейнер - linux процесс, запущенный на хосте с docker. Легковесный аналог виртуальных машин

Контейнеры запускаются из docker images (образов)

Page 24: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker container

Каждый контейнер имеет:

- файлововую систему- сеть- дерево процессов- выделенные ресурсы

Page 25: Депрокрастинируем Docker: контейнеры здесь и сейчас

Image -> container

IMAGE -> RUN -> CONTAINER

Page 26: Депрокрастинируем Docker: контейнеры здесь и сейчас

Image -> container

docker run -it ubuntu:14.04 /bin/bash

Page 27: Депрокрастинируем Docker: контейнеры здесь и сейчас

Image -> container

container:> ps aux

host:> ps aux

Page 28: Депрокрастинируем Docker: контейнеры здесь и сейчас

Image -> container

Контейнер жив то тех, пор, пока жив процесс с PID=1

container detach: Ctrl+P+Q

Page 29: Депрокрастинируем Docker: контейнеры здесь и сейчас

Image -> container

docker run -d ubuntu:latest /bin/bash -c “ping ya.ru”

Page 30: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker container

Page 31: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker commit

docker run -it 192.168.200.100:5000/ubuntu:14.04 /bin/bash

Page 32: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker commit

container> touch /tmp/hello_worldcontainer> exit

Page 33: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker commit

host> docker imageshost> docker commit IMAGE_ID name

Page 34: Депрокрастинируем Docker: контейнеры здесь и сейчас

Проброс портов

> docker run -d -p 6379:6379 192.168.200.100:5000/redis:latest

Page 35: Депрокрастинируем Docker: контейнеры здесь и сейчас

ENV vars

host> docker run -it -e MY_KEY=213323 192.168.200.100:5000/redis:latest bash

container>echo $MY_KEY

Page 36: Депрокрастинируем Docker: контейнеры здесь и сейчас

Containers: куда класть данные?

Верхний слой контейнера - Read+Write, но этот слой каждый раз новый и пустой

Page 37: Депрокрастинируем Docker: контейнеры здесь и сейчас

Containers: куда класть данные?

Для постоянных данных используютсяDocker volumes

Page 38: Депрокрастинируем Docker: контейнеры здесь и сейчас

Containers: куда класть данные?

Page 39: Депрокрастинируем Docker: контейнеры здесь и сейчас

Volumes: Demo

docker run -it -v /my-volume 192.168.200.100:5000/ubuntu:14.04 /bin/bash

Page 40: Депрокрастинируем Docker: контейнеры здесь и сейчас

Volumes: Demo

container> ls -l /container> cd /my-volume

Page 41: Депрокрастинируем Docker: контейнеры здесь и сейчас

Volumes: Demo

container> ls -l /container> cd /my-volumecontainer> echo hello-volume > \ /my-volume/new_filecontainer> exit

Page 42: Депрокрастинируем Docker: контейнеры здесь и сейчас

Volumes: Demo

host> docker inspect CONTAINER_ID

Page 43: Депрокрастинируем Docker: контейнеры здесь и сейчас

Volumes: Demo

host> docker inspect CONTAINER_ID

Page 44: Депрокрастинируем Docker: контейнеры здесь и сейчас

Volumes: Demo

--volumes-from=CONTAINER_ID

Page 45: Депрокрастинируем Docker: контейнеры здесь и сейчас

Volumes: Demo

Page 46: Депрокрастинируем Docker: контейнеры здесь и сейчас

Упражнение 1

Вопросы?

Page 47: Депрокрастинируем Docker: контейнеры здесь и сейчас

Docker

Пишем Dockerfile, тестируем с RSpec и Serverspec

Page 48: Депрокрастинируем Docker: контейнеры здесь и сейчас

Dockerfile

Dockerfile - текстовый файл со специальным синтаксисом и инструкциями, как собрать Docker-образ

Page 49: Депрокрастинируем Docker: контейнеры здесь и сейчас

Dockerfile: пример

FROM centos:centos6

RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmRUN yum install -y npmCOPY . /src

RUN cd /src; npm installEXPOSE 8080CMD ["node", "/src/index.js”]

Page 50: Депрокрастинируем Docker: контейнеры здесь и сейчас

Dockerfile: задача

Собираем Dockerfile для mongodbПишем тесты c RSpec + serverspec

Page 51: Депрокрастинируем Docker: контейнеры здесь и сейчас

Dockerfile: задача

touch Dockerfiledocker build -t docker-mongo .

Page 52: Депрокрастинируем Docker: контейнеры здесь и сейчас

Dockerfile: задача

docker run -d --name db docker-mongo

Page 53: Депрокрастинируем Docker: контейнеры здесь и сейчас

Тестирование Dockerfile

RSpec

Page 54: Депрокрастинируем Docker: контейнеры здесь и сейчас

Задача: haproxy, docker, ansible

● Конфиг nginx HAProxy с двумя upstreams

● Ansible для доставки контейнеров куда угодно

● Билд, запуск● Zero-downtime: как делать правильно?

https://bitbucket.org/gelin/docker-deploy-sample

Page 55: Депрокрастинируем Docker: контейнеры здесь и сейчас

Image -> container

Page 56: Депрокрастинируем Docker: контейнеры здесь и сейчас

Как ещё можно деплоиться?

Docker compose (fig) + Swarm + Docker Machine => not production readyGoogle Kubernetes http://kubernetes.io

Amazon Elastic BeanstalkPanamax http://panamax.io

CloudifyCloud66

CoreOS + fleet + etcdApache Mesos

NewRelic Centurion => not production readyAnsible/Chef/Puppet + Docker

...и десятки других сервисов...