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

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

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

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

Требования

  • Локальная машина CentOS 7.
  • Предварительно установленная система 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

Скопируйте и вставьте в файл следующий код:

export PS1='[\u@\h \W$(__docker_machine_ps1 " [%s]")]\$ '

Теперь имя активной машины будет отображаться в командной строке оболочки.

Сохраните и закройте файл.

Второй сценарий называется 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.

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 включено.

Если же завершение команд не работает, скорее всего, в системе отсутствует пакет bash-completion. Установите его:

sudo yum install bash-completion

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": "centos-7-0-x64",
"Region": "nyc3",
"SSHKeyID": 1912961,
"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://45.55.183.145:2376

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

docker-machine ip machine-name

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

docker-machine stop machine-name

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

docker-machine ls
NAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-docker                  8host   Timeout

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

docker-machine start machine-name

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

docker-machine ls
NAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-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
centos-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

Просмотрите список образов на удалённом хосте Docker:

docker images

В выводе команды кроме загруженных ранее образов должен быть и образ Nginx:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              3edcc5de5a79        14 minutes ago      182.7 MB
mariadb             latest              f7ef3a80dc89        2 days ago          382.2 MB
hello-world         latest              94df4f0ce8a4        3 days ago          967 B

Также вы можете просмотреть активные (запущенные) контейнеры:

docker ps

Если только что запущенный контейнер Nginx является единственным активным контейнером, вывод будет выглядеть так:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
c30e8c1bb03f        nginx               "nginx -g 'daemon off"   14 minutes ago      Up 14 minutes       443/tcp, 0.0.0.0:8080->80/tcp   httpserver

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

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.

Tags: , ,

Добавить комментарий