Как настроить Private Docker Registry в Ubuntu 20.04

Как настроить Private Docker Registry в Ubuntu 20.04

 

Для разработки Smooth CI / CD с использованием платформы Docker рассмотрите возможность использования автономного сервера реестра Docker. Реестр Docker — это репозиторий, в котором вы можете хранить образы докеров и извлекать их для запуска приложений на сервере. Для более быстрой доставки, а также для обеспечения безопасности инфраструктуры рекомендуется создать собственный частный реестр докеров для хранения образов докеров и их распространения среди организаций. В этой статье мы узнаем, как настроить частный реестр докеров в Ubuntu 20.04.

Предпосылки

  • Учетная запись пользователя с привилегиями sudo
  • Сервер для реестра Docker
  • Nginx на сервере реестра Docker
  • Клиентский сервер
  • Docker и Docker-Compose на обоих серверах.

Частный реестр Docker

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

Прежде чем ты начнешь

Перед тем как начать, я гарантирую, что вы установили Docker и Docker-Compose как на клиентском сервере, так и на локальном сервере реестра. Чтобы убедиться, что вы установили необходимое программное обеспечение, вы можете выполнить следующие команды, чтобы проверить версию программного обеспечения.

$ docker version

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

$ docker-compose version

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

Кроме того, вам необходимо убедиться, что служба докеров запущена и настроена для включения во время загрузки:

$ sudo systemctl start docker
$ sudo systemctl enable docker

Установить и настроить частный реестр Docker

Чтобы настроить частный реестр Docker, выполните следующие действия:

Создать каталоги реестра

Настройте свой сервер, на котором будет размещен частный реестр. Создайте новый каталог, в котором будут храниться все необходимые файлы конфигурации.

Используйте следующую команду, чтобы создать новый каталог проекта my-registry и два подкаталога nginx и auth. Вы можете иметь собственное предположение для названия проекта.

$ mkdir -p my-registry/{nginx, auth}

Теперь перейдите в каталог проекта и создайте новые каталоги внутри nginx как:

$ cd my-registry/
$ mkdir -p nginx/{conf.d/, ssl}

Создание скрипта и сервисов Docker-Compose

Вам необходимо создать новый скрипт docker-compose.yml, который определяет версию docker-compose и службы, необходимые для настройки частного реестра.

Создайте новый файл « docker-compose.ym l» в каталоге « my-registry » с помощью редактора vi.

$ vi docker-compose.yml

Определите свою службу в файле docker-compose как:

services:
#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - myregistrydata:/data
      - ./auth:/auth
    networks:
      - mynet

#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet

#Docker Networks
networks:
  mynet:
    driver: bridge

#Volumes
volumes:
  myregistrydata:
    driver: local

Сохраните и закройте файл

Настройка переадресации портов nginx

Нам нужно создать конфигурацию виртуального хоста nginx для веб-службы nginx. Перейдите в каталог nginx/conf.d, созданный на предыдущем шаге.

$ cd nginx/conf.d/

Теперь создайте файл виртуального хоста nginx в текстовом редакторе. В этом примере я назову его myregistry.conf. У вас может быть собственное предположение.

$ vi myregistry.conf

Добавьте следующее содержимое:

upstream docker-registry {
    server registry:5000;
}
server {
    listen 80;
    server_name registry.infoit.com.ua;
    return 301 https://registry.infoit.com.ua$request_uri;
}
server {
    listen 443 ssl http2;
    server_name registry.infoit.com.ua;
    ssl_certificate /etc/nginx/ssl/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;
    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    location / {
        if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" )  {
            return 404;
        }
        proxy_pass                          http://docker-registry;
        proxy_set_header  Host              $http_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;
        proxy_read_timeout                  900;
    }
}

Замените свое доменное имя параметром server_name и сохраните файл.

Увеличьте размер загружаемого файла nginx

По умолчанию nginx имеет ограничение на загрузку файлов в 1 МБ. Поскольку изображения докеров превышают этот предел, вам необходимо увеличить размер загрузки в файле конфигурации nginx. В этом примере я собираюсь создать дополнительный файл конфигурации nginx с лимитом загрузки 2 ГБ.

Перейдите в каталог конфигурации nginx

$ cd myregistry/nginx/conf.d
$ vi additional.conf

Добавьте следующую строку и сохраните файл

client_max_body_size 2G;

Настроить SSL-сертификат и аутентификацию

После создания файла конфигурации nginx нам нужно настроить сертификат ssl. У вас должен быть действующий файл сертификата ssl с закрытым ключом. Скопируйте файл сертификата и закрытый ключ в каталог nginx / ssl как:

$ cd myregistry/nginx/ssl
$ cp /your-ssl-certificate-path/certificate.crt .
$ cp /your-private-key-path/private.key .

Если у вас нет действительного приобретенного сертификата ssl, вы можете создать свой собственный самоподписанный сертификат ssl. Помните, что самоподписанный ssl-сертификат не рекомендуется для производственных сред. Чтобы сгенерировать самоподписанный ssl-сертификат, выполните следующую команду:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \
 /etc/ssl/private/nginx-private.key -out /etc/ssl/certs/nginx-certificate.crt

Вам будет предложено предоставить некоторые детали, такие как код страны, имя домена, идентификатор электронной почты. Заполните детали и продолжайте.

Теперь настройте базовую аутентификацию как:

Перейти в каталог авторизации

$ cd auth

Запросите новый файл паролей с именем registry.password для вашего пользователя. В этом примере я буду использовать пользователя infoit .

$ htpasswd -Bc registry.password infoit

Если вы получили сообщение « htpasswd not found command », запустите следующую команду в своем терминале и повторите попытку.

$  sudo apt install apache2-utils -y

Введите надежный пароль и введите его еще раз, чтобы подтвердить свой пароль. Вы добавили пользователя с базовой аутентификацией для реестра Docker.

Запустить Docker Registry

Вы завершили настройку. Вы можете создать реестр с помощью команды docker-compose.

Переходим в каталог, где создаем файл docker-compose.yml

$ cd myregistry

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

$ docker-compose up -d

Реестр Docker запущен, вы можете проверить работающие контейнеры, используя следующую команду:

$ docker ps -a

Вы получите следующий результат:

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

Вы получите следующий результат:

$ docker pull centos

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

В этом примере я собираюсь пометить изображения centos как:

: registry.infoit.com.ua/infoit-centos

$ docker image tag [image name] registry.infoit.com.ua/[new-image-name]

Пример:

$ docker images tag centos registry.infoit.com.ua/infoit-centos

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

$ docker images

Отправить образ докера в частный реестр

Вы вытащили образ докера из концентратора докеров и создали тег для частного реестра. Теперь вам нужно отправить образ локального докера в частный реестр.

Во-первых, войдите в свой частный реестр, используя следующую команду:

$ docker login https://registry.infoit.com.ua/v2/

Используйте свой собственный URL-адрес реестра вместо https://registry.infoit.com.ua.

Вам будет предложено ввести имя пользователя и пароль; вы получите сообщение об успешном входе в систему.

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

$ docker push registry.infoit.com.ua/infoit-centos

Замените имя изображения после docker push

После завершения отправки вы можете перейти в браузер и ввести URL-адрес:

https://registry.infoit.com.ua/v2/_catalog

Замените registry.infoit.com.ua своим собственным URL-адресом и обеспечьте базовую аутентификацию. Вы найдете список репозиториев как:

 

Получение образа докера из частного реестра

Вы поместили свой локальный образ докера в свой частный реестр докеров. Таким же образом вы можете вытащить образы докеров из частного реестра докеров на локальный сервер.

Выполните следующую команду, чтобы войти на свой частный сервер реестра.

$ docker login https://registry.infoit.com.ua

Замените registry.infoit.com.ua своим частным URL-адресом реестра и обеспечьте базовую аутентификацию. После успешного входа в систему выполните следующую команду, чтобы извлечь образ докера из частного реестра. В этом примере я собираюсь загрузить ранее загруженный образ докера на локальный сервер. У вас может быть собственное предположение для имени образа докера.

$ docker pull registry.infoit.com.ua/infoit-centos

 

Заключение:

Из этой статьи вы узнали, как разместить собственный частный реестр докеров. Также вы получили представление о том, как вытащить образы из концентратора докеров на локальный сервер, пометить изображение и отправить его в частный реестр. Вы также узнали, как извлекать образы докеров из частного реестра на локальном сервере.