Как настроить приватный реестр Docker в Ubuntu 18.04 LTS

by itisgood

Docker Registry или «Registry» – это серверное приложение с открытым исходным кодом и хорошо масштабируемое приложение, которое можно использовать для хранения и распространения образов Docker.

Это было приложение на стороне сервера за Docker Hub.

В большинстве случаев использование Docker Registry – отличное решение, если вы хотите внедрить систему CI / CD в разработку приложений.

Private Docker Registry предоставляет больше возможностей для цикла разработки и производства, объединяя все ваши собственные образы приложений Docker в одном месте.

В этом руководстве мы покажем вам, как установить и настроить системный реестр Docker на сервере Ubuntu 18.04.

Мы будем использовать веб-сервер Nginx и защищать реестр с помощью имени пользователя и пароля (базовая аутентификация).

Предпосылки

  • Сервер Ubuntu 18.04
  • root привилегии

Что мы будем делать?

  • Установим зависимости
  • Установим Docker и Docker-compose
  • Настройка личного реестра Docker
  • Тестирование

Шаг 1 – Установите зависимости пакета

Прежде всего, мы собираемся установить зависимости некоторых пакетов для развертывания Private Docker Registry.

sudo apt install -y gnupg2 pass apache2-utils httpie

Шаг 2 – Установите Docker и Docker-compose

Теперь мы собираемся установить docker и docker-compose из официального репозитория Ubuntu.

Установите Docker и Docker-compose, выполнив следующую команду.

sudo apt install -y docker.io docker-compose -y

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

sudo systemctl start docker
sudo systemctl enable docker

Docker запущен и работает, и Docker-compose был установлен.

Проверьте с помощью команды ниже.

docker version
docker-compose version

И вам будет показана версия Docker и Docker-compose, установленных в вашей системе.

Шаг 3 – Настройка приватного реестра Docker

На этом этапе мы собираемся настроить среду реестра Docker, создав некоторую среду каталогов, и создать некоторую конфигурацию, включая docker-compose.yml, виртуальный хост nginx, дополнительную конфигурацию и т. д.

– Создание каталогов проектов

Создайте новый каталог для проекта с именем «registry» и создайте каталоги «nginx» и «auth» внутри.

mkdir -p registry/{nginx,auth}

После этого перейдите в каталог ‘registry’ и снова создайте новые каталоги внутри ‘nginx’.

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

И в результате каталоги проекта выглядят следующим образом.

tree

– Создание Docker-соmpose скрипта

Теперь мы должны создать новый скрипт docker-compose.yml для развертывания реестра Docker.

Перейдите в каталог ‘registry’ и создайте новый файл конфигурации ‘docker-compose.yml’.

cd registry/
vim docker-compose.yml

Во-первых, определите составную версию, которую вы хотите использовать, и службу.

version: '3'
services:

После этого добавьте первый сервис с именем ‘registry’.

Служба реестра Docker будет использовать образ Docker, предоставленный реестром команды Docker: 2.

Он подключит том докера «registrydata» и локальный каталог с именем «auth», содержащий базовый файл аутентификации «registry.passwd».

И, наконец, он будет запущен в пользовательском образе докера с именем «mynet» и предоставит порт 5000 как для контейнера, так и для хоста.

#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:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet

Затем, настройка службы ‘nginx’, которая будет запускать порты HTTP и HTTPS и монтировать локальный каталог ‘conf.d’ для конфигурации виртуального хоста, и ‘ssl’ для сертификатов ssl.

#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

И последнее, определите пользовательскую сеть «mynet» с драйвером моста и «registrydata» с локальным драйвером.

#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

Сохраните и закройте конфигурацию.

Ниже приведена полная конфигурация:

version: '3'
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:
      - registrydata:/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:
  registrydata:
    driver: local

– Настроить виртуальный хост Nginx

После создания скрипта docker-compose мы создадим виртуальный хост и дополнительную конфигурацию для службы nginx.

Перейдите в каталог ‘nginx/conf.d/’ и создайте новый файл виртуального хоста с именем ‘registry.conf’.

cd nginx/conf.d/
vim registry.conf

Вставьте в него содержимое:

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.hakase-labs.io;
    return 301 https://registry.hakase-labs.io$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.hakase-labs.io;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        # Do not allow connections from docker 1.5 and earlier
        # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
        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;
    }

}

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

Затем создайте дополнительную конфигурацию для увеличения max_body_size в nginx.

Это позволит вам загружать образы докер с максимальным размером 2 ГБ.

vim additional.conf

Вставьте конфигурацию ниже.

client_max_body_size 2G;

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

– Настройка SSL-сертификата и базовой аутентификации.

Скопируйте файлы сертификатов SSL вашего домена в каталог ‘ssl’.

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

Теперь перейдите в каталог ‘auth’ и сгенерируйте новый файл паролей ‘registry.passwd’.

cd auth/

Сгенерируйте новый пароль для пользователя hakase.

htpasswd -Bc registry.passwd hakase
TYPE THE STRONG PASSWORD

Настройка среды для развертывания Private Docker Registry была завершена.

Ниже приведен скриншот файлов и каталогов нашей среды.

– Запустите Docker Registry

Запустите Реестр Docker, используя команду docker-compose ниже.

docker-compose up -d

После этого убедитесь, что служба реестра и nginx запущена и работает. Проверьте с помощью следующей команды.

docker-compose ps
netstat -plntu

И вам будет показано, что служба ‘Registry’ работает на порту ‘5000’, а служба ‘Nginx’ будет предоставлять порты HTTP и HTTPS, как показано ниже.

Шаг 4 – Тестирование

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

Если вы используете сертификат файла pem, экспортируйте его в файл .crt с помощью команды OpenSSL.

openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt

Теперь создайте новый каталог для сертификата докера и скопируйте в него сертификат корневого центра сертификации.

mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/

Затем создайте новый каталог «/usr/share/ca-certificate/extra» и скопируйте в него сертификат корневого центра сертификации.

mkdir -p /usr/share/ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

После этого переконфигурируйте пакет ca-Certificate и перезапустите сервис Docker.

dpkg-reconfigure ca-certificates
systemctl restart docker

– Загрузите образ Docker

Загрузите новый образ Docker с помощью следующей команды.

docker pull ubuntu:16.04

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

docker image tag ubuntu:16.04 registry.hakase-labs.io/ubuntu16

Проверьте еще раз список образов Docker в системе, и вы получите новые изображения, как показано ниже.

 

You may also like

Leave a Comment