Рубрики
Uncategorized

4 Простые шаги для настройки личного реестра Docker на Ubuntu

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

После начнете работать с Docker, вы в конечном итоге обнаружите, что вы хотите немного более контролировать изображения, на которых вы хотите развернуть свой контейнер. Здесь Docker Registry играет важную роль, оно поможет вам централизовать ваши контейнерные изображения, а также уменьшить время сборки для вас и вашей команды. Преимущества реестров Не останавливаются здесь, вы можете интегрировать его с помощью своей постоянной интеграции/непрерывной развертывания (CI/CD) трубопроводами, автоматически автоматизируя процесс push в частном документе, который помогает обновить среду производства или разработки на идти.

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

Этот учебник поможет вам настроить и обеспечить собственный реестр Private Docker. Ниже приведены упомянутые предварительные условия, прежде чем начать 4 этапа руководства:

  1. Нам нужно 2 сервера Ubuntu 18.04 с привилегиями Sudo. Сначала будет действовать как клиентский сервер, а второе будет частным реестром Docker.
  2. Обе системы должны иметь Docker и Docker Compose.
  3. Статический IP, чтобы указать свой домен.
  4. Доменное имя или подделок (в зависимости от того, что вы предпочитаете), что вы предпочитаете), этот устойчивый/разрешенный сервер реестра.
  5. SSL для частного реестра. Мы будем использовать давайте шифрование с nginx.

Итак, давайте начнем гид …

Шаг 1 — Настройка реестра Docker

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

С помощью Docker Compose мы можем создать .yml Файл, который помогает нам настроить конфигурацию каждого контейнера и устанавливать связь между ними. Теперь реестр Docker как приложение состоит из нескольких компонентов, поэтому мы собираемся использовать Docker Compose для управления конфигурацией.

Так, на всякий случай Если у личного сервера реестра Docker не имеет Docker-Compose Тем не менее, затем следуйте указанным ниже шагам.

Установка Docker Compose на Linux Systems

Во-первых, вам нужно скачать Docker Compose Binary из Compose Resository, а затем сделать бинарный исполняемый файл:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& sudo chmod +x /usr/local/bin/docker-compose

Теперь проверьте установку:

$ docker-compose --version
docker-compose version 1.25.0, build 4667896b

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

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Обратите внимание, что вышеупомянутые шаги строго предназначены для систем на основе Linux. Если вы находитесь в другой ОС, следуйте инструкциям, упомянутым на этом ссылка Чтобы установить Docker-Compose Отказ

Настройка частного реестра Docker

На сервере следуйте указанным ниже шагам, чтобы создать свой собственный реестр Private Docker. Во-первых, мы собираемся создать каталог, перейти к нему, а затем создать подкаталог для хранения наших данных:

$ mkdir /your/preferred/path/my-pdr && cd $_
$ mkdir main

Создать Docker-Compose.yml Файл конфигурации для нашего реестра в My-Pdr каталог, и откройте его в предпочтительном текстовом редакторе:

$ touch docker-compose.yml && nano docker-compose.yml

Добавьте описанную ниже базовую конфигурацию для реестра Docker:

version: '3.7'

services:
 registry:
   restart: always
   image: registry:2
   ports:
   - "5000:5000"
   Environment:
     REGISTRY_AUTH: htpasswd
     REGISTRY_AUTH_HTPASSWD_REALM: Registry
     REGISTRY_AUTH_HTPASSWD_PATH: /a2auth/registry.password
     REGISTRY_HTTP_SECRET: SomeRandomStringToUse
     REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /main
     REGISTRY_STORAGE_DELETE_ENABLED: 'true'
   volumes:
     - ./main:/main
     - ./a2auth:/a2auth

Давайте распадаем вышеуказанную конфигурацию,

Перезапустить политику:

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

Раздел изображения:

В разделе изображения вы должны использовать официальное изображение Docker https://hub.docker.com//registry с тегом 2 . Вы можете использовать любой другой или последнее изображение согласно вашему требованию, но ради этого урока мы собираемся придерживаться Реестр: 2 изображение.

Раздел порта:

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

Секция окружающей среды:

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

Место хранения:

  1. Registry_Storage_filesystem_rootDirectory С пути /главный , поскольку приложение обнаруживает переменную во время запуска, она начнет сохранение данных в определенный каталог, то есть /главный .
  2. Registry_Storage_delete_enabled Он установлен в True, в противном случае контейнер Docker Registry не будет поддерживать удаление изображений.

Аутентификация:

Вы можете использовать базовый механизм аутентификации для управления доступом к вашим личным реестре Docker. Для этого вы можете создать файл аутентификации с HTPASSWD и добавить пользователей к нему.

Вы можете установить HTPASSWD Пакет, запустив следующую команду:

$ sudo apt install apache2-utils

Создайте каталог для хранения учетных данных:

$ mkdir /your/preferred/path/my-pdr/a2auth && cd $_

Чтобы создать первый пользователь, вы можете использовать ниже команду. Он предложит вам ввести пароль, когда вы вводите пароль, убедитесь, что вы копируете его где-то в безопасности. Как это будет использоваться для вохода в ваш личный реестр:

$ htpasswd -Bc registry.password yourusername

Вы можете использовать флаг -B Чтобы указать BCRYPT, который более безопасен, чем шифрование по умолчанию и -C создать новый пользователь.

  1. Регистрация , этим мы указали HTPASSWD Используемая мы использовали схему аутентификации.
  2. Реестр Auth HTAPASWD PATH он указывает на файл аутентификации, который мы создали для пользователя.
  3. Регистрация ktpasswdrealm это подразумевает название HTPASSWD область.
  4. Registryhttpsecret , вы можете использовать любую длинную структуру Format Format в переменной, или вы можете генерировать одну из самой системы, запустив эту команду: Cat/Dev/Urandom | tr -dc 'a-za-z0-9' | головки 32

Раздел громкости:

Вы также упомянули раздел «Объемы» в файле конфигурации, что помогает Docker на карте /Главная каталог внутри контейнера к /главный на сервере реестра. Так что к концу дня все данные, которые отправляются в реестр контейнера, будут храниться в /Ваш/предпочтительный/путь/my-pdr На сервере реестра.

Теперь пришло время поставить нашу конфигурацию для тестирования. Вы можете сделать это, запустив следующую команду:

$ docker-compose up

Вы увидите указанный ниже вывод:

Creating network "registry_default" with the default driver
Pulling registry (registry:2)...
2: Pulling from library/registry
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:2
Creating registry_registry_1 ... done
Attaching to registry_registry_1
registry_1  | time="2019-12-31T09:21:37.028548595Z" level=info msg="redis not configured" go.version=go1.11.2 instance.id=3a07596d-d918-4b9f-ac80-e0b3f9ae1e1a service=registry version=v2.7.1 
registry_1  | time="2019-12-31T09:21:37.028661776Z" level=info msg="Starting upload purge in 55m0s" go.version=go1.11.2 instance.id=3a07596d-d918-4b9f-ac80-e0b3f9ae1e1a service=registry version=v2.7.1 
registry_1  | time="2019-12-31T09:21:37.040850986Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.11.2 instance.id=3a07596d-d918-4b9f-ac80-e0b3f9ae1e1a service=registry version=v2.7.1 
registry_1  | time="2019-12-31T09:21:37.041642152Z" level=info msg="listening on [::]:5000" go.version=go1.11.2 instance.id=3a07596d-d918-4b9f-ac80-e0b3f9ae1e1a service=registry version=v2.7.1 

Вуаля … Выход указывает, что наш контейнер запускается и работает на порту 5000. На данный момент ударил Ctrl + C выключить ваш реестр Private Docker.

Шаг 2 — Настройка Nginx для переадресации портов

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

Это руководство предполагает, что вы уже настроили Nginx с помощью Encrypt. Теперь вам нужно создать файл конфигурации сервера —

$ cd /etc/nginx/conf.d && nano yourdomainname.com.conf

Здесь вы должны пересылать трафик в порт 5000, на котором будет запущен ваш существующий контейнер Docker Registry. Вам необходимо добавить дополнительную информацию с сервера в реестр для каждого запроса и ответа в заголовке.

Файл конфигурации сервера должен выглядеть что-то вроде ниже. Обратите внимание, что вам нужно запустить Certbot Чтобы установить SSL для домена.

http {
  upstream docker-registry {
    server registry:5000;
  }
map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
    '' 'registry/2.0';
}
server {
   listen 80;
   listen [::]:80;    
   server_name yourdomainname.com;
   return 301 https://$host$request_uri;
}

server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2; 

       server_name yourdomainname.com;
       ssl_certificate      /etc/letsencrypt/live/yourdomainname.com/fullchain.pem;
       ssl_certificate_key  /etc/letsencrypt/live/yourdomainname.com/privkey.pem;

       location /v2/ {
       if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
         return 404;
       }
      add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
       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;
       }
}

$ http_user_agent Блок проверяет, что докерная версия клиента выше 1,5 или нет, потому что здесь мы используем версию 2.0 реестра. Useragent гарантирует, что это не Идти применение. Вы можете найти больше информации о конфигурации заголовка Nginx здесь Отказ

Теперь пришло время проверить файл конфигурации сервера:

$ sudo nginx -t

Вы увидите следующий вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если ваш тест не удается, вы можете пройти через журнал ошибок Nginx, который обычно находится в /var/log/nginx/ Дирецортий, это поможет вам понять, что пошло не так.

Далее необходимо изменить предел загрузки файла NGINX по умолчанию, который бывает единственным 1 МБ. Поскольку Docker разделяет большое изображение загрузки на отдельные слои, иногда они могут получить максимально 1 ГБ, поэтому вам нужно убедиться, что реестр может обрабатывать большие загрузки файлов. Для этого вам нужно настроить client_max_body_size предел в /etc/nginx/nginx.conf файл.

Откройте файл и найдите http раздел:

... 
http {
    client_max_body_size 3000M;
    ...
}
...

Опять же, проверьте ваши изменения и перезапустите Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ sudo systemctl restart nginx

Здесь вы можете увидеть, что тест успешен, и вы изменили размер максимального загрузки до 3 ГБ.

Чтобы подтвердить, что Nginx пересылает трафик для порта 5000 Откройте окно браузера и введите URL-адрес:

https://yourdomainname.com/v2/

Вы увидите подсказку в вашем браузере, так как процесс аутентификации находится в пьесе. Введите имя пользователя и пароль, которые вы создали ранее, и вы увидите пустой объект JSON:

{}

Принимая во внимание, что если вы перейдете к вашему терминалу, вы найдете выход, аналогичный следующему:

registry_1  | time="2019-12-31T09:21:37.041642152Z" level=info msg="response completed" go.version=go1.7.6 http.request.host=cornellappdev.com http.request.id=a8f5984e-15e3-4946-9c40-d71f8557652f http.request.method=GET http.request.remoteaddr=128.84.125.58 http.request.uri="/v2/" http.request.useragent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.125995ms http.response.status=200 http.response.written=2 instance.id=3093e5ab-5715-42bc-808e-73f310848860 version=v2.6.2
registry_1  | 172.17.0.2 - - [31/Dec/2019:09:21:38+0000] "GET /v2/ HTTP/1.0" 200 2 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7"

200 Код ответа в последней строке указывает, что контейнер обрабатывает запрос успешно.

Шаг 3 — Издание изображения в Частный реестр Docker

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

Перейти на ваш клиент-сервер, запустите следующую команду:

$ docker pull alpine
edge: Pulling from library/alpine
d95bb1b66adb: Pull complete 
Digest: sha256:2e8c50cbe65693cdf3e6c3822f23ee3e07a7d92fd891d0a5ed9710aedd05ee19
Status: Downloaded newer image for alpine
docker.io/library/alpine

$ docker run -it --name test-alpine alpine /bin/sh

Флаг -Питать Дает вам интерактивную оболочку доступа в контейнер. Через который вы можете создать файл для проверки процесса публикации:

root@dc59bfcd63b3:/# touch file-from-client-server.txt

Выход из контейнера Docker:

root@dc59bfcd63b3:/# exit

При этом вы создали новое изображение, основанное на изображении, уже запущенном плюс изменения, которые вы выполнили. Теперь вы должны совершить изменения:

$ docker commit $(docker ps -lq) your-test-image
sha256:83b7ae6c35a534d81ea0ad13fce007c2c6da39dfaf13a35faacdb358d7e12eb6

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

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
your-test-image     latest              83b7ae6c35a5        7 seconds ago       6MB

Вы успешно создали изображение, но на данный момент он находится только на клиентском сервере. Теперь пришло время подтолкнуть ваше недавно созданное изображение в ваш реестр Private Docker. Вам будет предложено ввести имя пользователя и пароль:

$ docker login https://yourdomainname.com

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

$ docker tag v1 yourdomainname.com/your-test-image
$ docker push yourdomainname.com/your-test-image

Ваш выход будет выглядеть похоже на следующее:

The push refers to a repository [yourdomainname.com/test-image]
83b7ae6c35a5: Pushed
dec4bff59bf4: Pushed
7363c5bcdbce: Pushed
982d147b635c: Pushed
... 

Шаг 4 — Потягивание для личного реестра Docker

Вы уже успешно выдвинули изображение, теперь вы должны вытащить изображение с удаленного сервера на свой клиентский сервер. Если вы хотите, вы также можете проверить его с другой машины.

Итак, теперь вы собираетесь войти в систему с паролем имени пользователя, которое вы создали ранее:

$ docker login https://yourdomainname.com

Потяните изображение из своего личного реестра Докера. Если успешно вы увидите следующий вывод в вашем терминале:

$ docker pull yourdomainname.com/your-test-image
v1: Pulling from v2/your-test-image
d95bb1b66adb: Pull complete 
Digest: sha256:2e8c50cbe65693cdf3e6c3822f23ee3e07a7d92fd891d0a5ed9710aedd05ee19
Status: Downloaded newer image for alpine:edge
yourdomainname.com/v2/your-test-image:v1

Чтобы подтвердить, что тяга был успешным, вы всегда можете запустить контейнер со следующей командой. Вы можете использовать --rm Флаг, так что контейнер уничтожит себя, как только вы выйдете с помощью интерактивной оболочки:

$ docker run --rm -it yourdomainname.com/your-test-image /bin/sh

Чтобы проверить изменения, которые вы сделали на ваше изображение, используйте Ls команда:

$ ls
bin    dev    etc  file-from-client-server.txt  home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var

Вы увидите файл, который мы создали ранее с именем file-from-client-server.txt Отказ Теперь вы можете подтвердить, что вы настроили безопасный личный реестр Docker, через который кто-либо с учетными данными может нажать и потянуть пользовательские изображения.

Оригинал: «https://dev.to/appfleet/4-easy-steps-to-set-up-a-private-docker-registry-on-ubuntu-4pc»