Библиотека сайта 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