Если у вас медленный компьютер или вы почему-то не можете установить Docker с помощью официального установщика Docker Desktop, вы можете использовать свой Raspberry Pi (или любой другой сервер, который у вас есть) в качестве выделенного сервера Docker.

Недавно у меня возникла проблема, заключающаяся в том, что я не мог установить Docker Desktop на мою виртуальную машину, которая работала на моем сервере Unraid. Проблема в том, что на процессорах Ryzen вложенная виртуализация (пока) не поддерживается в используемой мной ОС. Вложенная виртуализация означает, что вы можете запустить виртуальную машину внутри виртуальной машины.

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

Ответ на это был docker-machine.

Что такое докер-машина?

docker-machine - это программа CLI от Docker, которая позволяет вам использовать docker как обычно, но вместо этого выполнять команды на сервере. Это полезно, если у вас есть несколько серверов, на которых работает докер, и вы можете контролировать их все, просто изменив среду докера с помощью одной команды docker-machine env YOUR_ENV.

Если у вас не установлен docker-machine, попробуйте установить его с помощью диспетчера пакетов вашей ОС или загрузите его с GitHub.

На macOS вы можете установить его вот так из brew:

brew install docker-machine

Даже если вы не можете установить Docker Desktop, вы все равно сможете загрузить docker CLI, он вам понадобится.

Подготовка нашего сервера

Прежде чем использовать docker-machine, нам нужно сначала настроить сервер.

Я бы порекомендовал создать нового пользователя, который будет использоваться для входа с docker-machine.

adduser docker-machine

Затем нам нужно разрешить новому пользователю выполнять команды с sudo, но с добавлением того, что пользователь может использовать его, не вводя свой пароль. Это может представлять угрозу безопасности, поэтому убедитесь, что пароль пользователя docker-machine надежен, а ваш сервер надежно защищен.

Отредактируйте файл sudoers, написав visudo в вашем терминале и добавив новую строку после записи для root.

docker-machine ALL=(ALL) NOPASSWD: ALL

Сохраните и выйдите из редактора.

Общий драйвер docker-machine не распознает raspbian ОС, поэтому нам нужно обмануть его, временно изменив поле ID в /etc/os-release на debian.

#/etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Наконец, вам нужно будет настроить аутентификацию с открытым ключом на вашем сервере с пользователем docker-machine. Я задокументировал процесс того, как это сделать, в другой статье. Прокрутите вниз до раздела Пропускать пароли с аутентификацией с открытым ключом и следуйте инструкциям по его настройке.

Теперь ваш сервер должен быть готов к установке докера с использованием docker-machine.

Установите докер на свой сервер с помощью докер-машины

Теперь, когда на вашем компьютере установлен интерфейс командной строки docker-machine, мы можем использовать его для установки docker на сервер с помощью всего одной команды.

docker-machine create \
  --driver generic \
  --generic-ip-address=192.168.1.13 \
  --generic-ssh-user=docker-machine \
  --generic-ssh-key ~/.ssh/id_rsa \
  rpi
Running pre-create checks...
Creating machine...
(rpi) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with debian...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env rpi

Вот и все, на вашем сервере должен быть установлен докер!

Измените среду докеров с помощью docker-machine

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

eval $(docker-machine env rpi)

Если вы всегда хотите использовать серверную среду, поместите строку в свой .bashrc или .zshrc файл.

Начать использовать Docker

После изменения среды с помощью docker-machine вы можете использовать docker так же, как обычно!

docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Полезные команды docker-machine

  • docker-machine ls - перечислить все среды
  • docker-machine rm ENV - удаляет существующее окружение
  • docker-machine ip ENV - получить IP-адрес сервера
  • docker-machine ssh ENV - открыть SSH-соединение с сервером

Заключение

docker-machine - отличный инструмент, его очень легко настроить и использовать. Мне этот подход очень интересен. На данный момент настройка работает достаточно хорошо, и я не заметил в ней никаких недостатков.

Единственное отличие состоит в том, что мне придется использовать IP-адрес моего сервера вместо localhost, если я хочу получить доступ к службам, работающим на докере.

Первоначально опубликовано на https://phiilu.com 7 января 2021 г.