Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любой Linux-системе с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами. По утверждению главного разработчика Solomon Hykes, Docker идеально подойдет для разработчиков, системных администраторов и QA.

Что такое Docker?

Docker это платформа для создания контейнров с приложениями, которые могут быть запущенны обсолютно на любой системе (вне зависимости от того, на каком языке программирования написано приложение), где установлен Docker. Т.е. например компания «К» занимается разработкой программы для удобного распростронения файлов, иными словами, шаринг файлов в локальной сети или в Интернет с одного файлового сервера через удобный Веб-интерфейс.

Предположим, пользователь захотел скачать и установить себе эту программу на сервер. Если компания «К» распростроняет исходные коды, это означает, что администратору, придется скачать все исходники и зависимости, устоновить компилятор в систему, после чего скомпилировать программу и запустить. Звучит сложно и неудобно.

Для этого придумали репозиторий. Администратору нет необходимости качать исходные коды и самому разбератся в том, как все это добро скомпилировать со всеми необходимыми параметрами и зависимостями, а потом еще и обновлять. Он просто пишет apt-get install app_name или yum install app_name и менеджер пакетов сделает всю работу за него, сам подтянет зависимости и сам установит все в систему, в дальнейшем это все добро так-же будет легко обновить.

Но у этого подхода есть один недостаток. Далеко не все компании заботятся о том, что-бы подготовить и сопровождать репозиторий для всех популярных Linux платформ. А приложения которые есть в стандартных репозиториях того или иного дистрибутива собраны сторонними мейнтейнерами и могут своевременно не обновлятся.

Идея Docker состоит в том, что производитель сам будет собирать программу со всеми необходимыми зависимостями и постовлять в виде контейнера который будет работать на платформе Docker, все что останется, это скачать контейнер и запустить, а потом обновлять.

Главная фишка такого подхода состоит в том, что контейнеры в Docker запускаются изолированно от основной системы т.е. демон обеспечивает полную изоляцию запускаемых на узле контейнеров на уровне файловой системы (у каждого контейнера собственная корневая файловая система), на уровне процессов (процессы имеют доступ только к собственной файловой системе контейнера, а ресурсы разделены средствами LXC), на уровне сети (каждый контейнер имеет доступ только к привязанному к нему сетевому пространству имён и соответствующим виртуальным сетевым интерфейсам).

В чем разница между VM и Docker?

Каждый контейнер любой виртуальной системы содержит в себе не только необходимое вам приложение, но гостевую операционную систему, к примеру файл vmdk. Такой файл может быть размером до 5Гб. Еще одно ограничение состоит в том, что такой контейнер получится запуcтить только в соответсвующей виртульной среде, будь то ESXi, XenServer или Proxmox.

Вот так выглядит схема контейнера в случае с VM:

hello_1

Docker отличается тем, что в контейнер заворачивается только приложение и его зависимости. А работает он поверх платформы установленной внутри вашей операционной системы. Это делает Docker крайне автоматизированным и универсальным.

Вот так выглядит контейнер Docker:

hello_2

Понятное дело, что Docker легко установить в любой современной операционной системе.

Как установить Docker?

Это пожалуй будет самый короткий раздел стаьи. Так как установка Docker в Centos 6.5 невероятно проста. Единственный момент, у вас в системе должен быть установлен репозитоирий EPEL, есть люди у которых он не установлен?

Ставим Docker:

sudo yum -y install docker-io

Если нужно обновить:

sudo yum -y update docker-io

Запускаем демон:

sudo service docker start

Добавляем в автозагрузку:

sudo chkconfig docker on

Ну вот поажлуй это все. Docker установлен и работает у вас в системе. Теперь вы можете скачать или получить из репозитория Docker готовые контейнеры и запустить их. Я приведу пример установки целого преложения из docker в своей следующей статье.

Если уж совсем не терпится, сделайте так:

sudo docker run -i -t fedora /bin/bash

Docker загрузит и запустит Bash образa Fedora:

hello_3

Установка Docker в Ubuntu

Docker поддерживает следующие версии Ubuntu:

— Ubuntu Trusty 14.04 (LTS) (64-bit)

— Ubuntu Precise 12.04 (LTS) (64-bit)

— Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

В Ubuntu Trusty 14.04 (LTS) (64-bit)

Для установки Docker из репозитория Ubuntu сделайте так:

sudo apt-get update
sudo apt-get install docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

Для установки Docker из родного репозитория Docker так:

sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker

Запустить:

sudo apt-get install lxc-docker

Добавить в автозагрузку:

sudo update-rc.d docker.io defaults

Загрузить и запустить bash контейнерa с Ubuntu:

sudo docker run -i -t ubuntu /bin/bash

o

 

Создание собственного репозитория. Docker Central Registry

Docker — это не только инструмент для управления контейнерами, это так же и инструмент для обмена Docker образами. Он предоставляет возможность загрузки созданных вами образов в центральный реестр (Central Registry), откуда они доступны для скачивания всем желающим. Разумеется, это можно использовать для сохранения своих наработок и быстрого их разворачивания в любом месте где доступен интернет. _(Кроме того, поддерживаются частные закрытые репозитории, но они платные)_

Вдобавок к этому — можно создать свой собственный реестр при помощи docker registry.

Создание собственного аккаунта в реестре Docker донельзя упрощено:

$ docker login
Username: romanch
Password: 
Email: <адрес-почты>
Account created. Please use the confirmation link we sent to your e-mail to activate it.

После этого на почту приходит письмо со ссылкой-подтверждением регистрации. Готово, можно пользоваться!

Например, при помощи команды build (но можно использовать и commit) мною был создан репозиторий (и образ) на базе debian репозитория, с некоторым комплектом софта и настроек. Для правильной работы с центральным реестром Docker (см. оф. доку) имя репозитория должно начинаться с вашего логина в реестре, через слеш — имя вашего репозитория. Если при сборке образа они не были заданы, их можно задать через:

docker tag <image-id> <registry-login>/<repository-name>

Загрузить свеже созданный образ и репозиторий в центральный реестр очень просто:

roman@book.world ~ $ docker push romanch/debian
The push refers to a repository [romanch/debian] (len: 1)
Sending image list
Pushing repository romanch/debian (1 tags)
511136ea3c5a: Image already pushed, skipping 
Image 584162d19e17 already pushed, skipping
Image b5fe16f2ccba already pushed, skipping
0f498ee7c46e: Image successfully pushed 
// Большой список "слоёв"-образов из которых состоит мой образ
41d703a438c7: Image successfully pushed 
Pushing tag for rev [41d703a438c7] on {https://registry-1.docker.io/v1/repositories/romanch/debian/tags/default-server}

Готово! Задать описание вашего репозитория можно в настройках профиля в реестре.

Для проверки можно попробовать поискать самого себя:

$ docker search romanch
NAME             DESCRIPTION                                     STARS     OFFICIAL   TRUSTED
romanch/debian   Images with some admin soft, eg: ssh strac...   0

Получить копию репозитория локально (например на другой машине) можно через:

docker pull romanch/debian

Выводы

На мой взгляд Docker — это очень удобная вещь для тестирования различного софта. Как минимум она решает два вопроса: спасает основную систему от “захламления”;, и даёт возможность “малой кровью”; развернуть несколько виртуальных “хостов”; если софт предполагает распределённую обработку данных.

С точки зрения безопасности — возможность удобного и быстрого запуска закрытых/непроверенных приложений тоже даёт ряд очевидных преимуществ.

Для решений вроде серьёзного хостинга на мой взгляд Docker применять ещё рано. Чего стоят одни только проблемы с изменением размера хранилища. Так же — явно не доработан механизм ограничения использования ресурсов, но разработчики обещают что возможности cgroups будут поддерживаться через собственный драйвер docker.

Комментарии

comments powered by Disqus