Как настроить частный реестр Docker в Ubuntu 18.04 LTS
На этой странице
- Шаг 1. Установите зависимости пакета
- Шаг 2. Установите Docker и Docker-compose
- Шаг 3. Настройка частного реестра Docker
- Шаг 4. Тестирование
- Справочник
Docker Registry или Registry — это масштабируемое серверное приложение с открытым исходным кодом, которое можно использовать для хранения и распространения образов Docker. Это было серверное приложение, стоящее за Docker Hub. В большинстве случаев Docker Registry — отличное решение, если вы хотите внедрить систему CI/CD при разработке своего приложения. Частный реестр Docker повышает производительность цикла разработки и производства за счет централизации всех ваших пользовательских образов приложений 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
Пакеты 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/