Il registro Docker è un'applicazione che ti consente di archiviare e distribuire le immagini Docker internamente (all'interno della tua organizzazione). Docker ha anche un registro pubblico, noto come Docker Hub, gratuito per archiviare le immagini Docker.
Ma il problema con il registro pubblico Docker è che le immagini che carichi su di esso diventano pubbliche. Questo non è ciò che tu o la tua organizzazione vi aspettate quando avete lavorato per lunghe ore per creare un'immagine e questo diventa pubblico.
Per superare questo ostacolo, puoi configurare un registro Docker per il tuo progetto in privato in modo che solo tu o la tua organizzazione possiate archiviare le immagini Docker su di esso e distribuirle tra i vostri colleghi.
Qui, in questa guida tecnica, discuteremo su come configurare Docker Private Registry su CentOS 7 / Ubuntu 16.04 / Fedora 26/25 .
Infrastrutture
HostName | Indirizzo IP | Sistema operativo | Scopo |
---|---|---|---|
registry.itzgeek.local | 192.168.12.10 | CentOS 7 | Funziona come server di registro privato Docker |
build.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Funziona come nodo del motore Docker in cui gli sviluppatori creeranno le immagini Docker con dockerfile o docker compose, quindi caricheranno tali immagini sul server del registro privato della finestra mobile sopra. |
deploy.itzgeek.local | 192.168.12.30 | Fedora 26/25 | Funziona come nodo del motore Docker in cui distribuiamo i container scaricati (pull) dal server del registro privato. |
Prerequisiti
Installa il motore Docker su tutti i tuoi nodi e assicurati che il servizio Docker sia attivo e funzionante.
LEGGI :Come installare Docker CE su CentOS 7
LEGGI :Come installare Docker CE su Ubuntu 16.04
LEGGI :Come installare Docker CE su Fedora 26/25
Imposta registro privato Docker
Accedi al nodo del registro ed esegui il pull dell'immagine del registro da Docker Hub.
[root@registry ~]# docker pull registry
Scegli se vuoi utilizzare un registro Docker semplice o protetto.
Registro Docker semplice
[root@registry ~]# docker run -dit -p 5000:5000 --name registry registry
Registro privato Docker sicuro
Per impostazione predefinita, il nodo Docker utilizza una connessione protetta su TLS per caricare o scaricare immagini da o verso il registro privato. Puoi utilizzare certificati TLS firmati da CA o autofirmati sul server del Registro di sistema.
Qui userò un certificato autofirmato per proteggere il registro Docker. Creiamo un certificato autofirmato usando il comando seguente.
[root@registry ~]# mkdir -p /certs [root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/ca.key -x509 -days 365 -out /certs/ca.crt Generating a 4096 bit RSA private key ............................................++ .....................................................................................................++ writing new private key to '/certs/ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:IN State or Province Name (full name) []:TN Locality Name (eg, city) [Default City]:CHN Organization Name (eg, company) [Default Company Ltd]:ITzGeek Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:registry.itzgeek.local Email Address []:[email protected]
Sostituisci "registry.itzgeek.local ” con l'FQDN del tuo server di registro.
Certificato generato "ca.crt" deve essere posizionato su tutti i tuoi nodi build/deploy per considerare attendibile questo certificato.
Avvia il contenitore del registro Docker con le informazioni sul certificato.
[root@registry ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt -e REGISTRY_HTTP_TLS_KEY=/certs/ca.key registry
Ora hai un contenitore del server del registro denominato "registro ” in esecuzione su “registry.itzgeek.local “.
[root@registry ~]# docker ps
Risultato:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8641fbc895f5 registry "/entrypoint.sh /e..." 44 seconds ago Up 41 seconds 0.0.0.0:5000->5000/tcp registry
Firewall
Dovresti aprire le seguenti porte sul firewall affinché il registro Docker sia disponibile all'esterno della rete (su build.itzgeek.local /deploy.itzgeek.local )
Devi eseguire il seguente comando sul server Docker Registry (registry.itzgeek.local), dipende dal tuo sistema operativo.
Se il tuo registro Docker è su CentOS 7 / Fedora 26/25,
[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp [root@registry ~]# firewall-cmd --reload
Se il tuo registro Docker è su Ubuntu 16.04,
root@registry:~# ufw status root@registry:~# ufw allow 5000/tcp root@registry:~# ufw reload ufw enable
Ora il registro Docker è pronto per la distribuzione di immagini Docker.
Crea e carica un'immagine Docker su un server del registro privato
Accedi al tuo nodo del motore Docker di compilazione, ad es. “build.itzgeek.local ”
Crea un'immagine Docker
Creiamo un'immagine Docker (per container docker personalizzato) per caricarla nel server del registro privato. In tre modi puoi costruire/creare un contenitore di immagini.
1. Impegnati
2. File Docker
3. Docker Componi.
Crea e mantieni la tua immagine Docker pronta per il caricamento seguendo uno dei metodi sopra elencati.
LEGGI :Come creare immagini Docker con Docker Commit
LEGGI :Come creare immagini Docker con DockerFile
Ho creato un'immagine della finestra mobile chiamata "mycentos:httpdv1.0 ” su “build.itzgeek.local ” e ora lo caricheremo sul server del registro privato.
root@build:~# docker images
Risultato:
Ora, rinomina l'immagine della finestra mobile in qualcosa come registryserver:portnumber/image name:tag
.
Se il nome dell'immagine non corrisponde al formato specificato, il comando push o pull della finestra mobile tenterà di caricare o scaricare l'immagine dal registro pubblico, non dal registro privato.
Per rinominare l'immagine della finestra mobile, usa il docker tag
comando.
root@build:~# docker tag mycentos:httpdv1.0 registry.itzgeek.local:5000/mycentos:httpdv1.0
Controlla di nuovo l'elenco delle immagini Docker.
Carica un'immagine Docker
Dipende dalla modalità di comunicazione (Sicura o non protetta ) di Docker Registry, segui uno dei metodi seguenti.
Non sicuro (registro HTTP semplice)
Modifica/Crea il file “daemon.json ” in “/etc/docker/ ” directory.
root@build:~# vi /etc/docker/daemon.json
Aggiungi i seguenti contenuti al suo interno.
{ "insecure-registries" : ["registry.itzgeek.local:5000"] }
Sicuro (autofirmato)
Copia il certificato “ca.crt ” dal server di registro “registry.itzgeek.local ” a “/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt ” su “build.itzgeek.local “.
root@build:~# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/ root@build:~# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
In entrambi i casi, dovrai riavviare il servizio del motore Docker.
root@build:~# systemctl restart docker
Carica l'immagine della finestra mobile sul server del registro privato utilizzando il comando seguente.
root@build:~# docker push registry.itzgeek.local:5000/mycentos:httpdv1.0
Scarica e distribuisci l'immagine del contenitore Docker dal server del registro privato
Accedi al tuo nodo del motore di distribuzione Docker, ad es. "deploy.itzgeek.local “.
Dipende dalla modalità di comunicazione (sicura o non protetta) di Docker Registry, segui uno dei metodi seguenti.
Non sicuro (registro HTTP semplice)
Modifica/Crea il file “daemon.json ” in “/etc/docker/ ” directory.
[root@deploy ~]# vi /etc/docker/daemon.json
Aggiungi i seguenti contenuti al suo interno.
{ "insecure-registries" : ["registry.itzgeek.local:5000"] }
Sicuro (autofirmato)
Copia il certificato “ca.crt ” dal server di registro “registry.itzgeek.local ” a “/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt ” su “deploy.itzgeek.local “.
[root@deploy ~]# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/ [root@deploy ~]# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
In entrambi i casi, dovrai riavviare il servizio del motore Docker.
[root@deploy ~]# systemctl restart docker
Scarica l'immagine della finestra mobile sul server del registro privato utilizzando il comando seguente.
[root@deploy ~]# docker pull registry.itzgeek.local:5000/mycentos:httpdv1.0
Ora controlla l'elenco delle immagini disponibili utilizzando "immagini della finestra mobile comando ”
[root@deploy ~]# docker images
Risultato:
Ora l'immagine Docker è pronta per la distribuzione.
LEGGI :Come distribuire i container Docker – Interfaccia a riga di comando
Questo è tutto.