Как использовать удаленный Docker-сервер для ускорения вашего рабочего процесса

Вступление

Создание ресурсоемких образов и двоичных файлов - это очень медленный и длительный процесс, который иногда может превратить ваш ноутбук в обогреватель. Загрузка изображений 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.