Часть 1. Предпосылки и основы

Глава 2. Установка

Данная глава коротко охватывает шаги, требующиеся для установки Docker. Существует ряд ляпов, зависящих от того, какой операционной системой вы пользуетесь; однако при некоторой удаче, она должна быть простой и безболезненной. Если у вас уже есть установленная последняя версия Docker (скажем, 1.8 или новее {Прим. пер.: на момент перевода 1.10}), вы можете благополучно перейти к к следующей главе.

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

Общепризнанно, что самый лучший способ установки Docker в Linux состоит в работе со сценарием установки предоставляемым Docker. Хотя большинство дистрибутивов Linux имеют свои собственные пакеты, они имеют тенденцию отставать от редакций Docker, что является серьёзной проблемой, учитывая темпы развития Docker.

[Предостережение]Требования Docker

У Docker не так много требований, но вам нужно работать с достаточно современным ядром (на мамент написания версия 3.10 или выше {Прим. пер.: то же на момент перевода, 3.10 или выше}). Вы можете проверить это выполнив uname -r. Если вы используете RHEL или CentOS, вам нужна версия 7 или выше. {Прим. пер.: на момент перевода Docker поддерживает следующие версии Ubuntu: 12.04, 14.04, 15.10}.

Также отметим, что вам понадобится 64- битная архитектура. Вы можете проверить её выполнив uname -m; результатом должно быть x86_64.

Для автоматической установки Docker вам следует иметь возможность воспользоваться сценарием предлагаемым на https://get.docker.com. Официальные инструкции предписывают вам просто выполнить curl -sSL | sh or wget -qO- | sh, и вы можете так и поступить, но я рекомендую вам проверить сценарий перед его запуском и удостовериться, что вы удовлетворитесь изменениями, которые он сделает в вашей системе:

$ curl https://get.docker.com > /tmp/install.sh
$ cat /tmp/install.sh
...
$ chmod +x /tmp/install.sh
$ /tmp/install.sh
...
	   

Сценарий выполнит ряд проверок, затем установит Docker с применением соответствующего пакета для вашей системы. Он также установит ряд зависимостей для безопасности и свойств файловой системы, если они пропущены.

Если вы просто не хотите пользоваться установщиком, или вы хотите использовать другую версию Docker, чем предоставляется установщиком, вы также можете загрузить двоичные коды с веб- сайта Docker. Недостатком этого подхода будет отсутствие проверок зависимостей и к тому же вам придется устанавливать обновления вручную. За дополнительной информацией и ссылок на двоичные коды отсылаем вас к Docker Binary page.

[Совет]Протестировано с Docker 1.8

На момент написания книги, Docker находился на уровне версии 1.8. Все команды были проверены для данной версии. {Прим. пер.: на момент перевода действует 1.10, мы пока не выполнили тестирование в полном объёме.}

 Выполнение SELinux в разрешающем режиме

Если вы работаете с дистрибутивом на основе Red Hat из перечня RHEL, CentOS, Fedora, вы, скорее всего, имеете установленным модуль безопасности SELinux.

При начале работы с Docker я рекомендую вам выполнять SELinux в разрешающем (permissive) режиме, который будет регистрировать ошибки, а не исключать их принудительно. Если вы исполняете SELinux в принудительном (enforcing) режиме, вы, скорее всего увидите различные загадочные ошибки запрещения полномочий ("Permission Denied") при выполнении примеров из данной книги.

Чтобы проверить ваш режим SELinux, выполните sestatus и проверьте вывод. Например:

$ sestatus
SELinux status:                enabled
SELinuxfs mount:               /sys/fs/selinux
SELinux root directory:        /etc/selinux
Loaded policy name:            targeted
Current mode:                  enforcing1
Mode from config file:         error (Success)
Policy MLS status:             enabled
Policy deny_unknown status:    allowed
Max kernel policy version:     28
	   
1

Если вы увидели здесь "enforcing", SELinux разрешён и правила принуждающие.

Чтобы изменить SELinux в разрешающий режим, просто выполните sudo setenforce 0.

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

 Выполнение без sudo

Поскольку Docker является двоичным файлом с полномочиями, по умолчанию нам необходимо предворять команды префиксом sudo для их исполнения. Это быстро начинает докучать. Мы можем избавиться от этого добавив нашего пользователя в группу docker. В Ubuntu вам надлежит выполнить следующее:

$ sudo usermod -aG docker
	   

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

Вам также следует перезапустить службу Docker что зависит от дистрибутива. В Ubuntu это выглядит следующим образом:

$ sudo service docker restart
	   

Для краткости данная книга опускает sudo в командах Docker.

[Предостережение]Предостережение

Добавление пользователя в группу docker эквивалентно наделению этого пользователя полномочиями root. Раз уж так, это оказывает влияние на безопасность, о котором вы должны быть осведомлены, в особенности, если вы совместно используете машину. За дополнительной информацией отсылаем вас к Docker security page.

 Установка Docker на Mac OS или Windows

Если вы хотите использовать Windows или Mac OS, вам понадобится некий вид виртуализации для выполнения Docker (Windows {Microsoft} и Docker объявили об совместной инициативе по поддержке Docker на Windows Server. Это позволит пользователям Windows Server запускать образы на основе Windows без виртуализации). Вы можете загрузить полное решение ВМ и следовать инструкциям Linux для установки Docker или установить Docker Toolbox, который содержит минимальную ВМ boot2docker а также прочий инструментарий Docker, который мы будем применять на протяжении этой книги, например, Compose и Swarm. Если вы используете Homebrew для установки приложений на своём MAC, существует brew recipe, доступный для boot2docker, однако обычно я рекомендую применять официальную установку Toolbox во избежание проблем.

После того, как Toolbox установлен, вы можете получить доступ к Docker открыв терминал быстрого запуска Docker (Docker Toolbox также содержит Kitematic, графический интерфейс для работы с контейнерами Docker. Мы не будем описывать Kitematic в данной книге, но это, несомненно, ценное приобретение, особенно при начале работы с Docker). В противном случае вы можете настроить существующий терминал введя следующие команды:

$ docker-machine start default
Starting VM...
Started machines may have new IP addresses. You may need to rerun the
`docker-machine env` command.
$ eval $(docker-machine env default)
	   

которые настроят вашу среду установками, необходимыми для доступа Docker Engine, работающего в вашей ВМ.

При использовании Docker Toolbox избегайте следующего:

  • В примерах в данной книге я полагаю, что Docker работает на вашей машине хоста. Если вы применяете Docker Toolbox, это будет не тот случай. В частности, вам придется изменять ссылки на localhost на IP адреса вашей ВМ. Например:

    $ curl localhost:5000
    	   

    превратится в нечто типа:

    $ curl 192.168.59.103:5000
    	   

    Вы можете легко обнаружить IP вашей ВМ выполнив docker-machine ip default, что делает возможной некую автоматизацию:

    $ curl $(docker-machine ip default):5000
    	   
  • Соответствующие тома между вашей локальной ОС и контейнером Docker должны быть перекрестно смонтированы внутри ВМ. Docker Toolbox автоматизирует это до некоторой степени, однако убедитесь что это произошло если вы испытываете проблемы при использовании томов Docker.

  • Вам может потребоваться изменить настройки внутри ВМ если у вас имеются специальные требования. Файл /var/lib/boot2docker/profile внутри ВМ boot2docker имеет разнообразные установки, включая настройки Docker Engine. Вы можете также выполнить свой собственный сценарий после инициализации ВМ, изменив файл /var/lib/boot2docker/bootlocal.sh. За дополнительными подробностями отсылаем к boot2docker GitHub repository.

Если у вас возникнут какие-либо проблемы в последующих примерах в данной книге, попробуйте зарегистрироваться напрямую в ВМ с docker-machine ssh default и выполнить команду там.

[Совет]Экспериментальный канал Docker

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

Экспериментальная сборка может быть установлена в Linux с применением следующего сценария:

$ curl -sSL https://experimental.docker.com/ | sh
	   

или путём загрузки версии двоичного кода с веб- сайта Docker. Отметим, что эта сборка обновляется по ночам, а для верификации загрузок доступны хэши./p>

 Быстрая проверка

Просто для того, чтобы убедиться что всё установлено корректно и работает, попробуйте выполнить команду docker version. Вы должны увидеть что-то вроде:

$ docker version
Client:
Version:       1.8.1
API version:   1.20
Go version:    go1.4.2
Git commit:    d12ea79
Built:         Thu Aug 13 02:35:49 UTC 2015
OS/Arch:       linux/amd64

Server:
Version:       1.8.1
API version:   1.20
Go version:    go1.4.2
Git commit:    d12ea79
Built:         Thu Aug 13 02:35:49 UTC 2015
OS/Arch:       linux/amd64
	   

Если так, вы всё установили и готовы к следующей главе. Если вместо этого вы получили что-то типа:

$ docker version
Client:
Version:       1.8.1
API version:   1.20
Go version:    go1.4.2
Git commit:    d12ea79
Built:         Thu Aug 13 02:35:49 UTC 2015
OS/Arch:       linux/amd64
Get http:///var/run/docker.sock/v1.20/version: dial unix /var/run/docker.sock:
no such file or directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?
	   

это означает, что демон Docker не работает (или клиент не может получить к нему доступ). Чтобы исследовать проблему, попытайтесь запустить демон Docker вручную выполнив sudo docker daemon - это должно снабдить вас некоторой информацией о том, что идёт не так и помочь в поиске ответа. (Отметим, что это работает только на хосте Linux. Если вы применяете Docker Toolbox или нечто аналогичное, вам следует свериться с документацией для дополнительных подсказок.)