что такое docker registry
Делаем свой Dockerhub или что такое docker registry
Если вы собираете свои контейнеры (образы) Docker, то наверняка их где то размещаете, а раз читаете эту статью, то размещаете скорее всего на dockerhub. Проблема такого способа в том, что в бесплатной версии есть ограничения, да и все ваши образы видны всему интернету. А вдруг вы захотите спрятать что то ценное в контейнер и не захотите этим делиться? Тогда на помощь нам приходит docker registry.
Registry
Docker registry это обычный docker контейнер, который выполняет роль репозитория. Это дает нам возможность поднять репозиторий для docker образов, который можно разместить где угодно, привязать доменное именное, сертификат, ограничить доступ к серверу и другие плюшки, которые только сможете придумать.
Конечно чтобы доступ был откуда угодно желательно на сервере (или компьютере) иметь статичный адрес. Можно конечно это все обойти, соединив например компьютеры при помощи VPN сетей, но это уже другая история.
Установка registry
Установка проще быть не может. Лезем в официальную документацию по Docker и находим там статью по docker registry.
У нас происходит запуск контейнера в фоновом режиме с прокинутым портом 5000 на хост и 5000 внутри контейнера. Контейнер называется registry и использует образ registry:2.
Вроде все легко и просто. Registry можно поднять так же и через docker-compose, и через docker swarm. Разницы в способе запуска нет, это всего лишь контейнер.
Docker daemon.json
У нас нет сертификатов, а может и есть, но мы их еще не прикручивали к нашему контейнеру ( а точнее серверу), из-за чего обращение к нашему репозиторию будет происходит без шифрования, подписей и др., т.е по HTTP. Из-за этого docker будет ругаться, т.к он работает только по HTTPS.
Чтобы поставить заглушечку нам нужно создать файл /etc/docker/daemon.json (если такого еще нет) и добавить туда строчку:
IP и PORT меняем наши (вместо IP можно указать доменное имя). Перезапускаем docker:
И вот теперь можно приступить к работе с нашим репозиторием.
Небольшое примечание.
Такую операцию придется делать на каждом хосте, где вы захотите скачать образ из вашего репозитория (docker registry). Все это до тех пор, пока не прикрутите сертификат для HTTPS.
Docker push
Время для самого сладкого — заливки образа в наш приватный репозиторий.
Давайте скачаем какой нибудь образ, чтобы пока не заморачиваться со сборкой своего. Пусть это будет например созданный мной образ для основы контейнеров с криптокошельками:
Образ у нас в системе, теперь нужно дать ему метку:
Мы говорим докеру на какой образ вешать метку и как он будет называться далее. IP адрес и порт указываем нашего регистри (репозитория). Т.е мы говорим докеру, чтобы он залил образ по такому адрес:порт под названием base_our.
Осталось все это дело только запушить:
И вуаля — наш docker образ залился в созданный нами приватный репозиторий.
Теперь чтобы скачать это чудо с другой машинки. Нам нужно всего лишь выполнить:
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Настройка частного реестра Docker в Ubuntu 18.04
Published on January 7, 2020
Автор выбрал фонд Apache Software Foundation для получения пожертвования в рамках программы Write for DOnations.
Введение
Реестр Docker — это приложение, управляющее хранением и доставкой образов контейнеров Docker. Реестры централизуют образы контейнеров и помогают разработчикам сократить время сборки. Образы Docker гарантируют единство среды исполнения за счет виртуализации однако для создания образа может потребоваться много времени. Например, вместо отдельной установки зависимостей и пакетов для использования Docker, разработчики могут загрузить из реестра сжатый образ, содержащий все необходимые компоненты. Более того, разработчики могут автоматизировать отправку образов в реестр с помощью TravisCI или других средств непрерывной интеграции, позволяющих мгновенно обновлять образы во время разработки и использования проекта в производстве.
Бесплатный публичный реестр Docker Hub позволяет храить персонализированные образы Docker, но в некоторых случаях вы можете не захотеть делать свой образ общедоступным. Образы обычно содержат весь необходимый для запуска приложения код, поэтому при работе с коммерческим программным обеспечением предпочтительно использовать частный реестр.
В этом обучающем модуле вы научитесь настраивать и защищать собственный частный реестр Docker. Вы научитесь использовать Docker Compose для определения конфигуарций запуска приложений Docker, а также Nginx для перенаправления серверного трафика с HTTPS в работающий контейнер Docker. После прохождения этого обучающего модуля вы научитесь размещать свои персональные образы Docker в собственном частном реестре и безопасно извлекать образы с удаленного сервера.
Предварительные требования
Для прохождения этого обучающего модуля вам потребуется следующее:
Шаг 1 — Установка и настройка реестра Docker
Инструмент командной строки Docker подойдет для запуска и управления одним или двумя контейнерами Docker, но для полноценного развертывания большинства приложений, запущенных внутри контейнеров Docker, необходимо, чтобы параллельно работали и другие компоненты. Например, многие приложения включают Nginx или другой веб-сервер, обслуживающий код приложения, а также PHP или другой язык интерпретации скриптов и MySQL или другой сервер СУБД.
Реестр Docker сам по себе является приложением с несколькими компонентами, и поэтому вы будете использовать Docker Compose для управления его конфигурацией. Чтобы запустить экземпляр реестра, вам нужно задать в файле docker-compose.yml место, где ваш реестр будет хранить свои данные.
Используйте текстовый редактор для создания файла конфигурации docker-compose.yml :
Добавьте в файл следующие строки, описывающие базовую конфигурацию реестра Docker:
/docker-registry/data на сервере реестра.
Раздел ports с конфигурацией 5000:5000 предписывает Docker сопоставить порт 5000 на сервере с портом 5000 запущенного контейнера. Это позволяет отправить запрос на порт 5000 на сервере так, чтобы этот запрос был перенаправлен в приложение реестра.
Теперь вы можете запустить Docker Compose для проверки настройки:
В результатах вы увидите панели загрузки, показывающие, что Docker загружает образ реестра Docker из собственного реестра Docker. Через одну или две минуты вы увидите примерно следующее (номера версий могут отличаться):
С предупреждающим сообщением No HTTP secret provided мы разберемся в этом же обучающем модуле, но чуть позднее. Экран результатов показывает, что контейнер запускается. Последняя строка результатов показывает, что прослушивание порта 5000 началось успешно.
Шаг 2 — Настройка перенаправления портов Nginx
На предварительном этапе «Защита Nginx с помощью Let’s Encrypt» вы уже создали и настроили файл /etc/nginx/sites-available/ example.com с конфигурацией вашего сервера.
Откройте этот файл в предпочитаемом текстовом редакторе:
Сохраните и закройте файл. Перезапустите Nginx для активации изменений:
Для подтверждения перенаправления трафика Nginx на порт 5000 запустите реестр:
Откройте в окне браузера следующий url:
Вы увидите пустой объект JSON или:
Вы увидите на терминале следующий экран результатов:
Теперь вы успешно настроили переадресацию портов и можете перейти к дальнейшему повышению безопасности вашего реестра.
Шаг 3 — Настройка аутентификации
Теперь веб-сервер Nginx правильно перенаправляет запросы, и вы можете защитить свой реестр Docker системой аутентификации HTTP, чтобы контролировать доступ к нему. Для этого вам потребуется создать файл аутентификации с помощью htpasswd и добавить в него пользователей. Аутентификация HTTP быстро настраивается и обеспечивает безопасность, если использовать соединение HTTPS, как в случае нашего реестра.
Для установки пакета htpasswd запустите следующую команду:
Теперь вы можете убедиться в нормальной работе аутентификации, попробовав запустить реестр и проверив, запрашивает ли система имя пользователя и пароль.
Шаг 4 — Запуск реестра Docker как службы
Вам нужно, чтобы реестр запускался каждый раз во время загрузки вашей системы. В случае непредвиденного сбоя системы вам нужно сделать так, чтобы реестр перезапускался при перезагрузке сервера. Откройте файл docker-compose.yml :
Добавьте следующую строку в раздел registry: :
Вы можете запускать реестр как фоновый процесс, и тогда вы сможете выходить из сеанса ssh с сохранением процесса:
Теперь реестр работает в фоновом режиме, и вы можете подготовить Nginx к выгрузке файлов.
Шаг 5 — Увеличение размера выгрузки файлов для Nginx
Найдите раздел http и добавьте в него следующую строку:
Перезапустите Nginx, чтобы применить изменения конфигурации:
Теперь вы можете выгружать большие файлы образов в реестр Docker, не получая сообщения об ошибках Nginx.
Шаг 6 — Публикация в частном реестре Docker
Теперь вы готовы к публикации образов в частном реестре Docker, но вначале вам потребуется создать образ. Для целей этого обучающего модуля мы создадим простой образ на базе образа ubuntu из Docker Hub. Docker Hub — это публичный реестр с множеством настроенных образов, которые можно использовать для быстрой контейнеризации приложений с помощью Docker. С помощью образа ubuntu вы протестируете отправку образов в реестр и их извлечение из реестра.
Выход из контейнера Docker:
Следующая команда создает новый образ под названием test-image на основе уже запущенного образа и всех внесенных изменений. В нашем случае добавление файла /SUCCESS включается в новый образ.
Сейчас образ существует только на локальном компьютере. Теперь вы можете отправить его в новый реестр, который вы создали. Войдите в свой реестр Docker:
Введите username и соответствующий пароль, заданный ранее. Затем поставьте для образа метку расположения частного реестра, чтобы отправить туда образ:
Отправьте образ с меткой в реестр:
Экран результатов должен выглядеть примерно следующим образом:
Вы убедились, что ваш реестр успешно выполняет аутентификацию пользователей, и что прошедшие аутентификацию пользователи могут отправлять образы в реестр. Теперь вы должны убедиться, что вы можете извлекать образы из реестра.
Шаг 7 — Извлечение образов из частного реестра Docker
Вернитесь на сервер реестра, чтобы вы могли протестировать извлечение образа с клиентского сервера. Также для тестирования можно использовать третий сервер.
Войдите в систему, указав имя пользователя и пароль, которые вы задали ранее:
Теперь вы готовы к извлечению образа. Используйте доменное имя и имя образа, к которому вы добавили метку на предыдущем шаге:
Docker загрузит образ и вернется в командную строку. Если вы запустите образ на сервере реестра, вы увидите, что ранее созданный файл SUCCESS находится в этом образе:
Выведите список файлов в оболочке bash:
Вы завершили настройку защищенного реестра для отправки и получения образов.
Заключение
В этом обучающем модуле вы настроили собственный частный реестр Docker и опубликовали образ Docker. Как указывалось во введении, вы также можете использовать TravisCI или другой подобный инструмент CI для автоматизации прямой отправки образов в частный реестр. Используя Docker и реестры в своем рабочем процессе, вы можете убедиться, что образ с кодом будет вести себя одинаково на любом компьютере в производственной среде или в среде разработки. Дополнительную информацию о написании файлов Docker можно найти в следующем обучающем модуле по Docker, где разъясняется данная процедура.
Docker Registry для GitLab
Конфигурация
Настройка GitLab Registry
Добавляем nginx reverse proxy
Для удобства (в дальнейшем при настройке Pages нам еще очень пригодится nginx reverse proxy) поднимем reverse proxy, который спрячет GitLab с его родным nginx. Переводить полностью GitLab на сторонний nginx в целом не имеет смысла, так как тогда конфигурация усложняется и при обновлениях GitLab могут быть проблемы.
Конфигурация GitLab
Конфигурация nginx
Допустим, nginx у нас уже установлен. На Centos так же необходимо было закомментировать секцию с приветственной страницей nginx в файле и указать в include директорию с конфигурациями сайтов (или определенную конфигурацию).
Теперь GitLab работает как и прежде, но проксируется.
Добавление Docker Registry
Конфигурация GitLab
Изменим уже известный нам конфигурационный файл.
Конфигурация nginx
Добавим новые части конфигурации в конфиг nginx.
Docker Registry
. warning Стоит так же с помощью фаервола изолировать лишние запросы к Registry, хотя без обращения к серверу, на котором у нас reverse proxy, Registry будет ругаться на то что наш запрос с HTTPS, а клиент HTTP.
Официальная документация
. note «Подсказки так же на странице репозитория в разделе Registry»
Copyright © 2017 Александр Пинегин aka Bloody Foxy
Быстрый запуск и использование своего открытого docker-registry
Docker – это программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации (см. Википедию).
Подробные инструкции по установке есть на официальном сайте: https://docs.docker.com/engine/installation/
Если вы читаете эту статью, то вероятно уже знакомы с докером и готовы сделать следующий шаг — поднять свой собственный регистр для удобной доставки приложений на продакшен-сервера.
Когда я начал делать новый проект — решил попробовать использовать докер. Получилось четыре контейнера, которые надо как-то доставлять на сервер. Далее последует рассказ о том, что у меня из этого получилось.
Что имеется на входе:
Другой вариант использования регистра — поднятие собственного.
Докер предоставляет официальный образ с сервером регистра, кроме того есть документация с инструкциями по запуску.
Регистр докера способен работать как по http, так и по https. При использовании защищённого соединения возможна так же авторизация отдельных пользователей. Но нужен сертификат, который можно купить только для доменного имени. Самоподписанный сертификат у меня так и не получилось заставить работать (читал в интернетах, что с этим есть проблемы). Ввиду того, что у меня нет доменного имени — мы рассмотрим открытый регистр с доступом по http. Это значит, что если кто-то узнает адрес вашего регистра — он сможет свободно им пользоваться.
Запуск регистра
Настройка на сервере
Регистр представляет из себя докер-контейнер, который запускается одной командой:
Готово, но для того, чтобы клиент докера на этом сервере мог обращаться к регистру по открытом соединению без авторизации — нужно добавить строчку в конфигурационный файл /etc/default/docker:
После чего нужно перезапустить докер:
Настройки на клиенте
У меня на компьютере для работы докера используется система виртуализации VirtualBox, в которой запускается boot2docker (минимальный образ Linux с докером), который в свою очередь работает с контейнерами. Виртуальных машин, работающих под VirtualBox на компьютере может быть несколько, для управления ими используется docker-machine.
Для того, чтобы можно было обращаться к регистру по открытому соединению без авторизации — нужно добавить опцию в конфигурационный файл, который лежит внутри виртуальной машины, под которой работают контейнеры.
Посмотрим список виртуальных машин:
Подключимся к нашей виртуальной машине:
В ней есть файл /var/lib/boot2docker/profile, в котором присутствует такой фрагмент:
Открываем его на редактирование с sudo, чтобы получилось так:
Использование регистра
Формирование и отправка образа с рабочего компьютера
Представим, что у вас в текущей директории уже есть Dockerfile и мы можем просто собрать новый образ с именем my-image:
Теперь можно добавить образу тег и отправить его в регистр:
Получение образа на сервере
Сейчас образ в регистре, мы можем получить его на сервере и запустить:
Изучаем Docker, часть 2: термины и концепции
В первой части перевода серии материалов, посвящённых Docker, мы сделали общий обзор этой системы. В частности, мы говорили о том, почему технологии контейнеризации важны в наше время, о том, что такое контейнеры Docker, и о том, с чем их можно сравнить. Сегодня мы поговорим об экосистеме Docker и рассмотрим важные термины, с которыми вы можете столкнуться на пути изучения и использования Docker. Продолжив аналогию с разными вкусностями, представим, что наши термины — это пончики. Дюжина пончиков.
Термины экосистемы Docker
Я разбил термины, с которыми вы можете столкнуться в ходе работы с Docker, на две части. Думаю, это облегчит их запоминание. Первый блок терминов будет относиться к механизмам Docker. Второй — к средствам масштабирования решений, основанных на контейнерах.
Механизмы Docker
▍Платформа Docker
Платформа Docker (Docker Platform) — это программа, которая даёт нам возможность упаковывать приложения в контейнеры и запускать их на серверах. Платформа Docker позволяет помещать в контейнеры код и его зависимости. Как результат, системы, основанные на контейнерах, легко масштабировать, так как контейнеры можно переносить и воспроизводить.
▍Движок Docker
Движок Docker (Docker Engine) — это клиент-серверное приложение. Компания Docker разделила движок Docker на два продукта. Docker Community Edition (CE) — это бесплатное ПО, во многом основанное на опенсорсных инструментах.
Вероятно, вы будете пользоваться именно этой версией Docker. Docker Enterprise — это платная версия системы, дающая пользователям дополнительные возможности в области поддержки систем, управления ими и безопасности. Платная версия Docker даёт компании средства, необходимые для её существования.
▍Клиент Docker
Клиент Docker и другие механизмы экосистемы (взято из документации)
▍Демон Docker
Демон Docker (Docker Daemon) — это сервер Docker, который ожидает запросов к API Docker. Демон Docker управляет образами, контейнерами, сетями и томами.
▍Тома Docker
Тома Docker (Docker Volumes) представляют собой наиболее предпочтительный механизм постоянного хранения данных, потребляемых или производимых приложениями.
▍Реестр Docker
Реестр Docker (Docker Registry) представляет собой удалённую платформу, используемую для хранения образов Docker. В ходе работы с Docker образы отправляют в реестр и загружают из него. Подобный реестр может быть организован тем, кто пользуется Docker. Кроме того, поставщики облачных услуг могут поддерживать и собственные реестры. Например, это касается AWS и Google Cloud.
▍Хаб Docker
Хаб Docker (Docker Hub) — это самый крупный реестр образов Docker. Кроме того, именно этот реестр используется при работе с Docker по умолчанию. Пользоваться хабом Docker можно бесплатно.
▍Репозиторий Docker
Репозиторием Docker (Docker Repository) называют набор образов Docker, обладающих одинаковыми именами и разными тегами. Теги — это идентификаторы образов.
Обычно в репозиториях хранятся разные версии одних и тех же образов. Например, Python — это имя популярнейшего официального репозитория Docker на хабе Docker. А вот Python:3.7-slim — это версия образа с тегом 3.7-slim в репозитории Python. В реестр можно отправить как целый репозиторий, так и отдельный образ.
Теперь поговорим о терминах экосистемы Docker, имеющих отношение к масштабированию.
Масштабирование решений, основанных на контейнерах
Следующие четыре термина имеют отношение к одновременному использованию нескольких контейнеров.
▍Сеть Docker
Сетевые механизмы Docker (Docker Networking) позволяют организовывать связь между контейнерами Docker. Соединённые с помощью сети контейнеры могут выполняться на одном и том же хосте или на разных хостах. Подробности о сетевой подсистеме Docker можно почитать здесь.
▍Docker Compose
▍Docker Swarm
Docker Swarm — это решение, предназначенное для управления контейнерными развёртываниями (то есть, как говорят, для оркестрации контейнеров). В этом материале из официального учебного курса по Docker можно найти сведения о Docker Swarm. Мне хотелось бы порекомендовать вам не тратить время на изучение Docker Swarm в том случае, если у вас нет на то веской причины.
▍Сервисы Docker
Сервисы Docker (Docker Services) — это различные части распределённого приложения. Вот что о них говорится в документации:
Сервисы — это всего лишь «контейнеры в продакшне». В пределах сервиса выполняется лишь один образ, но сервис определяет то, как именно выполняется образ. В частности, речь идёт о том, какие порты должны использоваться, сколько реплик контейнера должно выполняться для того, чтобы сервис обеспечивал бы необходимую вычислительную мощность, и так далее. Масштабирование сервисов предусматривает изменение количества экземпляров контейнера, в которых работает некая программа, благодаря чему сервису выделяется столько системных ресурсов, сколько ему требуется для решения некоей задачи.
Сервисы Docker позволяют масштабировать контейнеры в пределах нескольких демонов Docker, благодаря им существует и технология Docker Swarm.
Краткий перечень терминов
Давайте, буквально в двух словах, повторим только что представленные вам термины:
Вот, на всякий случай, ещё один пончик
Этот термин относится не к самой платформе Docker, а к технологии, которая очень часто используется совместно с Docker.
Kubernetes
Kubernetes — это технология, которая позволяет автоматизировать развёртывание и масштабирование контейнеризированных приложений, а также управление ими. Это — бесспорный лидер рынка средств для оркестрации контейнеров. Если вам нужен инструмент для работы с группами контейнеров, для масштабирования решений, основанных на них, используйте не Docker Swarm, а Kubernetes. Kubernetes не является частью Docker. Они с Docker, скорее, похожи на лучших друзей.
Теперь, когда вы ознакомились с общими понятиями Docker и с терминологией, вы можете приступить к практическим экспериментам.
Итоги: печём пончики с Docker
Помните, как в прошлый раз мы сравнивали платформу Docker с духовкой, которую устанавливают в кухне? Сейчас самое время установить Docker на вашей «кухне» и что-нибудь приготовить.
Docker можно запускать локально на Linux, Mac и Windows. Если вы пользуетесь Mac или Windows, вы можете установить свежую версию Docker Desktop отсюда. Вместе с этой программой, кстати, устанавливается и Kubernetes. Если вы устанавливаете Docker на другой платформе, то загляните сюда для того, чтобы найти подходящую версию.
После установки Docker взгляните на первые две части официального руководства.
В следующий раз мы продолжим разговор о Docker. В частности, поговорим о файлах Dockerfile.
Уважаемые читатели! Если, читая материалы этой серии, вы открываете для себя Docker, просим рассказать о том, как вы планируете использовать технологии контейнеризации приложений.