Docker Machine – это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
Docker Machine можно установить на локальную или на удалённую систему. Как правило, эту программу используют на локальной машине.
Docker Machine можно установить на большинство дистрибутивов Linux, на Mac OS X и Windows. Данное руководство поможет установить этот инструмент на локальную машину Ubuntu 16.04.
Требования
- Локальная машина Ubuntu 16.04.
- Предварительно установленная система Docker (инструкции по установке можно найти здесь).
1: Установка Docker Machine
Для начала установите Docker Machine на локальную машину.
Чтобы загрузить бинарный файл, введите:
wget https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-$(uname -s)-$(uname -m)
Файл называется docker-machine-Linux-x86_64. После загрузки переименуйте его в docker-machine, так будет проще работать.
mv docker-machine-Linux-x86_64 docker-machine
Сделайте файл исполняемым:
chmod +x docker-machine
Переместите или скопируйте его в каталог usr/local/bin, чтобы получить доступ к системной команде:
sudo mv docker-machine /usr/local/bin
Чтобы убедиться, что установка прошла успешно, запросите версию программы:
docker-machine version
Команда вернёт:
docker-machine version 0.6.0, build e27fb87
2: Установка сценариев Docker Machine
В GitHub-репозитории Docker Machine можно найти три bash-сценария, которые упрощают работу команд docker и docker-machine. Они отвечают за выполнение команд и пользовательские настройки командной строки bash.
Установите эти сценарии на локальный компьютер в каталог /etc/bash_completion.d.
Первый сценарий позволяет увидеть статус машины в командной строке. Это полезно, если при работе вы часто переключаетесь между несколькими машинами Docker. Этот сценарий называется docker-machine-prompt.bash. Чтобы установить его, введите:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash
Чтобы завершить установку этого файла, нужно установить пользовательское значение переменной PS1 в файле .bashrc. PS1 – это специальная переменная оболочки, которая используется для редактирования командной строки bash. Откройте файл:
nano ~/.bashrc
Этот файл содержит три строки, которые начинаются с PS1:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
В конец каждой строки нужно вставить $(__docker_machine_ps1 ” [%s]”). Должно получиться следующее:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1"
Теперь имя активной машины будет отображаться в командной строке оболочки.
Сохраните и закройте файл.
Второй сценарий называется docker-machine-wrapper.bash. Он добавляет к команде docker-machine подкоманду use, которая позволяет быстро переключаться между машинами Docker. Чтобы загрузить этот сценарий, наберите:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash
Последний сценарий называется docker-machine.bash. Он отвечает за завершение команд docker-machine.
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash
Чтобы активировать внесённые изменения, закройте и снова откройте терминал. Если вы находитесь в сессии SSH, закройте и снова откройте сессию. Теперь завершение команд docker и docker-machine включено.
3: Команды Docker Machine
Для создания нового хоста используется команда:
docker-machine create -d 8host \
Параметр –d задаёт драйвер.
При помощи субкоманды ls можно просмотреть список доступных хостов:
docker-machine ls
Команда вернёт список хостов (в списке указывается имя хоста, его состояние, URL-адрес и другие данные о хосте).
Чтобы получить подробную информацию о хосте Docker, используйте подкоманду inspect:
docker-machine inspect machine-name
Команда вернёт следующий результат. В строке Image указан текущий дистрибутив Linux:
...
"DropletName": "",
"Image": "ubuntu-15-10-x64",
"Region": "nyc3",
"SSHKeyID": 1857042,
"Size": "512mb",
"IPv6": false,
"Backups": false,
"PrivateNetworking": false,
---
Чтобы вывести на экран настройки соединения хоста, введите:
docker-machine config machine-name
--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://104.131.102.147:2376
Последняя строка результата данной команды отображает IP-адрес хоста. Также узнать IP можно с помощью следующей команды:
docker-machine ip machine-name
Чтобы отключить удалённый хост, используйте:
docker-machine stop machine-name
Чтобы убедиться, что удалённый хост был отключен, запросите список доступных хостов:
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker 8host Timeout
Чтобы запустить удалённый хост, введите:
docker-machine start machine-name
Проверить его состояние можно в списке доступных хостов:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker - 8host Running tcp://159.203.117.16:2376 v1.11.1
Чтобы удалить хост, используйте команду:
docker-machine rm machine-name
4: Выполнение команд на хосте Docker через SSH
На данный момент у вас есть все необходимые данные о хосте. Однако Docker предоставляет гораздо больше возможностей. К примеру, вы можете выполнять на хосте Docker встроенные команды Linux. Это делается с помощью подкоманды ssh в локальной системе.
Данный раздел научит вас пользоваться этой подкомандой и запускать сессии SSH на хостах Docker.
Если на удалённом хосте используется операционная система CentOS, выполните в локальной системе следующую команду, чтобы обновить пакеты системы удалённого хоста.
docker-machine ssh machine-name yum update
Чтобы узнать, какое ядро использует удалённый хост, введите:
docker-machine ssh machine-name uname -r
Также команда ssh позволяет выполнить авторизацию на хосте Docker:
docker-machine ssh machine-name
После этого командная строка должна измениться:
root@machine-name#
Чтобы закрыть удалёный хост, введите:
exit
5: Включение хоста Docker
После активации хост Docker подключается к локальному клиенту Docker, что позволяет запускать встроенные команды в удалённой системе. Чтобы включить хост, используйте команду:
eval $(docker-machine env machine-name)
или её альтернативу:
docker-machine use machine-name
Примечание: При работе с большим количеством хостов Docker для переключения между хостами рекомендуется использовать команду docker-machine use.
После этого командная строка должна измениться. Это значит, что локальный клиент Docker подключен к удалённому хосту Docker.
username@localmachine:~ [machine-name]$
В конце строки указывается имя текущего хоста.
Теперь можно выполнять команды docker на удалённом хосте.
Чтобы убедиться, что хост включен, запустите команду docker-machine ls. Если хост активен, в столбце ACTIVE будет символ звёздочки (*).
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker * 8host Running tcp://45.55.183.145:2376 v1.11.1
Примечание: Когда хост включен, все команды docker выполняются на удалённом хосте, а все команды Linux – на локальной машине.
Чтобы закрыть хост, введите:
docker-machine use -u
Эта команда вернёт вас в командную строку локальной системы.
6: Создание контейнера Docker на удалённом хосте
Попробуйте запустить контейнер на удаленном хосте Docker.
Примечание: В качестве примера в руководстве используется официальный контейнер Nginx.
Подключившись к удалённому хосту, выполните следующую команду, чтобы запустить контейнер Nginx:
docker run -d -p 8080:80 --name httpserver nginx
Данная команда свяжет порт 80 контейнера Nginx и порт 8080 хоста Docker. Теперь вы можете получить доступ к стандартной странице Nginx.
Если команда выполнена успешно, вы увидите эту страницу в браузере, перейдя по ссылке:
http://machine-ip:8080
Чтобы закрыть командную строку удалённого хоста, введите:
exit
Примечание: Чтобы создать контейнер на удалённом хосте, нужно активировать его. В противном случае контейнер будет создан на локальной машине. Определить, какая машина является текущей (удалённая или локальная), можно с помощью командной строки – в ней указывается имя текущей машины.
7: Отключение отчетов о сбоях (опционально)
По умолчанию в случае неудачного выполнения команды или сбоя Docker Machine диагностическая информация автоматически передается на аккаунт Docker на Bugsnag. Эту функцию при желании можно отключить. Для этого создайте пустой файл no-error-report в каталоге .docker/machine.
touch ~/.docker/machine/no-error-report
В случае сбоя Docker Machine проверяйте этот файл.
Заключение
Данное руководство содержит только основы работы с Docker Machine. Теперь вы можете создать необходимое количество удалённых хостов Docker и управлять ими.
Более подробную информацию о Docker Machine можно получить в документации программы. Загрузить использованные в руководстве сценарии можно с этой страницы GitHub.