Docker виртуализация на уровне операционной системы

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 install docker-io

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

sudo yum -y update docker-io
sudo yum -y update docker-io

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

sudo service docker start
sudo service docker start

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

sudo chkconfig docker on
sudo chkconfig docker on

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

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

sudo docker run -i -t fedora /bin/bash
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
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 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 apt-get install lxc-docker

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

sudo update-rc.d docker.io defaults
sudo update-rc.d docker.io defaults

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

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

o