Управление удалёнными хостами Docker с помощью Docker Machine в Ubuntu 18.04

Docker Machine – это инструмент, позволяющий управлять удалёнными хостами Docker и выполнять их оркестровку с локального компьютера.

Docker Machine можно установить на локальную или на удалённую систему. Как правило, эту программу используют на локальной машине.

Docker Machine можно установить на большинство дистрибутивов Linux, на Mac OS X и Windows. Данное руководство поможет установить этот инструмент на локальную машину Ubuntu 18.04.

Требования

  • Локальная машина Ubuntu 18.04.
  • Предварительно установленная система Docker (инструкции по установке можно найти здесь).

1: Установка Docker Machine

Для начала установите Docker Machine на локальную машину.

Чтобы загрузить и установить бинарный файл, введите:

wget https://github.com/docker/machine/releases/download/v0.15.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.15.0, build b48dc28d

2: Установка сценариев Docker Machine

В GitHub-репозитории Docker Machine можно найти три bash-сценария, которые упрощают работу команд docker и docker-machine. Они отвечают за выполнение команд и пользовательские настройки командной строки.

Установите эти сценарии на локальный компьютер в каталог /etc/bash_completion.d.

Примечание: Перед загрузкой и общесистемной установкой сценария из Интернета необходимо сначала проверить его содержимое, просмотрев исходный URL-адрес в браузере.

Первый сценарий позволяет увидеть статус машины в командной строке. Это полезно, если при работе вы часто переключаетесь между несколькими машинами 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:

...
{
"ConfigVersion": 3,
"Driver": {
"IPAddress": "203.0.113.71",
"MachineName": "docker-01",
"SSHUser": "root",
"SSHPort": 22,
...
"Image": "ubuntu-16-04-x64",
"Size": "s-1vcpu-1gb",
...
},
---

Чтобы вывести на экран настройки соединения хоста, введите:

docker-machine config docker-01

Команда вернет:

--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://203.0.113.71:2376

Последняя строка результата  данной команды отображает IP-адрес хоста. Также узнать IP можно с помощью следующей команды:

docker-machine ip docker-01

Чтобы отключить удалённый хост, используйте:

docker-machine stop docker-01

Чтобы убедиться, что удалённый хост был отключен, запросите список доступных хостов:

docker-machine ls
NAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS

docker-01   -        8host   Stopped                  Unknown

Чтобы запустить удалённый хост, введите:

docker-machine start docker-01

Проверить его состояние можно в списке доступных хостов:

docker-machine ls
NAME                ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS

docker-01           -        8host   Running   tcp://203.0.113.71:2376            v18.06.1-ce

4: Выполнение команд на хосте Docker через SSH

На данный момент у вас есть все необходимые данные о хосте. Однако Docker предоставляет гораздо больше возможностей. К примеру, вы можете выполнять на хосте Docker встроенные команды Linux. Это делается с помощью подкоманды ssh в локальной системе.

Данный раздел научит вас пользоваться этой подкомандой и запускать сессии SSH на хостах Docker.

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

docker-machine ssh docker-01 apt-get update

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

docker-machine ssh docker-01 apt-get upgrade

Чтобы узнать, какое ядро использует удалённый хост, введите:

docker-machine ssh docker-01 uname -r

Также команда ssh позволяет выполнить авторизацию на удаленном хосте Docker:

docker-machine ssh docker-01

После этого командная строка должна измениться, и вы увидите:

Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-131-generic x86_64)
* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
14 packages can be updated.
10 updates are security updates.

Чтобы закрыть удалённый хост, введите:

exit

5: Включение хоста Docker

После активации хост Docker подключается к локальному клиенту Docker, что позволяет запускать встроенные команды в удалённой системе. Чтобы включить хост, используйте команду:

eval $(docker-machine env machine-name)

или её альтернативу:

docker-machine use machine-name

Примечание: При работе с большим количеством хостов Docker для переключения между хостами рекомендуется использовать команду docker-machine use.

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

username@localmachine:~ [docker-01]$

В конце строки указывается имя текущего хоста.

Теперь можно выполнять команды docker на удалённом хосте.

Чтобы убедиться, что хост включен, запустите команду docker-machine ls.

docker-machine ls

Если хост активен, в столбце ACTIVE будет символ звёздочки (*).

NAME                ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
docker-01            *        8host         Running   tcp://203.0.113.71:2376      v18.06.1-ce

Примечание: Когда хост включен, все команды docker выполняются на удалённом хосте, а все команды Linux – на локальной машине.

Чтобы закрыть хост, введите:

docker-machine use -u

Эта команда вернёт вас в командную строку локальной системы.

6: Создание контейнера Docker на удалённом хосте

Попробуйте запустить контейнер на удаленном хосте Docker.

Примечание: В качестве примера в руководстве используется официальный контейнер Nginx.

Чтобы выбрать удаленную машину, введите:

docker-machine use docker-01

Подключившись к удалённому хосту, выполните следующую команду, чтобы запустить контейнер Nginx:

docker run -d -p 8080:80 --name httpserver nginx

Данная команда свяжет порт 80 контейнера Nginx и порт 8080 хоста Docker. Теперь вы можете получить доступ к стандартной странице Nginx.

Если команда выполнена успешно, вы увидите эту страницу в браузере, перейдя по ссылке:

http://machine-ip:8080

Пока хост Docker активен (как видно по командной строке), вы можете просмотреть образы:

docker images

В выводе будет образ Nginx:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              71c43202b8ac        3 hours ago         109MB

Вы также можете просмотреть список активных или запущенных контейнеров на хосте:

docker ps

Если контейнер Nginx, который вы запустили только что, — единственный активный контейнер, вы увидите такой результат:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS
PORTS                  NAMES
d3064c237372        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute
0.0.0.0:8080->80/tcp   httpserver

Примечание: Чтобы создать контейнер на удалённом хосте, нужно активировать его. В противном случае контейнер будет создан на локальной машине. Определить, какая машина является текущей (удалённая или локальная), можно с помощью командной строки – в ней указывается имя текущей машины.

7: Удаление хостов Docker

Вы можете использовать Docker Machine для удаления хоста Docker, который вы создали. Чтобы удалить хост docker-01, введите:

docker-machine rm docker-01

Сервер удалится вместе с ключом SSH. Снова просмотрите список хостов:

docker-machine ls

На этот раз вы не увидите хост docker-01 в выводе. Если у вас был только один хост, вы вообще не увидите никакого вывода.

Обязательно выполните команду docker-machine use -u , чтобы вернуть локальный демон Docker на ваш локальный компьютер.

8: Отключение отчетов о сбоях (опционально)

По умолчанию в случае неудачного выполнения команды или сбоя Docker Machine диагностическая информация автоматически передается на аккаунт Docker на Bugsnag. Эту функцию при желании можно отключить. Для этого создайте пустой файл no-error-report в каталоге .docker/machine.

touch ~/.docker/machine/no-error-report

В случае сбоя Docker Machine проверяйте этот файл.

Заключение

Данный мануал содержит только основы работы с Docker Machine. Теперь вы можете создать необходимое количество удалённых хостов Docker и управлять ими.

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

Tags: , ,