Вступление
Создание ресурсоемких образов и двоичных файлов - это очень медленный и длительный процесс, который иногда может превратить ваш ноутбук в обогреватель. Загрузка изображений Docker на медленном соединении также занимает много времени. К счастью, эти проблемы легко исправить. Docker позволяет вам перенести все эти задачи на удаленный сервер, чтобы вашему локальному компьютеру не приходилось выполнять эту тяжелую работу.
Эта функция была введена в Docker 18.09. Это приносит поддержку для подключения к хосту Docker удаленно через SSH. Это требует очень небольшой настройки на клиенте и требует только обычный сервер Docker без какой-либо специальной конфигурации, работающей на удаленной машине. До Docker 18.09 вам приходилось использовать Docker Machine для создания удаленного сервера Docker, а затем настраивать локальную среду Docker для его использования. Этот новый метод устраняет эту дополнительную сложность.
В этом руководстве вы создадите каплю для размещения удаленного сервера Docker и настроите командуdocker
на локальном компьютере для ее использования.
Предпосылки
Чтобы следовать этому руководству, вам понадобится:
-
Учетная запись DigitalOcean. Вы можетеcreate an account, если у вас его еще нет.
-
Docker установлен на вашем локальном компьютере или сервере разработки. Если вы работаете с Ubuntu 18.04, выполните шаги 1 и 2How To Install and Use Docker on Ubuntu 18.04; в противном случае следуйтеofficial documentation для получения информации об установке в других операционных системах. Обязательно добавьте своего пользователя без полномочий root в группу
docker
, как описано в шаге 2 связанного руководства.
[[step-1 -–- created-the-docker-host]] == Шаг 1. Создание хоста Docker
Чтобы начать, раскрутите Droplet с приличной вычислительной мощностью. Оптимизированные для ЦП планы идеально подходят для этой цели, но стандартные работают также хорошо. Если вы будете собирать ресурсоемкие программы, планы CPU Optimized предоставляют выделенные ядра CPU, которые позволяют быстрее строить. В противном случае стандартные планы предлагают более сбалансированное соотношение ЦП и ОЗУ.
Docker One-click image позаботится обо всей настройке за нас. Follow this link, чтобы создать каплю, оптимизированную для ЦП, размером 16 ГБ / 8 ЦП с помощью Docker из панели управления.
Кроме того, вы можете использоватьdoctl
для создания капли из локальной командной строки. Чтобы установить его, следуйте инструкциям вdoctl README file on GitHub.
Следующая команда создает новую оптимизированную для ЦП каплю 16 ГБ / 8 В в области FRA1 на основе изображения одним щелчком Docker:
doctl compute droplet create docker-host \
--image docker-18-04 \
--region fra1 \
--size c-8 \
--wait \
--ssh-keys $(doctl compute ssh-key list --format ID --no-header | sed 's/$/,/' | tr -d '\n' | sed 's/,$//')
Командаdoctl
использует значениеssh-keys
, чтобы указать, какие ключи SSH следует применить к вашей новой капле. Мы используем подоболочку для вызоваdoctl compute ssh-key-list
для получения ключей SSH, связанных с вашей учетной записью DigitalOcean, а затем анализируем результаты с помощью командsed
иtr
для форматирования данных в правильном формате. Эта команда включает все ключи SSH вашей учетной записи, но вы можете заменить выделенную подкоманду отпечатком любого ключа, который у вас есть в вашей учетной записи.
Как только дроплет создан, вы увидите его IP-адрес среди других деталей:
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags Features Volumes
148681562 docker-host your_server_ip 16384 8 100 fra1 Ubuntu Docker 5:18.09.6~3 on 18.04 active
Вы можете узнать больше об использовании командыdoctl
в руководствеHow To Use doctl, the Official DigitalOcean Command-Line Client.
Когда дроплет будет создан, у вас будет готовый к использованию сервер Docker. В целях безопасности создайте пользователя Linux для использования вместоroot.
Сначала подключитесь к Droplet с помощью SSH как пользовательroot:
ssh root@your_server_ip
После подключения добавьте нового пользователя. Эта команда добавляет один с именемsammy:
adduser sammy
Затем добавьте пользователя в группуdocker, чтобы дать ему разрешение на запуск команд на хосте Docker.
sudo usermod -aG docker sammy
Наконец, выйдите с удаленного сервера, набравexit
.
Теперь, когда сервер готов, давайте настроим локальную командуdocker
для его использования.
[[step-2 -–- configuring-docker-to-use-the-remote-host]] == Шаг 2. Настройка Docker для использования удаленного хоста
Чтобы использовать удаленный хост в качестве хоста Docker вместо локального компьютера, установите переменную средыDOCKER_HOST
так, чтобы она указывала на удаленный хост. Эта переменная будет указывать клиенту Docker CLI подключаться к удаленному серверу.
export DOCKER_HOST=ssh://sammy@your_server_ip
Теперь любая команда Docker, которую вы запускаете, будет выполняться на Droplet. Например, если вы запустите контейнер веб-сервера и откроете порт, он будет работать на дроплете и будет доступен через порт, указанный на IP-адресе дроплета.
Чтобы убедиться, что вы получаете доступ к Droplet в качестве хоста Docker, запуститеdocker info
.
docker info
Вы увидите имя хоста вашего Droplet в полеName
следующим образом:
Output…
Name: docker-host
…
Следует иметь в виду, что когда вы запускаете командуdocker build
, контекст сборки (все файлы и папки, доступные изDockerfile
) будут отправлены на хост, а затем будет запущен процесс сборки. В зависимости от размера контекста сборки и количества файлов, это может занять больше времени по сравнению со сборкой образа на локальном компьютере. Одним из решений будет создание нового каталога, предназначенного для образа Docker, и копирование или связывание только тех файлов, которые будут использоваться в образе, чтобы непреднамеренно не загружать ненужные файлы.
После того как вы установили переменнуюDOCKER_HOST
с помощьюexport
, ее значение будет сохраняться на протяжении всего сеанса оболочки. Если вам потребуется снова использовать локальный сервер Docker, вы можете очистить переменную, используя следующую команду:
unset DOCKER_HOST
Заключение
Вы создали удаленный хост Docker и подключились к нему локально. В следующий раз, когда батарея вашего ноутбука разрядится или вам понадобится создать тяжелый образ Docker, используйте ваш блестящий удаленный сервер Docker вместо локального компьютера.
Вам также может быть интересно узнатьhow to optimize Docker images for production илиhow to optimize them specifically for Kubernetes.