GNU/Linux >> Znalost Linux >  >> Rocky Linux

Jak nastavit soukromý registr dockerů na Rocky Linux 8

Pokud pracujete pro organizaci a chcete si ponechat své obrazy dockerů u sebe pro rychlé nasazení, pak je hostování soukromého úložiště Docker perfektní. Soukromý registr dockerů vám umožňuje vlastnit kanál distribuce obrázků a mít přesnější kontrolu nad ukládáním a distribucí obrázků. Můžete integrovat svůj registr se systémem CI/CD a zlepšit tak svůj pracovní postup.

Tento tutoriál vás naučí, jak nastavit a používat soukromý registr Docker na serveru založeném na Rocky Linux 8 pomocí Amazon S3 jako úložiště.

Předpoklady

  • Dva linuxové servery s Rocky Linuxem 8. Jeden server bude fungovat jako hostitel registru, zatímco druhý bude sloužit jako klient k odesílání požadavků a přijímání obrázků od hostitele.
  • Registrovaný název domény směřující na hostitelský server. Budeme používat registry.example.com pro náš tutoriál.
  • Uživatel bez oprávnění root s právy sudo na obou počítačích.

Krok 1 – Konfigurace brány firewall

Prvním krokem je konfigurace firewallu. Rocky Linux používá Firewalld Firewall. Zkontrolujte stav brány firewall.

$ sudo firewall-cmd --staterunning

Firewall pracuje s různými zónami a veřejná zóna je výchozí zóna, kterou budeme používat. Seznam všech služeb a portů aktivních na bráně firewall.

$ sudo firewall-cmd --permanent --list-services

Měl by ukazovat následující výstup.

cockpit dhcpv6-client ssh

Povolit porty HTTP a HTTPS.

$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https

Znovu zkontrolujte stav brány firewall.

$ sudo firewall-cmd --permanent --list-services

Měli byste vidět podobný výstup.

cockpit dhcpv6-client http https ssh

Chcete-li změny povolit, znovu načtěte bránu firewall.

$ sudo firewall-cmd --reload

Krok 2 – Instalace Docker a Docker Compose

Tento krok je vyžadován na serveru i na klientských počítačích.

Nainstalujte oficiální úložiště Docker.

$ sudo dnf install yum-utils$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

Nainstalujte Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io

Povolte a spusťte démona Docker.

$ sudo systemctl povolit docker --now

Přidejte svého systémového uživatele do skupiny Docker, abyste se vyhnuli použití sudo spouštět příkazy Dockeru.

$ sudo usermod -aG docker $(whoami)

Po odhlášení se znovu přihlaste ke svému serveru, abyste povolili změnu.

Stáhněte si a nainstalujte nejnovější stabilní verzi Docker Compose.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o / usr/local/bin/docker-compose

Použijte oprávnění ke spustitelnému souboru na stažený binární soubor.

$ sudo chmod +x /usr/local/bin/docker-compose

Nainstalujte skript Docker-compose Bash Completion.

$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose 

Znovu načtěte nastavení profilu, aby dokončování bash fungovalo.

zdroj $ ~/.bashrc

Krok 3 – Konfigurace registru Docker

Vytváření uživatelských adresářů

Vytvořte adresář pro konfiguraci registru.

$ mkdir ~/docker-registry

Přepněte do docker-registry adresář.

$ cd ~/docker-registry

Vytvořte adresář pro uložení ověřovacího hesla HTTP, konfiguračních souborů Nginx a certifikátů SSL.

$ mkdir auth

Vytvořte další adresář pro ukládání protokolů Nginx.

Protokoly $ mkdir

Vytvořit Amazon S3 Bucket

Data registru a obrázky můžete uložit na svůj server nebo použít cloudovou hostingovou službu. V našem tutoriálu budeme používat cloudovou službu Amazon S3.

Dalším krokem je nastavení konfiguračního souboru s několika důležitými nastaveními. Tato nastavení lze také definovat v docker-compose.yml soubor, ale mít samostatný soubor je mnohem lepší.

Vytvořte segment s následujícím nastavením.

  • ACL by měl být deaktivován.
  • Veřejný přístup k bucketu by měl být zakázán.
  • Verze segmentu by měly být zakázány.
  • Povolte šifrování Bucket pomocí spravovaných klíčů Amazon S3. (SSE-S3)
  • Zámek objektu by měl být deaktivován.

Vytvořte uživatele IAM s následující zásadou.

{ "Verze":"2012-10-17", "Prohlášení":[ { "Efekt":"Povolit", "Akce":[ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Zdroj":"arn:aws:s3:::S3_BUCKET_NAME" }, { "Effect":"Povolit", "Akce":[ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Zdroj":"arn:aws:s3:::S3_BUCKET_NAME/*" } ]}

Nahraďte S3_BUCKET_NAME s názvem vašeho kbelíku S3.

Poznamenejte si tajný klíč, tajnou hodnotu a oblast segmentu vašeho segmentu, abyste je mohli použít později.

Vytvořit soubor Docker Compose

Vytvořte docker-compose.yml soubor a otevřete jej pro úpravy.

$ nano docker-compose.yml

Vložte do něj následující kód.

verze:'3.3'služby:registry:image:registry:2 restart:vždy prostředí:- REGISTRY_STORAGE=s3 - REGISTRY_STORAGE_S3_REGION=us-west-2 - REGISTRY_STORAGE_S3_BUCKET=hf-docker-registry - REGISTRY_STORCRYSI_8AGE_ZEPT_S3_REGISTRY_STORCTORAGE_STORAGE_5ENGISTRY3_ - REGISTRY_STORAGE_S3_SECURE =TRUE - REGISTRY_STORAGE_S3_ACCESSKEY =AKIA3FIG4NVFCJ6STMUA - REGISTRY_STORAGE_S3_SECRETKEY =j9sA / fw6EE9TVj5KRDhm / 7deye + aYDPXttkGbdaX - REGISTRY_STORAGE_S3_V4AUTH =true - REGISTRY_STORAGE_S3_ROOTDIRECTORY =/ obrazu registr - REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR =PAMĚŤ - REGISTRY_HEALTH_STORAGEDRIVER_ENABLED =falešné Nginx:obraz "Nginx:Alpine" porty:- 443 :443 odkazy:- registry:registry volumes:- ./auth:/etc/nginx/conf.d - ./auth/nginx.conf:/etc/nginx/nginx.conf:ro - ./logs:/var/ log/nginx - /etc/letsencrypt:/etc/letsencrypt

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

Pojďme si projít, co jsme nastavili v našem novém souboru.

  1. Prvním krokem je získat nejnovější bitovou kopii verze 2 registru Docker z centra. Nepoužíváme nejnovější značku, protože to může způsobit problémy v případě aktualizace hlavní verze. Nastavení na 2 vám umožní získat všechny aktualizace 2.x a zároveň zabránit automatické aktualizaci na další hlavní verzi, která může přinést převratné změny.

  2. Kontejner registru je nastaven tak, aby se vždy restartoval v případě selhání nebo neočekávaného vypnutí.

  3. Nastavili jsme různé proměnné prostředí pro úložiště Amazon S3. Pojďme si je rychle projít.

    • REGISTRY_STORAGE nastavuje typ úložiště. Vybrali jsme s3 protože používáme Amazon S3.
    • REGISTRY_STORAGE_S3_REGION nastaví oblast vašeho segmentu S3.
    • REGISTRY_STORAGE_S3_BUCKET nastaví název vašeho segmentu S3.
    • REGISTRY_STORAGE_S3_ENCRYPT - nastavte ji na hodnotu true, pokud jste povolili šifrování bucket.
    • REGISTRY_STORAGE_S3_CHUNKSIZE nastavuje velikost nahrávaných bloků. Mělo by být větší než 5 MB (5 * 1024 * 1024).
    • REGISTRY_STORAGE_S3_SECURE - pokud hodláte používat HTTPS, nastavte jej na hodnotu true.
    • REGISTRY_STORAGE_S3_ACCESSKEY a REGISTRY_STORAGE_S3_SECRETKEY – Uživatelské přihlašovací údaje, které jste získali po vytvoření uživatele IAM.
    • REGISTRY_STORAGE_S3_V4AUTH - nastavte ji na true, pokud používáte v4 ověřování AWS. Pokud se vám zobrazují chyby související s přihlášením S3, nastavte hodnotu na hodnotu false.
    • REGISTRY_STORAGE_S3_ROOTDIRECTORY - nastaví kořenový adresář ve vašem segmentu, pod kterým budou uložena data vašeho registru.
    • REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR - nastaví umístění mezipaměti. V našem případě jej ukládáme do paměti. Můžete jej také nastavit tak, aby používal Redis.
    • REGISTRY_HEALTH_STORAGEDRIVER_ENABLED - Nastavením na hodnotu false zakážete službu kontroly stavu úložiště registru. V registru je chyba, která může způsobit problémy, pokud jej nenastavíte na hodnotu false.
  4. Registr Dockeru komunikuje přes port 5000, což je to, co jsme na našem serveru vystavili dockeru.

  5. ./auth:/etc/nginx/conf.d mapování zajišťuje, že všechna nastavení Nginx jsou dostupná v kontejneru.

  6. ./auth/nginx.conf:/etc/nginx/nginx.conf:ro mapuje soubor nastavení Nginx ze systému na soubor v kontejneru v režimu pouze pro čtení.

  7. ./logs:/var/log/nginx umožňuje přístup k protokolům Nginx v systému mapováním do adresáře protokolů Nginx v kontejneru.

  8. Nastavení registru Docker jsou uložena v /etc/docker/registry/config.yml soubor v kontejneru a namapovali jsme jej na config.yml soubor v aktuálním adresáři, který vytvoříme v dalším kroku.

Nastavit ověřování

Chcete-li nastavit ověřování HTTP, musíte nainstalovat httpd-tools balíček.

$ sudo dnf nainstalovat httpd-tools

Vytvořte soubor s hesly v ~/docker-registry/auth adresář.

$ htpasswd -Bc ~/docker-registry/auth/nginx.htpasswd user1Nové heslo:Znovu zadejte nové heslo:Přidání hesla pro uživatele user1

-c flag instruuje příkaz k vytvoření nového souboru a -B příznakem je použití algoritmu bcrypt podporovaného Dockerem. Nahraďte user1 s uživatelským jménem dle vašeho výběru.

Pokud chcete přidat další uživatele, spusťte příkaz znovu, ale bez -c vlajka.

$ htpasswd -B ~/docker-registry/auth/registry.password user2

Nyní bude soubor mapován do kontejneru registru pro ověření.

Krok 4 – Instalace protokolu SSL

Chcete-li nainstalovat certifikát SSL pomocí Let's Encrypt, musíme si stáhnout nástroj Certbot, který je dostupný z úložiště Epel.

Nainstalujte úložiště EPEL a Certbot.

$ sudo dnf install epel-release $ sudo dnf install certbot

Vygenerujte certifikát SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [e-mail chráněný] -d registry.example.com

Výše uvedený příkaz stáhne certifikát do /etc/letsencrypt/live/registry.example.com adresář na vašem serveru.

Vytvořte skupinu Diffie-Hellman certifikát.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Otestujte obnovení certifikátu.

$ sudo certbot renew --dry-run

Pokud bude suchý běh úspěšný, znamená to, že vaše certifikáty budou automaticky obnoveny.

Zkopírujte soubor Dhparam do kontejneru

Zkopírujte skupinu Diffie-Hellman certifikát do ~/docker-registry/auth adresář, který bude namapován na kontejner.

$ sudo cp /etc/ssl/certs/dhparam.pem ~/docker-registry/auth

Krok 5 – Konfigurace Nginx

Další krok zahrnuje konfiguraci serveru Nginx jako front-end proxy pro server registru Docker. Registr Docker je dodáván s vestavěným serverem pracujícím na portu 5000. Dáme jej za Nginx.

Vytvořte a otevřete soubor ~/docker-registry/auth/nginx.conf pro úpravy.

$ sudo nano ~/docker-registry/auth/nginx.conf

Vložte do něj následující kód.

events { worker_connections 1024;}http { upstream docker-registry { server registr:5000; } ## Nastavte proměnnou, která nám pomůže rozhodnout, zda potřebujeme přidat záhlaví ## 'Docker-Distribution-Api-Version'. ## Registr vždy nastaví tuto hlavičku. ## V případě, že nginx provádí auth, hlavička není nastavena ##, protože nginx se ověřuje před proxy. map $upstream_http_docker_distribution_api_version $docker_distribution_api_version { '' 'registry/2.0'; } server { poslouchat 443 ssl http2; název_serveru registry.example.com; # SSL ssl_certificate /etc/letsencrypt/live/registry.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/registry.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/registry.example.com/chain.pem; access_log /var/log/nginx/registry.access.log; error_log /var/log/nginx/registry.error.log; # Doporučení z https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-POLSHA13HEDCHA25050 -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_session_cache shared:SSL:10m; ssl_dhparam /etc/nginx.d/conf.d/dhparam.pem; resolver 8.8.8.8; # deaktivujte jakékoli limity, abyste se vyhnuli HTTP 413 pro nahrávání velkých obrázků client_max_body_size 0; # vyžadováno, aby se zabránilo HTTP 411:viz vydání #1486 (https://github.com/moby/moby/issues/1486) chunked_transfer_encoding on; umístění /v2/ { # Nepovolit připojení z dockeru 1.5 a dřívějších # docker starší než 1.6.0 nenastavil správně uživatelského agenta na příkaz ping, zachyťte uživatelské agenty "Go *" if ($http_user_agent ~ "^(docker\/ 1\.(3|4|5(?!\[0-9]-dev))|Go ).*$" ) { return 404; } # Chcete-li do v2 přidat základní ověřování, použijte nastavení auth_basic. auth_basic "Sféra registru"; auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd; ## Pokud je $docker_distribution_api_version prázdný, záhlaví se nepřidá. ## Viz direktiva map výše, kde je tato proměnná definována. add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version vždy; proxy_pass http://docker-registry; proxy_set_header Host $http_host; # vyžadováno pro docker klienta proxy_set_header X-Real-IP $remote_addr; # předat IP skutečného klienta proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $schéma; proxy_read_timeout 900; } }}

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni po dokončení.

Nakonfigurujte SELinux tak, aby umožňoval síťová připojení pro soukromý registr dockerů.

$ sudo setsebool -P httpd_can_network_connect on

Krok 6 – Spuštění registru Docker

Přepněte do adresáře Docker Registry.

$ cd ~/docker-registry

Spusťte kontejner dockeru.

$ docker-compose up -d

Zkontrolujte stav kontejnerů.

$ docker psCONTAINER ID OBRÁZKOVÝ PŘÍKAZ VYTVOŘEN STAV NÁZVY PORTŮ88d6addc1687 nginx:alpine "/docker-entrypoint.…" před 5 minutami Nárůst o 5 minut 80/tcp, 0.0.0.0:443->p4,43::tc>443/tcp docker-registry_nginx_12b112edc1c72 registry:2 "/entrypoint.sh /etc…" před 5 minutami Více o 5 minut 5000/tcp docker-registry_registry_1

Přihlaste se do registru Docker.

Přihlášení $ docker -u=testuser -p=testpassword https://registry.example.com

Můžete také otevřít adresu URL https://registry.example.com/v2/ ve vašem prohlížeči a požádá o uživatelské jméno a heslo. Měli byste vidět prázdnou stránku s {} na to.

Adresu URL na terminálu můžete zkontrolovat pomocí curl .

$ curl -u testuser -X ZÍSKEJTE https://registry.nspeaks.xyz/v2/Zadejte heslo hostitele pro uživatele 'testuser':{}

Stáhněte si nejnovější image dockeru Ubuntu.

$ docker pull ubuntu:latest

Označte tento obrázek pro soukromý registr.

Značka $ docker ubuntu:latest registry.example.com/ubuntu2004

Vložte obrázek do registru.

$ docker push registry.example.com/ubuntu2004

Otestujte, zda bylo odeslání úspěšné.

$ curl -u testuser -X ZÍSKEJTE https://registry.nspeaks.xyz/v2/_catalogZadejte heslo hostitele pro uživatele 'testuser':{"repositories":["ubuntu2004"]}

Po výzvě zadejte své ověřovací heslo Nginx a uvidíte seznam úložišť dostupných prostřednictvím registru.

Podívejte se na seznam obrázků Docker, které jsou aktuálně dostupné k použití.

$ $ Docker Images Repository Tag ID ID vytvořený sizeRegistry 2 D3241e050fc9 5 dní před 24,2 mbnginx alpine 53722defe627 5 dní před 23,4 mbhttpd 2 118b6Abf50 před 2 týdny MB

Krok 7 – Přístup a použití registru Docker z klientského počítače

Přihlaste se ke svému klient-server. V kroku 1 jsme nainstalovali Docker na klientský počítač.

Přihlaste se do soukromého registru Docker z klientského počítače.

Přihlášení $ docker -u=testuser -p=testpassword https://registry.example.com

Stáhněte obraz Ubuntu z registru.

$ docker pull registry.example.com/ubuntu2004

Seznam všech obrázků na vašem klientském počítači.

$ docker imagesREPOSITORY TAG ID OBRÁZKU VYTVOŘENO SIZEregistry.nspeaks.xyz/ubuntu2004 nejnovější ff0fea8310f3 před 2 týdny 72,8 MB

Vytvořte a spusťte kontejner pomocí staženého obrázku.

$ docker run -it registry.example.com/ubuntu2004 /bin/bash

Budete přihlášeni do prostředí uvnitř kontejneru Ubuntu.

[e-mail chráněn]:

Spusťte následující příkaz a zkontrolujte verzi systému Linux.

[e-mail chráněno]$ cat /etc/os-releaseNAME="Ubuntu"VERSION="20.04.4 LTS (Focal Fossa)"ID=ubuntuID_LIKE=debianPRETTY_NAME="Ubuntu 20.04.4 LTS"VERSION_ID="20.04"HOME_URL ="https://www.ubuntu.com/"SUPPORT_URL="https://help.ubuntu.com/"BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"PRIVACY_POLICY_URL="https:// www.ubuntu.com/legal/terms-and-policies/privacy-policy"VERSION_CODENAME=focalUBUNTU_CODENAME=focal

Nyní můžete začít používat svůj registr Docker ze svých klientských počítačů.

Závěr

Tímto končí náš tutoriál o nastavení soukromého registru Docker na serveru založeném na Rocky Linux 8, který používá Amazon S3 jako úložiště. Pokud máte nějaké dotazy, napište je do komentářů níže.


Rocky Linux
  1. Jak nastavit a používat soukromý registr dockerů

  2. Jak nainstalovat Docker na AlmaLinux / Rocky Linux

  3. Jak nainstalovat a nastavit Docker Container na Rocky Linux 8

  1. Jak nastavit soukromý registr dockerů v Kubernetes (k8s)

  2. Jak nastavit soukromý registr dockerů na Ubuntu 20.04

  3. Jak nainstalovat Docker a Docker-Compose na Rocky Linux 8

  1. Jak nainstalovat Padloc Password Manager na Rocky Linux 8

  2. Jak nastavit soukromý registr dockerů na Ubuntu 18.04 LTS

  3. Jak nainstalovat Docker na Rocky Linux 8