Это руководство проведет вас через основные этапы развертывания и запуска защищенного реестра Docker в Digitalocean.

По своей сути реестр использует небезопасные HTTP-соединения. Из-за этого любой докер-демон отказывается извлекать образы из такого реестра если только вы не заставите его. Конечно, реестр поддерживает безопасное TLS-соединение, но вам придется готовить сертификаты вручную и не забывать обновлять их по истечении срока их действия. Это далеко не все, поэтому давайте автоматизируем это с помощью Traefik и Let’s Encrypt.

  1. Создайте дроплет на DigitalOcean (реферал). Самый простой способ — использовать Приложения в один клик под названием Docker 18.06.1~ce~3 18.04. Убедитесь, что вы выбрали дроплет с достаточным пространством. Процессор и память менее важны. Кроме того, убедитесь, что вы добавили свой SSH-ключ, он нам понадобится через минуту. Я предполагаю, что вы назвали каплю docker-registry .
  2. Не забудьте настроить брандмауэр для ограничения доступа.
  3. Настройте сервер DSN для сопоставления запросов к вашему домену с вновь созданным IP-адресом дроплета. Я предполагаю, что доменное имя вашего реестра registry.foobar.com.
  4. Инициализируйте кластер Swarm. Как только капля запущена, откройте терминал и подключитесь к ней по ssh. Затем запустите команду инициализации роя:
$ ssh [email protected] # or ssh root@your_droplet_ip
$ docker swarm init --advertise-addr=your_droplet_ip

5. Создайте файл docker-compose на локальном компьютере:

6. Теперь создайте файлtraefik.toml в том же каталоге:

7. Создайте скрипт deploy.sh:

#!/usr/bin/env bash 
scp "docker-compose.yml" "[email protected]:/docker-compose.yml"
scp "traefik.toml" "[email protected]:/traefik.toml"
ssh "[email protected]" "docker stack deploy --compose-file /docker-compose.yml foobar_registry"

Сделайте скрипт исполняемым:

chmod u+x deploy.sh

8. Разверните реестр, запустив ./deploy.sh

9. Проверьте это. Откройте ссылку https://registry.foobar.com/v2/_catalog в браузере.

Теперь вы можете создавать и отправлять свои образы в реестр:

docker build --tag "registry.foobar.com/foobar/app:latest" .
docker push "registry.foobar.com/foobar/app:latest"

Код можно найти здесь.