rhel 7. Контейнеры и docker

18
1 RHEL 7 Контейнеры & Docker Вебинар 28 Октября 2014 , RHCA Андрей Маркелов Senior Solution Architect [email protected]

Upload: andrey-markelov

Post on 16-Jul-2015

96 views

Category:

Technology


12 download

TRANSCRIPT

1

RHEL 7

Контейнеры & DockerВебинар 28 Октября 2014

, RHCAАндрей МаркеловSenior Solution [email protected]

2

Контейнеры и виртуализация

● Разные концепции

● Виртуализация – вертикальное абстрагирование

● Контейнеры – горизонтальное разбиение

● Контейнеры используются для замены виртуализации там, где они справляются лучше:

● Горизонтальная изоляция приложений

● Делегирование окружений

● “Виртуализация приложений”

● Максимальная плотность

● Зачастую контейнеры используются поверх виртуализации

3

Контейнеры в RHEL 7

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/

Спасибо! Вопросы?

Представительство Red Hat в России и СНГМосква, Земляной вал, 9

Тел +7 495 662 8837