Пример простого аналога DockerHub для тестовой среды
sudo apt update
sudo apt -y install openjdk-8-jre-headless
java -version // проверьте сколько версий установлено
sudo update-alternatives --config java // если несколько, то выполните команду и выберите 8
sudo wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
sudo tar -zxvf latest-unix.tar.gz -C /opt
cd /opt
sudo mv nexus-3.68.1-02/ nexus/ // возможно у вас уже будет другая версия
sudo adduser nexus // зададим пароль
sudo usermod -s /usr/sbin/nologin nexus
sudo visudo
// находим # User privilege specification и добавляем
nexus ALL=(ALL) NOPASSWD: ALL
sudo chown -R nexus:nexus nexus/ sonatype-work/
sudo nano /opt/nexus/bin/nexus.rc
run_as_user="nexus"
sudo nano /etc/systemd/system/nexus.service
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target
sudo systemctl start nexus
systemctl status nexus
sudo systemctl enable nexus
tail -f /opt/sonatype-work/nexus3/log/nexus.log // подождем и проверим пока все запустится - ждем Started Sonatype Nexus OSS
Откроем браузер
ip-address:8081
Узнаем наш пароль
cat /opt/sonatype-work/nexus3/admin.password
Жмем Sign In (правый верхний угол) и логинимся — admin и ваш пароль
Далее выполним то, что нам предлагает Setup wizard
- зададим пароль
- отключим или оставим анонимный доступ (помним про ИБ)
- finish
Создадим свой локальный репозиторий
В Веб-интерфейсе нажимаем на значок шестеренки и выбираем слева Repositories -> Create repository -> docker (hosted)
Задаем имя — например devopslife
Ниже http ставим галочку и прописываем порт — например 8082
Нажимаем Create registry
Поправим daemon.json для доступа по http + установим зеркало // у вас будет свой ip
sudo nano /etc/docker/daemon.json
{
"registry-mirrors" : [ "https://dockerhub.timeweb.cloud" ],
"insecure-registries" : [ "http://192.168.2.170:8082" ]
}
sudo systemctl restart docker
sudo systemctl status docker
sudo dockerd // если вдруг перезапустится с ошибкой
docker login 192.168.2.170:8082 // проверяем - admin и ваш пароль
Login Succeeded
Проверим
docker pull alpine
docker images
docker tag alpine:latest 192.168.2.170:8082/alpine-devopslife
docker push 192.168.2.170:8082/alpine-devopslife
В веб-интерфейсе выбираем Browse -> devopslife (наш репозиторий) и видим в нем образ alpine-devopslife
Настроим https
cd /opt/nexus/etc/ssl
sudo keytool -genkeypair -keystore keystore.jks -storepass devopslife12345 -keypass devopslife12345 -alias jetty -keyalg RSA -keysize 2048 -validity 1000 -dname "CN=*.${NEXUS_DOMAIN}, OU=test, O=test1, L=Unspecified, ST=Unspecified, C=RU" -ext "SAN=DNS:nexus-repo.com,IP:192.168.2.170" -ext "BC=ca:true"
sudo keytool -export -alias jetty -keystore keystore.jks -rfc -file nexus.cert
sudo nano /opt/nexus/etc/nexus-default.properties
Находим # Jetty section и пропишем
application-port-ssl=8443
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
Далее
sudo nano /opt/nexus/etc/jetty/jetty-https.xml
Находим sslContextFactory и в KeyStorePassword, KeyManagerPassword, TrustStorePassword прописываем devopslife12345 (вы прописываете свой пароль заданный ранее)
sudo systemctl restart nexus
sudo systemctl status nexus
sudo apt -y install ca-certificates
sudo mv nexus.cert nexus.crt
sudo cp nexus.crt /usr/local/share/ca-certificates
sudo update-ca-certificates
Далее в веб-интерфейсе в настройках нашего репозитория выбираем https, ставим галочку и задаем порт — например 8083. Нажимаем Save
Наш домен, какой мы выбрали ранее nexus-repo.com должен быть прописан или в hosts или в DNS на роутере (или вашем DNS сервере). Проверьте, что ping nexus-repo.com проходит.
Далее проверяем
docker login nexus-repo.com:8083
Login Succeeded
Если появляется ошибка x509: certificate signed by unknown authority
sudo service docker restart
Проверим
docker pull nginx
docker images
docker tag nginx:latest nexus-repo.com:8083/nginx-devopslife
docker push nexus-repo.com:8083/nginx-devopslife
Видим наш образ
