Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Как в Ubuntu с помощью Docker управлять контейнерами Linux

Оригинал: How to manage Linux containers with Docker on Ubuntu
Автор: Dan Nanni
Дата публикации: May 1, 2014
Перевод: Н.Ромоданов
Дата перевода: январь 2015 г.

Хотя полная аппаратная виртуализация, например, с помощью KVM, Xen или Hyper-V, является отличным подходом для запуска на одном физическом хосте полностью изолированных экземпляров нескольких операционных систем, она требует различных накладных расходов с точки зрения обеспечения производительности, потребления ресурсов и времени на их подготовку. В некоторых конкретных случаях полная машинная виртуализация может, на самом деле, не требоваться.

Альтернативным легковесным подход виртуализации являются так называемые контейнеры Linux (LXC), с помощью которых реализуется виртуализация уровня операционной системы. LXC позволяет без больших накладных расходов, связанных с запуском виртуальных машин, запускать в легковесной песочнице контейнера несколько экземпляров полной операционной системы Linux. Контейнеры могут оказаться очень полезными, в тех случаях, когда вы настраиваете среду разработки/тестирования, которую нужно воспроизводить повторно, или когда приложение развертывается внутри отдельных песочниц для обеспечения дополнительной безопасности.

Прим.пер.: На самом деле, с помощью контейнеров Linux реализуется лишь управление пользовательскими пространствами имен и разделение ресурсов ядра одного единственного экземпляра операционной системы. За счет этого и происходит экономия ресурсов. Но, с точки зрения использования контейнеров, это выглядит так, как если бы на вашем компьютере отдельно работало несколько экземпляров операционных систем.

Docker является инструментальным средством с открытым исходным кодом, которое было разработано для облегчения развертывания контейнеров Linux. Docker быстро становится для контейнерных технологий стандартом де-факто, которым пользуются в основных дистрибутивах Linux, например, в Ubuntu и Red Hat.

В данном руководстве я собираюсь рассказать о том, как с помощью Docker управлять контейнерами Linux в системе Ubuntu 14.04. Обратите внимание, что для более ранних версий Ubuntu инструкции могут несколько отличаться. Если вы хотите попробовать Docker в Fedora или в CentOS, то обратитесь к этой статье.

На данный момент пакет Docker, доступный для Ubuntu, поддерживает только 64-разрядные системы. Чтобы запустить его на 32-разрядной машине, вам нужно будет собрать 32-разрядную версию Docker из исходного кода.

Установка Docker

Установить Docker можно достаточно просто с помощью команды apt-get.

$ sudo apt-get install docker.io 

Чтобы Docker мог запускать пользователь, не обладающий правами root, добавьте его в группу docker. Следующая команда позволит текущему пользователю, не имеющему прав root, запускать Docker.

$ sudo usermod -a -G docker $USER 

Выйдите из системы и затем снова войти в систему для того, чтобы активировать принадлежность к группе.

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

$ sudo vi /etc/default/docker.io 
DOCKER="/usr/bin/docker.io"

Перезапустите сервис Docker.

$ sudo service docker.io restart

Управление контейнерами Docker

Если вы хотите запустить новый контейнер Docker с операционной системой Ubuntu, то сначала скачайте образ Ubuntu Docker. С помощью приведенной ниже команды будет скачан образ Docker.

$ docker pull ubuntu 

Вы можете запустить Ubuntu Docker в интерактивном режиме с помощью следующей команды. Последний аргумент "/bin/bash" является командой, которая будет выполнена внутри контейнера, когда он будет запущен; в данном случае — это просто запуск оболочки bash.

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

Приведенная выше команда немедленно запустит контейнер Ubuntu (и это здорово, если используются контейнеры!) и выдаст вам внутри контейнера приглашение для работы в оболочке. Теперь у вас должен быть полный доступ к операционной системе Ubuntu, которая находится внутри изолированного окружения.

Чтобы выйти из контейнера Docker, наберите "exit" в командной строке внутри контейнера.

Вы можете запускать другие контейнеры. Например, чтобы запустить контейнер Fedora, выполните следующую команду:

$ docker.io run -i -t fedora /bin/bash 

Если образ Fedora Docker локально недоступен, то сначала он будет автоматически загружен, а затем будет запущен Docker.

Если вы хотите запустить контейнер с конкретной версией дистрибутива, то вы и это также можете сделать. Например, чтобы запустить Ubuntu 13.04 Docker, выполните команду:

$ docker.io run -i -t ubuntu:13.04 /bin/bash 

Сетевые средства контейнера

Docker использует мост Linux (Linux bridge) для соединения контейнеров между собой и их соединения с внешними сетями. После установки Docker вы должны увидеть созданный автоматически по умолчанию мост Linux docker0. Каждый контейнер, который вы создаете, будет подключен к интерфейсу моста docker0.

Настраиваемый мост Linux

Если вы хотите, то можете сами настроить мост Linux для взаимодействия контейнеров. Для этого, вы можете создать свой собственный мост и настроить его следующим образом. Вы можете назначить мосту отдельную подсеть и Docker будет назначать адреса IP из этой подсети. В качестве подсети Docker я собираюсь использовать сеть 10.0.0.0/24.

$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0 

Чтобы создать собственный мост, который будет использоваться в Docker, добавьте "-b=br0" к переменной DOCKER_OPTS в файле /etc/default/docker.io и перезагрузите сервис Docker.

$ sudo service docker.io restart 

С этого момента любой новый контейнер будет подключен к мосту br0, и его адрес IP будет автоматически назначаться из сети 10.0.0.0/24.

Другие настройки

Есть еще несколько других настроек сети, используемой в Docker по умолчанию, которые делаются, в основном, с помощью переменной DOCKER_OPTS в файле /etc/default/docker.io:

  • "-dns 8.8.8.8 -dns 8.8.4.4": указываются сервера DNS, используемые контейнером.
  • "-icc=false": контейнеры становятся изолированные друг от друга.

Возможные проблемы

При выполнении команды docker.io вам может встретится следующее сообщение об ошибке.

dial unix /var/run/docker.sock: no such file or directory
(… нет такого файла или каталога)

Ошибка возможна из-за того, что не работает демон Docker. Проверьте статус демона Docker и в первую очередь убедитесь в том, что вы его запустили.

$ sudo service docker.io status
$ sudo service docker.io start