По сравнению с традиционными методами развертывания некоторые предприятия и группы разработчиков все чаще склоняются к использованию облачных технологий. Контейнеризация является ключевым моментом. Очень удобно автоматизировать процесс записи, тестирования, публикации и развертывания программного обеспечения с помощью облачной технологии.
Так? Если мы хотим контейнеризировать проекты, автоматизировать тестирование и развертывание программного обеспечения, как развернуть центр зеркалирования контейнеров? Особенно в GitLab PipelineиJenkinsДля внутреннего использования,Взаимодействие с кластером интрасети,Используя центр зеркала контейнера, нет необходимости учитывать стоимость пропускной способности внешней сети, скорость высокая, и это так же легко, как съесть шоколад.。
В этой статье используется облегченный сервер приложений Tencent Cloud для создания соответствующего руководства. Друзья могут обратиться к адаптации руководства для работы:
Harbor — это сервер реестра корпоративного уровня для хранения и распространения образов Docker. Он расширяет Docker Distribution с открытым исходным кодом, добавляя некоторые важные для предприятия функции, такие как безопасность, идентификация и управление. Будучи частным сервером реестра корпоративного уровня, Harbour обеспечивает более высокую производительность и безопасность. Повысьте эффективность пользователей, использующих реестр для создания и запуска среды для передачи образов.
То есть,по сравнению сВстроенный реестр Docker:
Очень подходит для команд и малых и средних предприятий.
Некоторые друзья могут не понимать, зачем им создавать собственный зеркальный центр Docker? Не лучше ли напрямую получить официальный источник или общедоступное облачное изображение?
Действительно,Если это просто личное исследование или сервер, которому нужен только публичный имидж,Удобнее напрямую использовать общедоступные источники изображений.。ноЕсли вам нужно создавать свои собственные продукты, зеркалировать проекты и выполнять непрерывные итерации,Вам понадобится выделенный зеркальный склад для распределения хранилища:
Приведите пример,Если вы используете конвейер GitLab,Создать проект,нуждатьсяNodejsА как насчет окружающей среды?каждый разнуждаться:Извлечь образ Nodejs -> Изменить источник обновления пряжи -> Установить зависимости -> Создать проект -> Проект развертывания
。
но,Использовать частный репозиторий напрямую,При подключении к интранету,Используйте образ интрасети напрямую, чтобы заранее упаковать и настроить его.NodejsЗеркало:Извлечь личное изображение Nodejs -> Установить зависимости -> Создать проект -> Развертывание в Docker
。
Скорость будет намного выше, и вы даже сможете использовать собственный образ для отправки сообщений после развертывания:
Однако трудно поддерживать вышеуказанные требования к разработке имиджа продукта и непрерывной доставке, напрямую используя общедоступные источники. Поэтому крайне важно построить свой собственный зеркальный центр. Конечно, вы также можете напрямую приобрести частное решение для хранения изображений Tencent Cloud, что также является хорошим методом:
Существует множество других сторонних вариантов создания Docker-центра. Помимо непосредственной покупки решения для приватизации у упомянутого выше поставщика облачных услуг, вы также можете использовать другие аналогичные решения для хранения частных изображений, например: Sonatype Nexus Repository OSS。
Фактически, Nexus также может завершить строительство зеркального центра.,Преимущество использования Harbour в том, что его легко развернуть, особенно намного проще настроить SSL.。
Мой текущий сервер, внутреннее соединение Tencent Cloud, выглядит следующим образом:
Жаль, что мы не спланировали это в то время; мы не купили все серверы в одном месте!
Прежде всего, настоятельно рекомендуется сотрудничать с официальной документацией:
Особенно в отношении SSL используйте OpenSSL для самоподписания. При активации Nginx HTTPS он используется для завершения зашифрованной передачи и шифрования входа в Docker на других устройствах:
Второе — конфигурация сервера. На данный момент официально рекомендуемое оборудование:
Информация о конфигурации | самый низкий | рекомендовать |
---|---|---|
CPU | 2 CPU | 4 CPU |
Память | 4 GB | 8 GB |
хранилище | 40 GB | 160 GB |
Но я протестировал и обнаружил, что 2 ГБ памяти на самом деле достаточно для отдельных лиц и небольших команд.
О программном обеспечении серверов Linux в целом сказать особо нечего:
Учебник официально начинается, на этот раз с использованием:
сначала это Установить Докер,конкретные операции,Вы можете обратиться к моему предыдущему руководству по настройке GitLab:
Эффект от установки Docker:
Если ваш сервер находится в материковом Китае,Тогда предлагаю вам в процессе скачивания Инсталляционный пакет порта,Обязательно выберите версию автономной установки.
Версия автономной установки включает в себя все зависимые образы (такие как Nginx, Logger и т. д.), конечно, если вы выбираете Гонконг и другие регионы сервера приложений Tencent Cloud Light, вам не нужно это учитывать;
Инсталляционный пакет портаскачать адрес:Harbor Github Releases: https://github.com/goharbor/harbor/releases
После распаковки внутренняя структура файла:
harbor
├── common.sh # Общая команда, используйте драйвер install.sh
├── harbor.v2.7.3.tar.gz
├── harbor.yml.tmpl # Шаблон конфигурации
├── install.sh # Скрипт установки
├── LICENSE
└── prepare
На этом предварительные приготовления завершены.
Для повышения безопасности доступ к развернутой нами гавани осуществляется через HTTPS, и для шифрования связи требуется сертификат SSL. Предотвратите перехват и подделку данных посредниками.
Сертификаты, выданные доверенным центром сертификации (CA), необходимо обновлять либо один раз в год, либо каждые 3 месяца. Однако после запуска нашей гавани, если нет уязвимости безопасности, ее нельзя будет изменить в течение нескольких лет после запуска. Что нам следует делать в это время?
Ответ: самозаверяющий сертификат OpenSSL.,Вы можете подписать контракт на десять лет. Вы не можете позволить себе продлить срок действия сервера, но сертификат все еще действителен.。
Будьте смелыми и подпишите сертификат на 100 лет. Когда вы уйдете, сертификат все равно останется там~(^ω^)
Недостатки:
Теперь приступаем к созданию сертификата:
# Сгенерировать ключ
openssl genrsa -out yourdomain.com.key 4096
# Генерировать открытый ключ
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=mintimate/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.crt
Объясните значение параметров открытого ключа:
На основе сгенерированного ключа и открытого ключа мы используем сгенерированный сертификат для проверки соответствия сертификата, соответствующего имени домена, на стороне сервера, создаем здесь файл конфигурации расширения сертификата:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF
Наконец, сгенерируйте соответствующий сертификат:
# Создать запрос на подпись
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.csr
# Используйте только что созданный центр сертификации Ключевая подпись CSR, а также только что упомянутые внутренние параметры v3.ext
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt
Запомните текущий адрес сертификата, предполагая:
/home/mintimate/myApplication/harbor/ssl
Что мы можем сделать дальше.
Чиновник действительно дал один Шаблон конфигурации,Он находится в папке после распаковкиharbor.yml.tmpl
。Мы напрямуюкопировать Одна порция выходит,Внесите изменения на его основе:
cp harbor.yml.tmpl harbor.yml
Внесите изменения впоследствии:
нужно внимание,потому что я готовИспользуйте Nginx на хосте для обратного прокси-харбора,Итак, я установил это:
external_url
почтиdocker.example.com
доступ。А поскольку мы используем собственный Nginx для обратного прокси-сервера Harbor, нам необходимо изменить http/port на другие адреса, например: 8080, 8081.
Затем используйте встроенный сценарий установки для инициализации:
sudo ./install
Если предыдущая конфигурация верна, то докер-контейнер в это время уже будет запущен:
Nginx можно настроить следующим образом, который на самом деле является простым обратным прокси-сервером:
server{
listen 80;
listen 443 ssl http2;
server_name domain.com;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
ssl_certificate /home/mintimate/myApplication/harbor/ssl/domain.com.crt;
ssl_certificate_key /home/mintimate/myApplication/harbor/ssl/domain.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://127.0.0.1:8443; #Обратите внимание на порт здесь
}
}
На данный момент Harbour готов к тестовому доступу.
Следующий,Вы можете получить к нему доступ с помощью браузера. Посетите гавань. Ничего неожиданного,Возникает такая ошибка проверки сертификата SSL:
Причина проста,Наш SSL-сертификат не выдан профессиональной и заслуживающей доверия организацией.,даМы используем OpenSSL для подписи. Браузер думает, что сертификат поддельный;Но это не имеет никакого эффекта,Зашифрованная передача все еще возможна.,Если вы беспокоитесь,Вы можете проверить, является ли это сертификатом, подписанным вами:
Как видите, это подписанный нами сертификат сроком действия на десять лет.
Поскольку он используется нами или нашей командой, такого самоподписания достаточно. Если вы хотите использовать его извне или беспокоитесь, вы также можете использовать сертификат SSL от профессиональной организации, чтобы заменить все описанные выше шаги внутреннего самоподписания.
Продолжаем посещать и обычно можем войти в интерфейс входа в нашу гавань:
Администратор по умолчанию:admin
;пароль по умолчанию:Harbor12345
。
здесь,HarborРазвертывание завершено。янаконец Снова Демонстрационное использованиеодин раз。
Сначала наша консоль в Harbour Создать проект:
Войдите в Docker на другом сервере, которому необходимо использовать этот центр изображений Docker. В предыдущей статье мы использовали самозаверяющий HTTPS;,Не забудьтеIPИли сначала добавьте доменное имя в/etc/docker/daemon.json
в файлеinsecure-registries
В пункте конфигурации,Используется для настройки Docker для доверия адресам реестра, которые не являются HTTPS или SSL, выданными закрытым органом. например:
{
"insecure-registries" : ["192.168.0.100:5000", "harbor.internal.com:80"]
}
Что касается macOS и Windows, Docker Desktop по сути представляет собой операцию оболочки виртуальной машины Linux. Мы можем управлять ею непосредственно в настройках программного обеспечения рабочего стола:
Независимо от описанной выше ситуации, не забудьте перезапустить службу Docker, чтобы применить конфигурацию.
Наконец подключите:
docker login 『domain.com』
Введите имя пользователя и пароль, которые вы только что создали. Если предыдущие настройки верны, вы можете завершить вход:
Давайте построим зеркало и попробуем его,здесьяна основеnode:lts-buster
Зеркало,Создайте пакет, содержащийrsync
набор инструментов Зеркало,Внутри Dockerfile:
# Использовать узел образ v18.18
FROM node:lts-buster
WORKDIR /app
RUN bash -c 'echo "deb http://mirrors.cloud.tencent.com/debian/ buster main non-free contrib" > /etc/apt/sources.list'
RUN bash -c 'echo "deb-src http://mirrors.cloud.tencent.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list'
RUN bash -c 'echo "deb http://mirrors.cloud.tencent.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list'
RUN bash -c 'echo "deb-src http://mirrors.cloud.tencent.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list'
RUN bash -c 'echo "deb http://mirrors.cloud.tencent.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list'
RUN bash -c 'echo "deb-src http://mirrors.cloud.tencent.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list'
RUN apt update -y
RUN apt install rsync -y
После упаковки,использоватьdocker images
Просто закажи Может Видетьянаш местный Зеркало:
Наконец, мы нажимаем:
docker tag my-node:latest doamin.com/test_demo/my-node:latest
После успешной отправки вы увидите изображение, которое мы только что отправили, в интерфейс управления Harbour:
Если ты хочешь быть похожим на меня,Используется в конвейере GitLab.,Конвейерная аутентификация,Можеткопировать~/.docker/config.json
контент внутри,какGitLab Runnerпеременная параметраDOCKER_AUTH_CONFIG
,таксборочная линия Будет автоматическииспользоватьDOCKER_AUTH_CONFIG
Завершить операцию аутентификации,Чтобы избежать сбоя при получении пользовательского образа:
Впоследствии выяснилось, что Harbor официально выпустила новую версию, так как же нам обновить Harbor?
Операция обновления, разные версии Harbor, детали могут отличаться, рекомендуется обратиться к официальным инструкциям по обновлению:
Проще говоря,Просто сначала остановите контейнеры, связанные с Гаванью.,Потом сделай резервную копию и вытащиHarborинструмент обновленияharbor-migrator
,наконец,Для завершения установки используйте более позднюю версию Harbor.
Никаких дополнительных подробностей здесь приводиться не будет.
Ладно, на этом демонстрация закончена. Наличие собственного частного хранилища образов Docker может значительно упростить нашу среду разработки и производства.
Неудивительно, что эта статья — последняя, которую я буду обновлять в сообществе Tencent Cloud; мы вместе уже три года, и нам суждено увидеть вас снова. Если однажды мои статьи снова станут пригодными для публикации в сообществе, возможно, наступит день, когда я смогу вернуться. В противном случае было бы очень позорно проводить поощрительную награду в сообществе.