Если у вас медленный компьютер или вы почему-то не можете установить 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 г.