rhel 7. Контейнеры и docker
TRANSCRIPT
1
RHEL 7
Контейнеры & DockerВебинар 28 Октября 2014
, RHCAАндрей МаркеловSenior Solution [email protected]
2
Контейнеры и виртуализация
● Разные концепции
● Виртуализация – вертикальное абстрагирование
● Контейнеры – горизонтальное разбиение
● Контейнеры используются для замены виртуализации там, где они справляются лучше:
● Горизонтальная изоляция приложений
● Делегирование окружений
● “Виртуализация приложений”
● Максимальная плотность
● Зачастую контейнеры используются поверх виртуализации
4
Namespaces (пространства имен)
● Mount namespaces● mount(), umount()
● UTS namespaces● uname()
● IPC namespaces● System V IPC objects, POSIX message queues
● PID namespaces● /proc, PID
● Network namespaces● NICs, firewall, routing table
5
Control Groups (CGroups)
● В RHEL 7 десять групп
● Основные группы:● cpu
● memory
● blkio
● systemctl● net-prio
● cgconfig (устарела) libcgroup будет удалена
6
SELinux – реализация MAC для Linux
● Интегрирована в ядро● LSM и расширенные атрибуты
● Для чего использовать:● Запуск программ с минимальными привилегиями● Защита от эксплоитов● Защита пользовательских данных
● Для чего не предназначена:● Аудит кода● Шифрование● Обновления
7
Docker – изменяет правила игры
● Docker CLI интересен, но это не столь значительное нововведение. Технологии, позволяющие создавать контейнеры у нас были с RHEL 5
● Docker как формат упаковки и распространения приложений – вот что важно!
8
Docker - понятия
● Контейнер – запущенное из образа приложение
● Образ – статический снимок конфигурации контейнера. Образы могут зависить от других образов. Образ всегда r/o. Изменения сохраняются только созданием образа поверх образа.
● Образ платформы – не имеющий родительских образов. Содержит базовые библиотеки и утилиты для запуска приложений. Мы поставляем образы RHEL 6 и 7.
9
Docker – упаковка приложений
● API и формат образов:● Перемещаемость контейнеров между хостами
● Контроль версий и переиспользование компонентов
● Удаленный репозиторий для образов
● Dockerfile – шаблон конфигурации для сборки образов
10
Контейнеры в RHEL 7 Вариант 1: Host Containers
Host Containers
Идентичные контейнеры
Host RHEL
● В RHEL 7 хост делится на защищенные контейнеры
● В каждом контейнере запускается код RHEL 7 пространства пользователя
● За : Обновления применяются просто запуском “yum update”
● Против : Ограничено только средой исполнения RHEL 7
11
Контейнеры в RHEL 7 Вариант 2:Image-based Containers
Image-based Containers
Разные контейнеры
RHEL 6 RHEL 7RHSCLFedora
Формат Docker
● Docker предоставляет формат образов для распространения программного обеспечения.
● Пакеты самого приложения и все зависимости для внедрения приложения в контейнерах
● Docker включает в себя среду исполнения для приложений
12
Что мы поддерживаем в Docker?
● RHEL 6 x86_64
● RHEL 7 x86_64
● Не в mission-critical производственных средах● Если все-таки mission-critical, то откройте заявку в поддержке
● Какие приложения? “...Single process user-space applications that run on Red Hat Enterprise Linux 7 should be able to run inside docker formatted Linux container using a RHEL 7 platform image...”
● https://access.redhat.com/solutions/907283
● Какая версия Docker?● На сегодня (28 октября 2014) - docker-1.1.2-13.el7.x86_64
13
Установка и запуск
● # subscription-manager repos --enable=rhel-7-server-extras-rpms
● # subscription-manager repos --enable=rhel-7-server-optional-rpms
● # yum install docker docker-registry
● # systemctl start docker.service
● # systemctl enable docker.service
14
Создание локального репозитория
● # systemctl enable docker-registry
● # systemctl start docker-registry
● # systemctl status docker-registry
● # docker pull registry.access.redhat.com/rhel
● # docker pull fedora
15
Пример запуска
# mkdir /opt/rhel_data
# echo "Server up and running" > /opt/rhel_data/test.txt
# docker run -d -p 8080:8000 --name="python_web" \
-v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /usr/lib64:/usr/lib64 \
-w /opt -v /opt/rhel_data:/opt rhel /bin/python -m SimpleHTTPServer 8000
# netstat -tupln | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 27739/docker
# curl localhost:8080/test.txt
Server up and running
16
Взгляд изнутри
# nsenter -m -u -n -i -p -t 26146 /bin/bash
[root@58120e57a2df /]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
[root@58120e57a2df /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:27 ? 00:00:00 /bin/python -m SimpleHTTPServer 8000
root 6 0 0 08:48 ? 00:00:00 /bin/bash
root 20 6 0 08:50 ? 00:00:00 ps -ef
17
Что дальше?
● Get Started with Docker Containers in RHEL 7● https://access.redhat.com/articles/881893
● Project Atomic● http://www.projectatomic.io/
● Документация Red Hat● http://docs.redhat.com/