Виртуализация
средствами
DOCKER

Что такое Docker?

КРОССВОРД ОТ ЮРИЯ ШЕВЧУКА
Docker

Docker is open platform for developers and sysadmins to build, ship and run distributed applications
Зачем?

Что дает нам Docker?
- easy deploy
- быстрая переносимость
- изоляция контейнеров
- выделение ресурсов
- собрал один раз - запустил везде (!)

Что внутри docker-a?

Docker architecture

Docker architecture
-
В основе лежит cgroups (в ядре Linux с версии 2.6.24)
-
механизм ограничения и изоляции выч. ресурсов для исп. гр. процессов
-
- Изоляция пространств имён (namespaces)
-
Файловая система AuFS
-
альтернатива UnionFS, но более быстрая и стабильная
-
-
LXC (Linux Containers)
-
система виртуализации на уровне OS.
аналог FreeBSD jail и Solaris Containers.
-
Образы Docker


Пример образов (images)


Отличия Docker от VMs

Отличия Docker от VMs
- Контейнеры запускаются в той-же OS, что и хост
- AuFS в качестве файловой системы
- Ресурсы между хостом и контейнером расшарены
- Быстрый запуск (секунды для контейнера против минут VM)
- VM живет вечно, контейнер - запускается и удаляется
Docker очень простой
Запустить Ubuntu и выполнить в ней echo
docker run ubuntu echo "hello from Ubuntu"
Запустить CentOS с башем и подключиться к его терминалу
docker run -ti CentOS /bin/bash
Очень-очень простой
Запустить nodejs-app контейнер в бэкграунде и разрешить доступ к нему по 80-му порту
docker run -p 80:80 -d nodejs-app
Как создать/сохранить образ
Взять готовый с репозитория и изменить
docker pull, docker commit
Собрать из Dockerfile на основе существующего
docker build
Создать новый с нуля
docker create, docker import
Сохранять и загружать
docker save image > /fdd/image.tar
docker load < /fdd/image.tar
Пример Dockerfile
FROM ubuntu:12.04
MAINTAINER Slava Konashkov <slava.konashkov@gmail.com>
RUN apt-get update && \
apt-get install -y apache2 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]Docker Hub
Почти как github, только для образов
- Бесплатные public репозитории + 1 private
- docker pull ubuntu
- docker push betterUbuntu
Docker Registry
Локальный репозиторий для образов
- Устновка на свой/клиентский сервер
- docker pull registry_host:5000/ubuntu
- docker push registry_host:5000/betterUbuntu
Deploy контейнера
На сервере собрки:
- docker build -t web_service web/
- docker tag web_service registry:5000/web_service
- docker push registry:5000/web_service
На docker host:
docker run -d registry:5000/web_service

Как это работает на PROD?

Как это масштабировать?
Рубрика "А вот если бы!?."

________________________________________
/ Q: Why don't Scotsmen ever have coffee \
| the way they like it? A: Well, they |
| like it with two lumps of sugar. If |
| they drink |
| |
| it at home, they only take one, and if |
| they drink it while |
| |
\ visiting, they always take three. /
----------------------------------------
\
\ \_\_ _/_/
\ \__/
(oo)\_______
(__)\ )\/\
||----w |
|| ||
[!1998]|23:21:33|slava:~$ ssh root@192.168.0.35
root@192.168.0.35's password:
Last login: Thu Oct 29 08:27:14 2015 from 192.168.1.50
root@SYS005056ada9d0:ssh:~# docker
-bash: docker: command not found
root@SYS005056ada9d0:ssh:~# yum
-bash: yum: command not found
root@SYS005056ada9d0:ssh:~# gcc
-bash: gcc: command not found
root@SYS005056ada9d0:ssh:~# rpm -i docker-1.7.1-108.el7.centos.x86_64.rpm
warning: docker-1.7.1-108.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
/bin/bash is needed by docker-1.7.1-108.el7.centos.x86_64
/bin/sh is needed by docker-1.7.1-108.el7.centos.x86_64
device-mapper-libs >= 7:1.02.90-1 is needed by docker-1.7.1-108.el7.centos.x86_64
docker-selinux >= 1.7.1-108.el7.centos is needed by docker-1.7.1-108.el7.centos.x86_64
libc.so.6()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libc.so.6(GLIBC_2.14)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libc.so.6(GLIBC_2.2.5)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libc.so.6(GLIBC_2.4)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libdevmapper.so.1.02()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libdevmapper.so.1.02(Base)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libpthread.so.0()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libpthread.so.0(GLIBC_2.2.5)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
libsqlite3.so.0()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
lvm2 >= 2.02.112 is needed by docker-1.7.1-108.el7.centos.x86_64
rtld(GNU_HASH) is needed by docker-1.7.1-108.el7.centos.x86_64
selinux-policy >= 3.13.1-23 is needed by docker-1.7.1-108.el7.centos.x86_64
systemd is needed by docker-1.7.1-108.el7.centos.x86_64
xfsprogs is needed by docker-1.7.1-108.el7.centos.x86_64
xz is needed by docker-1.7.1-108.el7.centos.x86_64
root@SYS005056ada9d0:ssh:~#

ВСЕ! Вопросы?

Виртуализация
By Slava Konashkov
Виртуализация
- 368