Úvod
Pokud chcete zajistit hladký vývoj CI/CD pomocí platformy Docker, zvažte nastavení soukromého registru Docker. Nejen, že urychluje doručení, ale je to také praktický způsob distribuce zdrojů a sdílení obrázků Docker mezi kontejnery.
V tomto kurzu se dozvíte, jak nastavit soukromý registr Docker a nakonfigurovat jej pro externí přístupnost.
Předpoklady
- Přístup k uživatelskému účtu pomocí sudo nebo root privilegia
- Klientský server
- Server pro soukromý registr Docker
- Docker a Docker–Compose na obou serverech
- Nginx na soukromém serveru registru Docker
Co je soukromý registr dockerů
Registr Docker je serverová aplikace a součást produktu platformy jako služby společnosti Docker. Umožňuje vám lokálně ukládat všechny obrázky Dockeru do jednoho centralizovaného umístění.
Když nastavíte soukromý registr, přiřadíte serveru, který bude komunikovat s Docker Hub přes internet. Úlohou serveru je stahovat a odesílat obrázky, ukládat je lokálně a sdílet je mezi ostatními hostiteli Dockeru.
Spuštěním externě přístupného registru můžete ušetřit cenné zdroje a urychlit procesy. Tento software vám umožňuje stahovat obrázky, aniž byste se museli připojovat k Docker Hub, šetří šířku pásma a chrání systém před potenciálními online hrozbami.
Hostitelé Dockeru mohou přistupovat k místnímu úložišti prostřednictvím zabezpečeného připojení a kopírovat obrazy z místního registru, aby vytvořili své vlastní kontejnery.
Než začnete
Jak je uvedeno v části předpoklady, průvodce předpokládá, že již máte na všech serverech nainstalované Docker a Docker-Compose.
Chcete-li ověřit, že máte požadovaný software, můžete zkontrolovat jejich verze vydání pomocí příkazů:
docker version
docker-compose version
Další věc, kterou budete chtít zajistit, je, že se služba Docker spustila a je nastavena tak, aby byla povolena při spouštění:
sudo systemctl start docker
sudo systemctl enable docker
Nainstalujte a nakonfigurujte soukromý registr dockerů
Krok 1:Vytvořte adresáře registru
Začněte konfigurovat server, který bude hostitelem soukromého registru. Nejprve chcete vytvořit nový adresář, ve kterém budou uloženy všechny požadované konfigurační soubory.
1. Následující příkaz vytvoří nový adresář projektu označený registry
a dva podadresáře - nginx
a auth
:
mkdir -p registry/{nginx, auth}
2. Přejděte do registry
a vytvořte dva nové adresáře v nginx
:
cd registry/
mkdir -p nginx/{conf.d/,ssl}
3. Prohlédněte si hierarchii nově vytvořených adresářů zadáním:
tree
Krok 2:Vytvořte skript Docker-Compose a definujte služby
Dále je třeba vytvořit a nakonfigurovat nový docker-compose.yml
skript. Skript definuje verzi Docker-Compose a také služby, které potřebujete k nastavení soukromého registru.
1. V registry
vytvořte nový soubor adresář s textovým editorem podle vašich preferencí:
nano docker-compose.yml
2. V tomto konfiguračním souboru je potřeba definovat několik věcí, takže je pečlivě sledujte a pečlivě přidejte každou část obsahu:
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
3. Uložte a zavřete soubor.
Vysvětlení konfigurace:
Nejprve definujete verzi Docker-Compose, kterou chcete použít. V tomto příkladu je to version: '3'
. Poté přejdete k definování všech součástí registru Docker, počínaje #Registry
služba.
Docker Registry je v podstatě kontejner s bitovou kopií registru, proto je bitová kopie definována jako registry:2
.
Přidání restart: always
line zajišťuje, že spustíte Docker Registry jako službu, jakmile spustíte systém.
Určení portů 5000:5000
instruuje Docker, že hostitel a běžící kontejner komunikují přes definovaná čísla portů.
Služba připojí svazek dockeru registrydata
a místní adresář auth
, spolu s jeho ověřovacím souborem registry.passwd
.
Dalším prvkem je #Nginx Service
. Konfigurace popisuje, že služba běží na portech 80:80
(HTTPS) a 443:443
(HTTPS). Připojí místní adresář pro virtuální konfiguraci (conf.d
) a certifikáty SSL (ssl
).
Nakonec nastavte mynet
s ovladačem mostu a registrydata
s místním ovladačem jako parametry pro vlastní síť.
Krok 3:Nastavte přesměrování portu Nginx
Dalším krokem je konfigurace virtuálního hostitele Nginx a jeho konfigurace pro službu Nginx.
1. Přejděte na nginx/conf.d/
adresář, který jste vytvořili v předchozím kroku:
cd nginx/conf.d/
2. Vytvořte nový soubor virtuálního hostitele s názvem registry.conf
:
nano registry.conf
3. Přidejte následující obsah:
upstream docker-registry {
server registry:5000;
}
server {
listen 80;
server_name registry.example-server.com;
return 301 https://registry.example-server.com$request_uri;
}
server {
listen 443 ssl http2;
server_name registry.example-server.com;
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;
}
}
4. Uložte soubor a vraťte se do shellu terminálu.
Krok 4:Zvětšete nahrávanou velikost souboru Nginx
Ve výchozím nastavení Nginx omezuje velikost nahrávaného souboru na 1 MB . Protože mnoho obrázků Docker toto číslo překračuje, nejlepším postupem je zvýšit maximální velikost souboru na Nginx. Nastavením max_body_size
se ujistěte, že můžete nahrávat obrázky, které mají větší velikost souboru. až 2 GB .
1. Vytvořte další konfigurační soubor pomocí:
nano additional.conf
2. Přidejte do souboru následující řádek:
client_max_body_size 2G;
3. Uložte a zavřete soubor.
Krok 5:Konfigurace certifikátu SSL a základního ověřování
1. Soubory certifikátů SSL vaší domény je třeba zkopírovat do ssl
adresář. Chcete-li to provést, spusťte příkazy:
cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/
2. Poté přejděte na auth
adresář:
cd auth
3. A vyžádejte si nový soubor hesel s názvem registry.passwd
pro vašeho uživatele:
htpasswd -Bc registry.passwd example
4. Zadejte silné heslo a pro potvrzení jej zadejte znovu. Tímto jste přidali heslo pro svého uživatele.
Krok 6:Přidejte certifikát kořenové CA
Nyní musíte přidat certifikát kořenové CA do Dockeru a systému, na kterém pracujete.
1. Exportujte soubor .crt
soubor s OpenSSL zadáním:
openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt
2. Zkopírujte kořenový certifikát do nového adresáře pro certifikáty Docker:
mkdir -p /etc/docker/certs.d/registry.example-server.com/
cp rootCA.crt /etc/docker/certs.d/example-server.com/
3. Dále zkopírujte stejný certifikát do jiného nového adresáře pod názvem /usr/share/ca-certificate/extra
:
mkdir -p .usr.share.ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/
4. Překonfigurujte nově vytvořený ca-certificate
balíček zadáním:
dpkg-reconfigure ca-certificates
5. Nakonec restartujte službu Docker:
systemctl restart docker
Krok 7:Spusťte Docker Registry
Když je vše nastaveno a připraveno, můžete vytvořit kontejner registru Docker pomocí Docker-Compose:
docker-compose up -d
Zkontrolujte, zda je spuštěn registr a služby Nginx:
docker-compose ps
netstat -plntu
Výstup by vám měl ukázat služby a jim přiřazené porty.
Natáhnout obrázek z centra Docker do soukromého registru
1. Chcete-li lokálně uložit obrázek z Docker Hub do vašeho soukromého registru, použijte docker pull
příkaz:
docker pull [docker_image]
2. Přidejte k obrázku štítek pro označení soukromého registru:
docker image tag [docker_image] registry.example-server.com/[new_image_name]
3. Můžete zkontrolovat, zda je obraz Dockeru lokálně dostupný, tím, že vyzvete systém, aby vypsal všechny lokálně uložené obrazy:
docker images
Jak poslat obrázek Dockeru do soukromého registru
1. Chcete-li odeslat obrázek z hostitele Docker na soukromý server registru Docker, musíte se nejprve přihlásit do registru pomocí příkazu:
docker login https://registry.example-server.com/v2/
2. Zadejte uživatelské jméno a heslo jste definovali pro virtuálního hostitele.
3. Nyní můžete odeslat svůj obraz do soukromého registru příkazem:
docker push registry.example-server.com/[new_image_name]
4. Podívejte se na seznam obrázků uložených v soukromém registru Docker:
http -a example https://registry.example-server.com/v2/_catalog