Поиск по сайту:

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


На этой странице

  1. Шаг 1. Установите зависимости пакета
  2. Шаг 2. Установите Docker и Docker-compose
  3. Шаг 3. Настройка частного реестра Docker
  4. Шаг 4. Тестирование
  5. Справочник

Docker Registry или Registry — это масштабируемое серверное приложение с открытым исходным кодом, которое можно использовать для хранения и распространения образов Docker. Это было серверное приложение, стоящее за Docker Hub. В большинстве случаев Docker Registry — отличное решение, если вы хотите внедрить систему CI/CD при разработке своего приложения. Частный реестр Docker повышает производительность цикла разработки и производства за счет централизации всех ваших пользовательских образов приложений Docker в одном месте.

В этом руководстве мы собирались показать вам, как установить и настроить частный реестр Docker на сервере Ubuntu 18.04. Мы будем использовать веб-сервер Nginx и защитим реестр с помощью имени пользователя и пароля (базовая аутентификация).

Предпосылки

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

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

  1. Установить зависимости
  2. Установите Docker и Docker-compose
  3. Настройка частного реестра Docker
  4. Тестирование

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

В первую очередь собирались установить некоторые зависимости пакетов для развертывания Private Docker Registry.

Установите зависимости пакетов, используя следующую команду.

sudo apt install -y gnupg2 pass apache2-utils httpie

Пакеты gnupg2 и pass будут использоваться для хранения аутентификации по паролю в реестре Docker. И apache2-utils будут использоваться для создания базовой аутентификации, а httpie будет использоваться для тестирования.

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

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

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

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

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

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, дополнительную конфигурацию и т. д.

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

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

mkdir -p registry/{nginx,auth}

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

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

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

tree

- Создать скрипт для создания Docker

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

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

cd registry/
vim docker-compose.yml

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

version: '3'
services:

После этого добавьте первую службу с именем register. Служба Docker Registry будет использовать образ Docker, предоставленный реестром команды Docker:2. Он смонтирует данные реестра тома докера и локальный каталог с именем auth, который содержит файл базовой аутентификации register.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 с помощью драйвера моста и данные реестра с помощью локального драйвера.

#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/ и создайте новый файл виртуального хоста с именем register.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 и сгенерируйте новый файл пароля register.passwd.

cd auth/

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

htpasswd -Bc registry.passwd hakase
TYPE THE STRONG PASSWORD

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

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

tree

- Запустить реестр Docker

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

docker-compose up -d

И вы получите результат, как показано ниже.

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

docker-compose ps
netstat -plntu

И вам будет показано, что служба реестра работает на порту 5000, а служба nginx предоставит порты HTTP и HTTPS, как показано ниже.

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

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

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

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

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

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 и скопируйте в него сертификат Root CA.

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 pull ubuntu:16.04

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

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

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

docker images

- Переместить изображение в частный локальный реестр

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

docker login https://registry.hakase-labs.io/v2/

Введите имя пользователя и пароль на основе файла реестра.htpasswd.

Теперь проверьте наличие образа докера в реестре.

http -a hakase https://registry.hakase-labs.io/v2/_catalog

И в реестре нет образа докера.

Теперь отправьте наш пользовательский образ в частный реестр Docker.

docker push registry.hakase-labs.io/ubuntu16

Проверьте еще раз и убедитесь, что образ докера ubuntu16 находится в частном репозитории.

http -a hakase https://registry.hakase-labs.io/v2/_catalog

И, наконец, успешно завершена установка и настройка Private Docker Registry с Nginx и Basic Authentication.

Ссылка

  • https://linux-console.net/tutorial/how-to-create-docker-images-with-dockerfile/