Создание персонального приватного реестра образов Docker Registry. Создание поддомена и виртуальной машины. Подключение сторонних хранилищ.
- 00:00:56 Реестр DockerHub
- 00:02:51 Обзор документации
- 00:07:38 Создание реестра
- 00:09:02 Сборка и push образов
- 00:12:04 Аутентификация
- 00:13:32 Добавление Nginx proxy
- 00:16:21 Фиксация девелоперского htpasswd
- 00:17:51 Прокси с Let's Encrypt для рабочего сервера
- 00:19:20 Команда деплоя на production
- 00:21:48 Настройка виртуальной машины с Ansible
- 00:25:05 Создание виртуальной машины
- 00:27:24 Деплой на готовый сервер
- 00:30:42 Push в рабочий репозиторий
- 00:32:10 Контроль места на диске
- 00:33:15 Garbage collector
- 00:36:11 Подключение сторонних хранилищ
Скрытый контент (код, слайды, ...) для подписчиков.
Открыть →Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
Спасибо
Спасибо, замечательный урок.
а Lets Encrypt здесь, в Docker регистре, это то же самое, как, напр., у Nginx gateway/docker/production/nginx/conf.d/frontend.conf?
Да, всё то же самое.
Очень полезный урок. В начале бы курса, но и сейчас хорошо.
И всё же это вариант с отдельной виртуалкой для реестра? Если пытаться поднять этот проект на уже занятой виртуалке, то пишет что порт 443 уже занят. Естественно, ведь там уже gateway есть. Добился что можно менять проекты на одной виртуалке с одинаковым gateway с настроенным доступом к реестру. Использую один реестр на всё про всё с помощью volumes: registry: name: registryname. После пуша и деплоя другого проекта реестр продолжает работать.
Хотя сейчас понял, что можно не задавать жестко имя реестра, а пользоваться одинаковым COMPOSE_PROJECT_NAME
В этом случае registry можно поднять на любом другом порту и указывать везде его поддомен с этим портом.
Может мы о разном? я про то что сервис nginx из этого проекта не может подняться поскольку gateway из другого уже занимает порты 80 и 443. Или я не понял.
В nginx реестра убираем порт 80 и меняем 443 на 5443. И работаем с
registry.xxx:5443
.Понял, спасибо!
удалить всю эту часть?
в docker\production\nginx\conf.d\registry.conf
а как тогда ssl?
Да, либо удалить этот блок с
listen 80;
и оставитьlisten 5443 ssl;
, либо поменять порты вdocker-compose-production,yml
:понял, спасибо.
заработало, registry.demo-auction.arsku.com:5443/v2/_catalog , но не могу попасть - пароль почему-то не верный...
у Вас пароль password или htpasswd?
наконец вошел - оказывается, в пароль не можно знак $
Приветсвую.
Так же на одном сервере лежит и проект и реестр. Доступ к реестру по другому IP.
Реестр поднят и работает. При деплое проекта через реестр так же получил ошибку порт 443 уже занят. Используя вашу рекомендацию, заменил в docker-compose-production,yml:
Пересобрал и залил реестр. Сайт реестра работает, адрес через порт 5443.
docker login
авторизируется.Но при деплое проекта:
Деплой командой:
PS: хосты и IP изменены на несуществующие
Нужно выполнить docker login и на самом продакшен-сервере.
Точно... завтыкал что-то... И надо в docker-compose-production.yml полностью удалит порт 80, иначе с ним будет конфликт. Оставить:
Дмитрий, извиняюсь, а вы не могли бы уточнить, зачем нам эти реестры и прочее если на локальной машине все есть, разве не проще грузить на виртуалку наш проект и запустить уже там докер по нашему прод файлу, предварительно поставив то что надо ансамблем? А надо там только докер как я понял, извиняюсь если не внимательно слушал, но этот момент не смог понять что-то. Или это делается для того, что бы не качались официальные образы, которые могут резко измениться и что то нам сломать в самый неподходящий момент? Если это так, то разве нельзя грузить из официального реестра строго определенный образ, который мы точно знаем что работает?
Так можно в примитивном случае сделать с проектами на PHP, так как не нужно что-то компилировать.
Но если мы запустим docker-compose build в проекте на NodeJS или Java, то на слабой одноядерной виртуалке оно будет собираться десять минут со 100% нагрузкой. Если запускаем на кластере из нескольких виртуалок, то так весь кластер "ляжет".
Поэтому при работе с Docker предполагается, что мы собираем образ-архив с готовым скомпилированным кодом у себя на сборочном компьютере. И через реестр закидываем уже собранные образы на свои виртуалки и мгновенно там запускаем.
Спасибо, за исчерпывающий ответ, но конечно всё равно хотелось бы рассмотреть и такой вариант в курсе, если есть такая возможность конечно, клонирование проекта может помочь если надо что то быстро поменять на проде, а на пример с реестром что то случилось и быстро разобраться не получается.
Если в проекте автодеплой, то вручную на прод обычно вообще никто не ходит. Если что-то сломалось, то либо запускают откат, либо сразу коммитят исправление и запускают следующий деплой.
Ясно, спасибо.
auction в Dev реж. поднялся хорошо - работало localhost/8080, 8081, 8082.
Но после
docker-compose run --rm api-php-cli composer update
не поднялся 8081 (api):
Fatal error: Access level to App\ErrorHandler\LogErrorHandler::$logger must be protected (as in class Slim\Handlers\ErrorHandler) or weaker in /app/src/ErrorHandler/LogErrorHandler.php on line 15
Да, так как в новой версии Slim в ErrorHandler добавили свой
protected $logger
.спасибо за ответ.
что это за параметр в docker-compose-production.yml: SENTRY_DSN: ${SENTRY_DSN} ?
Ключ для подключения сервиса Sentry из 24-го эпизода.
Спасибо за урок! Очень полезно. Сделайте еще по sentry.
Про его установку себе через Docker?
Да да, не облачное решение, а поднятии своего с использованием докера
Поддержу, всегда приятнее иметь такую вещь у себя и не зависеть от внешних источников, а то мало ли, возьму и уберут бесплатный тариф вообще или РКН адресом ошибется и все посыпется, а так на одном образе можно разные проекты держать и не париться.
Почему-то после docker run --rm registry:2 htpasswd -Bbn registry password > htpasswd
Ошибка write /dev/stdout: permission denied
Может с убунтой что не так, подскажите пожалуйста линуксоводы
Понял в чем ошибка, она возникает при работе через терминал шторма. Решение - все команды вводил через родную консоль убунты - все отработало , без ошибок доступов. Может как шторм надо в убунте поднастроить незнаю, чтоб робить нормально через его консоль.
После ввода команды docker run --rm registry:2 htpasswd -Bbn registry password > htpasswd пишет, что htpasswd не найдено. А когда используется nginx, то вовсе создает пустую папку вместо файла. Но аутентификация работает, правда я не знаю ни логина, ни пароля. Вроде делал то же самое.
А просто команда
docker run --rm registry:2 htpasswd -Bbn registry password
хэш генерирует?Тот же результат. /entrypoint.sh: exec: line 10: htpasswd: not found Решил проблему только установкой apache-utils и команда в итоге чуть другая. Может из-за этого у меня не пулятся образы с реестра при деплое с основного проекта. Я эту проблему описал в комментарии к 5-му уроку.
Удалили в последней версии. Используйте
registry:2.6
вместоregistry:2
Так заработало. Спасибо.
Дмитрий, какие посоветуете UI для докер репозитория?
Любой.
Подскажите Dockrer начал выдавать ошибки при сборке - net/http: TLS handshake timeout. Причем то на один пакет ругается то на другой. В чем может быть проблема? Конфигурацию не менял.
Да, тоже бывает иногда. Проблема на сервере Docker.
Почему у вас не возникла эта ошибка?
Решение:
-- для локального запуска
А так :
Всё хорошо, но во всем проекте, мне не нравится, то что имена хостов разбросаны по конфигам.
Интересно решается ли это чем-то кроме как:
Материал классный.
Спасибо.
Все эти параметры можно переопределять через секцию
vars
прямо в файлеhosts.yml
А почему команда
может выдавать ошибку, что файл не найден? /entrypoint.sh: exec: line 10: htpasswd: not found
Понятно, что он не с генерировался, но почему и как исправить?
Уже ответил Ярославу выше.
Ваш ответ Ярославу к сожалению не заметил. Не дочитал. Но решил проблему сам, тем же способом, случайно.
Могу добавить, что если меняю на
то файл генерируется, вроде make init выполняется, но при этом авторизация не появляется
У меня теперь другая проблема. Вроде все деплоится, но страница реестра не открывается. Мои последние строки отчета выполнения слегка отличаются от ваших
перед тем как ты поднимаешь контейнеры нужно их опустить посмотри на команду deploy в репозитории deworker: https://github.com/DeworkerPro/demo-auction-registry/blob/95154c7f2108b4a52e48a6db5a7507583483fbdf/Makefile#L20
Кстати, при попытке запушить в такой ситуации выдает
а я никак не могу найти что значит этот Realm, зачем его передавать через переменные окружения и что он делает вообще? и почему в переменной окружения вы указывали Realm, а в nginx Registry Realm
и еще, вы какой-то плагин используете для nginx, чтобы синтаксис так грамотно подсвечивало или как? а то я качал плагины они как-то криво это делают.
При использовании Basic-аутентификации в браузере это сообщение из Realm просто выводится в диалоговом окне ввода логина и пароля. То есть там можно вписать любой текст.
спасибо
Вроде плагина с именем Nginx у себя не нашёл. Может он так подсвечивает сам по себе цветами основной темы.
Дмитрий, добрый день! Вопрос по смене порта ssh на 517 (в вашем случае). Как его правильно менять - вручную на самом сервере реестра, или через добавление роли для ansible?
В моём случае я менял вручную файл
/etc/ssh/sshd_config
в виртуалке.Ясно. Спасибо!
Ошибка установки зависимостей:
Если ошибка при повторном запуске, то попробуйте зайти на сервер вручную по ssh и запустить:
Возможно, что эта команда что-нибудь спросит и нужно будет ответить
yes
.Доброй ночи, Дмитирй.
Подскажите, почему возникает такая "ошибка" при выполнении make docker-build?
Когда удаляю make init тоже самое в консоли пишется.
Это не ошибка.
Это сообщение, что сервисы используют готовые образы с DockerHub и их он не будет билдить.
Доброго времени суток! Подскажите, почему может происходить следующие ситуации:
Все заработало и реест справился, но теперь при выполнении
Получаю вот такой набор ошибок:
Хотя команда docker login нормально отрабатывает
Порт указывается в виртуальной машине в файле
/etc/ssh/sshd_config
. Если там не меняли, то по умолчанию будет 22.Такая ошибка бывает когда сервер не запустился.
Нужно зайти на сервер и посмотреть
docker-compose logs
супер
Здравствуйте еще раз! Сейчас возникла такая проблема, что при попытке выполнить заново команду deploy, как будто происходит подмена сертификатов на домене registry и сертификат с поддомена registry по итогу ссылается на домен api - из-за этого ломается pull образов. Можно ли как то поправить эту проблему?
Не встречал, так что не подскажу.
Здравствуйте, Дмитрий! Скажите, пожалуйста, почему вы разделили provisioning сайта и реестра? Просто как бы и реестр и сайт относятся к одному проекту. Можно ли было оформить все отдельной ролью в одном provisioning или такой подход плох?
Если проект всего один, то можно объединить, если так удобнее. Но со временем у компании может появиться несколько проектов. Тогда целесообразно Jenkins и реестр вынести отдельно.
Здравствуйте!
сменил порт на 5443
задеплоил реестр на поддомен командой:
HOST=deploy@176.119.147.91 PORT=22 HTPASSWD_FILE=htpasswd make deploy
ошибок не получил.
Вывод в консоли: http://joxi.ru/Q2KRvQ7iO5zQkm
Перехожу по ссылке https://registry.tagzilla.ru:5443/v2/ Вижу ошибку "Не удается получить доступ к сайту" http://joxi.ru/L21KVobiwPXB4r
Не могу разобраться что не так сделал.
Вывод docker ps http://joxi.ru/4Ak7jqeFjvx9XA
Вывод docker logs registry_nginx_1 http://joxi.ru/Dr8XVMECKQV1Dr
Вывод docker logs registry_registry_1 http://joxi.ru/LmGLvMDtBqy8K2
Вывод netstat -tulpn http://joxi.ru/J2bRjqliqd8JW2
Может есть какие мысли куда посмотреть?
Весьма странно. А на хостинге или в виртуалке никто порт 5443 не блокирует?
Ну просто отличный материал. Я в восхищении!
Или войти через: