GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come configurare il registro Docker privato su Ubuntu 18.04 LTS

Docker Registry o "Registry" è un'applicazione lato server open source e altamente scalabile che può essere utilizzata per archiviare e distribuire immagini Docker. Era un'applicazione lato server dietro Docker Hub. Nella maggior parte dei casi d'uso, un Docker Registry è un'ottima soluzione se si desidera implementare il sistema CI/CD nello sviluppo dell'applicazione. Il Private Docker Registry offre maggiori prestazioni per il ciclo di sviluppo e produzione centralizzando tutte le tue immagini Docker personalizzate dell'applicazione in un unico posto.

In questo tutorial, ti mostreremo come installare e configurare un registro Docker privato su un server Ubuntu 18.04. Utilizzeremo un server web Nginx e proteggeremo il registro con un nome utente e una password (autenticazione di base).

Prerequisiti

  • Server Ubuntu 18.04
  • Privilegi di root

Cosa faremo?

  1. Installa dipendenze
  2. Installa Docker e Docker-componi
  3. Imposta registro Docker privato
  4. Test

Passaggio 1:installazione delle dipendenze del pacchetto

Prima di tutto, installeremo alcune dipendenze dei pacchetti per la distribuzione del Private Docker Registry.

Installa le dipendenze dei pacchetti usando il comando seguente.

sudo apt install -y gnupg2 pass apache2-utils httpie

I pacchetti gnupg2 e pass verranno utilizzati per memorizzare l'autenticazione della password nel registro mobile. E apache2-utils verrà utilizzato per generare l'autenticazione di base e httpie verrà utilizzato per i test.

Passaggio 2:installazione di Docker e Docker-compose

Ora installeremo la finestra mobile e la composizione mobile dal repository ufficiale di Ubuntu.

Installa Docker e Docker-compose eseguendo il comando seguente.

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

Al termine dell'installazione, avvia il servizio Docker e aggiungilo al tempo di avvio.

sudo systemctl start docker
sudo systemctl enable docker

Docker è attivo e funzionante e Docker-compose è stato installato. Verifica utilizzando il comando seguente.

docker version
docker-compose version

E ti verrà mostrata la versione di Docker e Docker-compose installata sul tuo sistema.

Passaggio 3:configurazione del registro Docker privato

In questo passaggio, configureremo l'ambiente Docker Registry creando un ambiente di directory e creeremo alcune configurazioni tra cui docker-compose.yml, host virtuale nginx e configurazione aggiuntiva ecc.

- Crea directory di progetto

Crea una nuova directory per il progetto chiamata 'registry' e crea le directory 'nginx' e 'auth' all'interno.

mkdir -p registry/{nginx,auth}

Successivamente, vai alla directory 'registry' e crea di nuovo nuove directory all'interno di 'nginx'.

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

Di conseguenza, le directory del progetto hanno l'aspetto dell'immagine seguente.

tree

- Crea script di composizione Docker

Ora vogliamo creare un nuovo script docker-compose.yml per la distribuzione del registro Docker.

Vai alla directory 'registry' e crea un nuovo file di configurazione 'docker-compose.yml'.

cd registry/
vim docker-compose.yml

Innanzitutto, definisci la versione di composizione che desideri utilizzare e il servizio.

version: '3'
services:

Successivamente, aggiungi il primo servizio chiamato "registro". Il servizio Docker Registry utilizzerà l'immagine Docker fornita dal team Docker 'registry:2. Monterà il volume della finestra mobile 'registrydata' e la directory locale denominata 'auth' che contiene il file di autenticazione di base 'registry.passwd'. E l'ultimo, verrà eseguito sull'immagine della finestra mobile personalizzata denominata "mynet" ed esporrà la porta 5000 sia sul contenitore che sull'host.

#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

Successivamente, la configurazione del servizio 'nginx' che eseguirà le porte HTTP e HTTPS e monterà la directory locale 'conf.d' per la configurazione dell'host virtuale e 'ssl' per i certificati 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

E l'ultimo, definisci la rete personalizzata 'mynet' con un driver bridge e i 'registrydata' con un driver locale.

#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

Salva e chiudi la configurazione.

Di seguito la configurazione completa:

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

- Configura l'host virtuale Nginx

Dopo aver creato lo script docker-compose, creeremo l'host virtuale e la configurazione aggiuntiva per il servizio nginx.

Vai alla directory 'nginx/conf.d/' e crea un nuovo file host virtuale chiamato 'registry.conf'.

cd nginx/conf.d/
vim registry.conf

Incolla la seguente configurazione.

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;
    }

}

Salva e chiudi.

Quindi, crea una configurazione aggiuntiva per aumentare max_body_size su nginx. Ciò ti consentirà di caricare immagini Docker con una dimensione massima di 2 GB.

vim additional.conf

Incolla la configurazione di seguito.

client_max_body_size 2G;

Salva e chiudi.

- Configura certificato SSL e autenticazione di base

Copia i file del certificato SSL del tuo dominio nella directory 'ssl'.

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

Ora vai nella directory 'auth' e genera il nuovo file di password 'registry.passwd'.

cd auth/

Genera una nuova password per l'utente hakase.

htpasswd -Bc registry.passwd hakase
TYPE THE STRONG PASSWORD

E la configurazione dell'ambiente per la distribuzione di Private Docker Registry è stata completata.

Di seguito è riportato lo screenshot dei file e delle directory dell'ambiente.

tree

- Esegui il registro Docker

Esegui il registro Docker utilizzando il comando docker-compose di seguito.

docker-compose up -d

E otterrai il risultato come di seguito.

Successivamente, assicurati che il registro e il servizio nginx siano attivi e in esecuzione. Verifica utilizzando il comando seguente.

docker-compose ps
netstat -plntu

E ti verrà mostrato che il servizio "registro" è in esecuzione sulla porta "5000" e il servizio "nginx" esporrà le porte HTTP e HTTPS come di seguito.

Fase 4 - Test

Prima di testare il nostro registro Docker privato, dobbiamo aggiungere il certificato CA radice alla finestra mobile stessa e al sistema.

Se stai usando il certificato del file pem, esportalo nel file .crt usando il comando OpenSSL.

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

Ora crea una nuova directory per il certificato Docker e copia al suo interno il certificato CA radice.

mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/

Quindi crea una nuova directory '/usr/share/ca-certificate/extra' e copia il certificato della CA radice al suo interno.

mkdir -p /usr/share/ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

Successivamente, riconfigura il pacchetto 'ca-certificate' e riavvia il servizio Docker.

dpkg-reconfigure ca-certificates
systemctl restart docker

- Scarica l'immagine Docker

Scarica la nuova immagine Docker utilizzando il seguente comando.

docker pull ubuntu:16.04

Al termine, tagga l'immagine per il registro privato con il comando seguente.

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

Controlla di nuovo l'elenco delle immagini Docker sul sistema e otterrai nuove immagini come di seguito.

docker images

- Invia l'immagine al registro locale privato

Accedi al Private Docker Registry utilizzando il comando seguente.

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

Digita il nome utente e la password in base al file 'registry.htpasswd'.

Ora controlla l'immagine della finestra mobile disponibile nel registro.

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

E non è presente alcuna immagine Docker nel Registro di sistema.

Ora esegui il push della nostra immagine personalizzata nel registro Docker privato.

docker push registry.hakase-labs.io/ubuntu16

Controlla di nuovo e assicurati di ottenere l'immagine della finestra mobile "ubuntu16" nel repository privato.

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

Infine, l'installazione e la configurazione del Private Docker Registry con Nginx e l'autenticazione di base sono state completate con successo.


Ubuntu
  1. Come installare Docker su Ubuntu 22.04 / 20.04 LTS

  2. Come configurare il registro Docker privato in Kubernetes (k8s)

  3. Come impostare un registro Docker privato su Rocky Linux 8

  4. Come configurare il server Rsyslog su Ubuntu 18.04 LTS

  5. Come configurare Elasticsearch su Ubuntu 18.04 e 16.04 LTS

Come installare Docker su Ubuntu 18.04 LTS

Come configurare UFW Firewall su Ubuntu 18.04 LTS

Come configurare UFW Firewall su Ubuntu 20.04 LTS

Come installare Docker su Ubuntu 20.04 LTS

Come installare Kitematic su Ubuntu 20.04 LTS

Come creare un registro Docker privato su Ubuntu Linux