Это руководство проведет вас через основные этапы развертывания и запуска защищенного реестра Docker в Digitalocean.
По своей сути реестр использует небезопасные HTTP-соединения. Из-за этого любой докер-демон отказывается извлекать образы из такого реестра если только вы не заставите его. Конечно, реестр поддерживает безопасное TLS-соединение, но вам придется готовить сертификаты вручную и не забывать обновлять их по истечении срока их действия. Это далеко не все, поэтому давайте автоматизируем это с помощью Traefik и Let’s Encrypt.
- Создайте дроплет на DigitalOcean (реферал). Самый простой способ — использовать Приложения в один клик под названием Docker 18.06.1~ce~3 18.04. Убедитесь, что вы выбрали дроплет с достаточным пространством. Процессор и память менее важны. Кроме того, убедитесь, что вы добавили свой SSH-ключ, он нам понадобится через минуту. Я предполагаю, что вы назвали каплю
docker-registry
. - Не забудьте настроить брандмауэр для ограничения доступа.
- Настройте сервер DSN для сопоставления запросов к вашему домену с вновь созданным IP-адресом дроплета. Я предполагаю, что доменное имя вашего реестра
registry.foobar.com
. - Инициализируйте кластер 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"
Код можно найти здесь.