Как настроить частный реестр Docker на Ubuntu / Debian

Введение

Реестр Docker это мощный инструмент, который помогает управлять хранением и распространением образов контейнеров Docker. Хотя Docker Hub предоставляет бесплатный публичный реестр для размещения пользовательских образов Docker, существуют сценарии, в которых необходимо иметь частный реестр для обеспечения безопасности конфиденциальных или проприетарных образов. Создав частный реестр Docker, разработчики могут получить полный контроль над своими образами контейнеров и ограничить доступ к ним для авторизованных пользователей.

В этом руководстве мы рассмотрим процесс настройки и обеспечения безопасности частного реестра Docker на платформе Ubuntu 22.04 / 20.04 / 18.04. Вы узнаете, как настроить Docker Compose для определения параметров реестра и использовать Nginx для перенаправления трафика из интернета на запущенный Docker-контейнер. К концу этого урока вы сможете безопасно загружать и извлекать образы Docker из своего личного реестра.

Предварительные условия

Чтобы следовать этому руководству, вам понадобится следующее:

  • Два сервера Ubuntu / Debian: один будет выступать в качестве хост сервер для вашего частного реестра Docker, а другой будет служить в качестве клиент сервер.
  • На обоих серверах установлен Docker. Вы можете обратиться к руководству “Как установить и использовать Docker на Ubuntu 18.04/20.04/22.04 LTS” для получения подробных инструкций по настройке Docker.
  • Docker Compose установлен на сервере хосте сервер.
  • Nginx установлен на хосте сервер.
  • Nginx, защищенный с помощью Let’s Encrypt на хост сервер.
  • Зарегистрированное доменное имя, которое разрешается в сервер, на котором размещен ваш частный реестр Docker. Вы настроите его в рамках предварительного условия Let’s Encrypt. Для целей данного руководства мы будем называть этот домен your_domain.

Шаг 1: Установка и настройка реестра Docker

Для начала нам нужно настроить реестр Docker с помощью Docker Compose. Docker Compose позволяет легко определять и управлять конфигурацией контейнеров Docker.

  • Подключитесь к вашему хост сервера через SSH.
  • Создайте каталог под названием docker-registry для хранения файлов конфигурации, выполнив следующую команду:
$ mkdir ~/docker-registry
  • Перейдите в только что созданный каталог:
cd ~/docker-registry
  • Создайте подкаталог под названием data для хранения образов реестра Docker:
$ mkdir data
  • Создайте docker-compose.yml файл и откройте его для редактирования:
$ nano docker-compose.yml
  • Добавьте следующее содержимое в файл docker-compose.yml для определения базового экземпляра реестра Docker:
version: '3'
services:
  registry:
    image: registry:latest
    ports:
      - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./data:/data

Эта конфигурация устанавливает службу реестра Docker под названием registry, используя registry:latest изображение. Он отображает порт 5000 на хосте в порт 5000 в контейнере. Сайт REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY переменная окружения указывает каталог, в котором будут храниться изображения в контейнере. Наконец, монтируется ./data каталог на хосте в каталог /data каталог в контейнере, чтобы сохранить данные образа.

  • Сохраните и закройте файл, нажав кнопку Ctrl + X, затем Y, а затем Enter.
  • Запустите службу реестра Docker, выполнив следующую команду:
$ docker-compose up -d

[-d флаг запускает контейнеры в фоновом режиме.

На этом этапе ваш частный реестр Docker запущен и работает на вашем хост-сервере. Доступ к реестру осуществляется через доменное имя или IP-адрес вашего сервера по порту 5000.

Шаг 2: Настройка Nginx в качестве обратного прокси-сервера

Чтобы обеспечить безопасный доступ к реестру Docker по HTTPS и направить трафик из интернета в контейнер реестра, мы будем использовать Nginx в качестве обратного прокси. Обратный прокси будет обрабатывать завершение SSL и перенаправлять запросы к службе реестра Docker.

  • Подключитесь к вашему хост сервера через SSH.
  • Откройте файл конфигурации Nginx для вашего домена с помощью следующей команды (замените your_domain на имя зарегистрированного домена):
$ sudo nano /etc/nginx/sites-available/your_domain
  • Удалите существующее содержимое и добавьте следующую конфигурацию:
server {
    listen 80;
    listen [::]:80;
    server_name your_domain;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name your_domain;
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Заменить your_domain на зарегистрированное доменное имя. Эта конфигурация настраивает Nginx на перенаправление HTTP-запросов на HTTPS и прослушивает входящие HTTPS-запросы. В ней указывается SSL-сертификат и расположение ключей, предоставляемых Let’s Encrypt. Адрес location / блок проксирует запросы к http://localhost:5000, который соответствует службе Docker Registry, запущенной на хосте.

  • Сохраните и закройте файл, нажав кнопку Ctrl + X, затем Y, а затем Enter.
  • Включите конфигурацию Nginx, создав символическую ссылку:
$ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
  • Проверьте конфигурацию Nginx на наличие синтаксических ошибок:
$ sudo nginx -t

Если в конфигурационном файле нет синтаксических ошибок, вы увидите syntax is ok и test is successful сообщения.

  • Перезапустите Nginx, чтобы применить изменения:
$ sudo systemctl restart nginx

Теперь Nginx настроен как обратный прокси для вашего реестра Docker, обрабатывает завершение SSL и перенаправляет запросы к службе реестра.

Шаг 3: Выталкивание и извлечение образов из частного реестра Docker

Теперь, когда ваш частный реестр Docker настроен и доступен через ваше доменное имя по HTTPS, вы можете отправлять и извлекать образы Docker в реестр и из него.

Чтобы отправить образ в реестр, выполните следующую команду:

$ docker push your_domain/image_name:tag

Заменить your_domain на зарегистрированное доменное имя, image_name с именем вашего изображения, и tag с указанием конкретной версии или тега для изображения.

Чтобы извлечь образ из реестра, выполните следующую команду:

$ docker pull your_domain/image_name:tag

Опять же, замените your_domain, image_name, и tag с соответствующими значениями.

Шаг 4: Включите аутентификацию

По умолчанию реестр Docker, который мы настроили, не требует аутентификации для отправки и извлечения образов. Однако включение аутентификации добавляет дополнительный уровень безопасности вашему частному реестру Docker. При включенной аутентификации только авторизованные пользователи смогут получить доступ к реестру и взаимодействовать с ним.

Чтобы включить аутентификацию, вы можете выбрать один из нескольких методов аутентификации в зависимости от ваших требований. Одним из распространенных методов является использование системы аутентификации на основе имени пользователя и пароля. Реестр Docker поддерживает базовый механизм аутентификации с помощью файла htpasswd. Вот как можно включить аутентификацию:

Создайте файл htpasswd:

  • Установите apache2-utils пакет, если он еще не установлен:
$ sudo apt-get install apache2-utils
  • Создайте файл htpasswd с именем пользователя и паролем:
$ sudo htpasswd -Bc /path/to/htpasswd <username>
  • Вам будет предложено ввести и подтвердить пароль для указанного имени пользователя. Повторите этот шаг для каждого пользователя, которого вы хотите добавить.

Настройте реестр Docker на использование аутентификации:

  • Откройте свой docker-compose.yml файл.
  • Добавьте следующую переменную окружения в файл registry службу:
environment:
  - REGISTRY_AUTH=htpasswd
  - REGISTRY_AUTH_HTPASSWD_PATH=/path/to/htpasswd
  - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
  • Заменить /path/to/htpasswd на фактический путь к вашему файлу htpasswd.

Сохраните изменения и перезапустите реестр Docker:

$ docker-compose down
$ docker-compose up -d

После включения аутентификации пользователям необходимо будет предоставить действительные учетные данные (имя пользователя и пароль) для отправки и извлечения образов из реестра.

Не забывайте о безопасном управлении учетными записями и паролями пользователей. Регулярно проверяйте и при необходимости обновляйте доступ пользователей. Вы также можете изучить другие методы аутентификации, например аутентификацию на основе маркеров или интеграцию с внешними провайдерами аутентификации, такими как LDAP или OAuth.

Вот и все! Теперь у вас есть собственный частный реестр Docker, настроенный с использованием SSL-шифрования и доступный через доменное имя. Вы можете использовать этот реестр для безопасного хранения и управления образами Docker.

Заключение:

В этой статье мы рассмотрели процесс настройки частного реестра Docker. Мы рассмотрели установку Docker, создание файла Docker Compose, включение шифрования SSL/TLS и включение аутентификации для авторизованного доступа. Выполнив эти шаги, вы сможете создать безопасный реестр Docker для управления и распространения контейнерных приложений в вашей организации. Не забывайте следить за лучшими практиками безопасности и регулярно пересматривать конфигурацию реестра. Воспользуйтесь преимуществами хорошо защищенного реестра Docker для упрощенного развертывания приложений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *