GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak vytvořit soukromý registr dockerů na Ubuntu Linux

Hledáte místo, kam bezpečně uložit své vlastní obrázky Dockeru pro své osobní projekty nebo je použít ve vaší organizaci? Nebo možná centralizovaný systém pro správu vašich procesů kontinuální integrace a nasazení? Místo, kde můžete libovolně stahovat a nahrávat vlastní obrázky pro vaši aplikaci a zlepšovat rychlost nasazení?

Už nehledejte! Soukromý registr Docker toto vše umožňuje! Tento podrobný návod vás provede vytvořením vlastního soukromého registru Docker. Ponořte se a začněte!

Předpoklady

Chcete-li pokračovat v tomto tutoriálu, ujistěte se, že máte následující:

  • Dva Ubuntu 20.04 LTS zařízení. Jeden bude hostitelem registru Docker a druhý bude fungovat jako klientský počítač pro odesílání požadavků do vašeho registru Docker.
  • NGINX je vyžadován pouze v hostitelském počítači pro nastavení šifrování SSL a ověřování HTTP.
  • Registrovaný název domény. NGINX bude směrovat provoz na váš registrovaný název domény do vašeho registru Docker spuštěného v kontejneru.
  • Pro tento výukový program potřebujete Docker v hostitelském i klientském počítači. Stačí výchozí instalace.
  • Docker-compose v hostitelském počítači registru Docker k nastavení a spuštění součástí registru Docker. Související:Vše, co potřebujete vědět o používání Docker Compose

Nastavení registru Docker

Prvním krokem, který musíte udělat, je nastavit registr Docker na hostitelském zařízení, který je poskytován jako bezplatný obraz na Docker Hub.

Namísto toho, abyste byli omezeni na vydávání příkazů Dockeru k provedení tohoto úkolu, vytvoříte docker-compose.yml soubor. Soubor používá formát souboru docker-compose a může relativně snadno nastavit součásti požadované pro registr Docker.

Chcete-li pokračovat, otevřete svého oblíbeného klienta SSH a připojte se k zařízení, které bude serverem registru.

1. V /home adresář, vytvořte adresář s názvem docker-registry pomocí mkdir příkaz:

# Creating working directory
mkdir docker-registry

2. Přejděte do docker-registru adresář:

# Navigate to the working directory
cd ~/docker-registry

3. Uvnitř registru dockerů adresář, vytvořte podadresář s názvem data . Uvnitř dat adresář je místo, kde bude registr Docker ukládat obrazy Docker. data Adresář funguje jako systém souborů pro registr Docker pro zachování obrazů Docker.

# Create filesystem to persist data
mkdir data

4. Uvnitř registru dockerů adresář, vytvořte docker-compose.yml soubor:

# Create the docker-compose file
nano docker-compose.yml 

Konfigurace nastavení registru naleznete v nově vytvořeném souboru. Mezi nastaveními si všimnete:

  • Nastaví registry službu s registry:latest obrázek s latest tag.
  • Nastaví zásady restartování pro registry službu always . Za předpokladu, že běží motor Docker, registry služba se po zastavení vždy restartuje.
  • ports sekce mapuje port 5000 v kontejneru registru na port 5000 na hostitelském počítači.
  • registry služby v environment sekce nastavuje proměnnou prostředí REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY k údajům dříve vytvořený adresář.
  • Docker vyžaduje svazek k uložení obrázků Docker v registry kontejner. Přidáte volumes objekt k mapování /dat adresář na hostitelském počítači do /data adresář v kontejneru.

Mapování uloží data do souborového systému hostitelského počítače namísto do kontejneru. Protože Docker nyní ukládá data na hostitelském počítači, lze je zálohovat, migrovat, šifrovat nebo nahradit.

Níže můžete vidět úplnou konfiguraci YAML pro komponenty potřebné ke spuštění a spuštění registru Docker. Zkopírujte níže uvedený YAML kód a vložte jej do docker-compose.yml soubor, který jste vytvořili, a uložte jej pomocí CTRL + S a stiskněte CTRL + X pro ukončení:

version: '3.3' 
services:
  registry:
    image: registry:latest 
		restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data 
    volumes:
      - ./data:/data 

Docker-compose spouští více kontejnerů jako jednu aplikaci. Soubor docker-compose.yml soubor konfiguruje tyto vícenásobné kontejnery jako součást služeb.

5. Nyní spusťte soubor docker-compose a vytvořte a spusťte registr Docker:

# Start docker registry application
sudo docker-compose up

Ve výstupu příkazu níže můžete vidět spuštěný registr Docker. Chcete-li aplikaci zavřít, stiskněte CTRL + C .

Nastavení NGINX

Nyní, když máte nastavený registr Docker, je čas nastavit NGINX na hostitelském počítači. NGINX bude předávat provoz z klientských zařízení do registru Docker. V tomto tutoriálu budete přesměrovat provoz přes název domény. Čtěte dále a vyřešte tento krok.

Zpočátku budete muset nastavit přesměrování portů NGINX pro vaši doménu prostřednictvím /etc/nginx/sites-available/název_vaší_domény soubor.

1. Vytvořte soubor pomocí následujícího příkazu:

# Creating configuration for your domain
sudo nano /etc/nginx/sites-available/your_domain_name 

Naleznete zde mnoho odkazů na your_domain_name v následujících sekcích . Tento řetězec je zástupný symbol. Až budete příkazy sami zkoušet, nezapomeňte jej nahradit názvem domény, kterou vlastníte. V příkladech registry.joeshiett.xyz je vybraný název domény.

2. Zkopírujte následující konfiguraci NGINX a přidejte ji do název_vaší_domény soubor, který jste vytvořili:

server {
	listen 80;
  # Replace your_domain_name with your domain name
  server_name your_domain_name;

    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://localhost:5000;
      proxy_set_header  Host              $http_host;   # required for docker client's sake
      proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
      proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;
      proxy_read_timeout                  900;
    }
}

3. Přesměrování portů ještě není dokončeno. Nejprve musíte připojit symbolický odkaz. Propojíte /etc/nginx/sites-available/název_vaší_domény konfiguračního souboru do /etc/nginx/sites-enabled/. Následuje úplný příkaz:

cd /etc/nginx/sites-enabled/ && sudo ln -s /etc/nginx/sites-available/your_domain_name .

4. Po vytvoření symbolického odkazu restartujte službu NGINX:

# Restarting Nginx service
sudo systemctl restart nginx 

Otevřete prohlížeč na klientském zařízení a přejděte na https://your_domain_name/v2/ pro přístup k v2 koncový bod, Docker HTTP API.

Obrázek níže ukazuje očekávaný výstup z hostitelského terminálu po navigaci na odkaz. Obrázek také ukazuje, že prohlížeč odeslal GET požadavek na Docker HTTP API prostřednictvím v2 koncový bod.

Po přechodu na v2 koncový bod přes odkaz, prázdný objekt JSON – {} – se zobrazí v okně prohlížeče.

Konfigurace velikosti nahrávaného souboru NGINX

Výchozí limit velikosti nahrávání NGINX je 1m , kde m znamená megabajt. Výchozí limit zdaleka nestačí pro nahrávání obrázků Docker do vašeho registru. Chcete-li tuto hodnotu změnit, upravte nginx.conf, takže NGINX přijímá nahrávání velkých souborů.

1. Ještě jednou se přihlaste k hostitelskému počítači.

2. Upravte soubor /etc/nginx/nginx.conf soubor:

3. Pod http sekce v nginx.conf soubor, přidejte následující řádek pro zvětšení nahrávané velikosti na 8 192 megabajtů a uložte soubor:

client_max_body_size 8192m;

Konfigurace bude vypadat nějak takto:

Nastavení SSL

K zabezpečení připojení k registru Docker je vyžadován certifikát SSL. Chcete-li přidat certifikát SSL, musíte nainstalovat Certbot na hostitele registru.

Certbot můžete nainstalovat pomocí správce balíčků snap. Správce balíčků Snap je již předinstalovaný v Ubuntu 20.04.

1. Chcete-li nainstalovat Certbot, spusťte na svém hostitelském počítači následující příkaz:

# Install certbot using the snap package manager
sudo snap install --classic certbot

2. Přidejte Certbot do PATH, aby příkazy Certbotu mohly fungovat vytvořením symbolického odkazu:

# Attaching certbot to PATH
sudo ln -s /snap/bin/certbot /usr/bin/certbot

3. Spuštěním tohoto příkazu získáte certifikát a Certbot automaticky upraví vaši konfiguraci NGINX a také povolí přístup HTTPS pro vaši doménu:

# Creating a certificate and enabling HTTPS access
sudo certbot --nginx

Certbot upraví název_vaší_domény konfigurační soubor na /etc/nginx/sites-enabled/ adresář a aplikujte na název své domény certifikát SSL.

Obrázek níže ukazuje konečnou konfiguraci vašeho /etc/nginx/sites-enabled/vaše_doména soubor bude vypadat po aplikaci certifikátů Certbotem.

Pokud přejdete na https://your_domain_name/ , zjistíte, že je zabezpečený certifikátem od Certbot.

Nastavení ověřování HTTP pro registr Docker

Vždy je dobré mít dobré bezpečnostní postupy. Zabezpečíte tak svůj registr Docker a omezíte přístup pouze na vás a některé další uživatele, které si možná budete přát přidat. Budete používat ověřování HTTP, které poskytuje HTTP Basic Auth .

1. Ověření HTTP vyžaduje htpasswd soubor s vaším uživatelským jménem a heslem. Chcete-li vytvořit htpasswd ověření, budete muset nainstalovat apache2-utils balíček:

# Installing apache2-utils package
sudo apt-get install apache2-utils

2. Po instalaci apache2-utils vytvořte registry.credentials soubor v /etc/nginx adresář s httpasswd příkaz. Přidejte preferované uživatelské jméno nahrazením your_username v příkazu níže. Poté po zobrazení výzvy přidejte heslo podle svých preferencí. Úplný příkaz a jeho výstup jsou uvedeny níže.

# Creating to creating auth credentials
sudo htpasswd -c /etc/nginx/registry.credentials your_username

3. Po vytvoření registry.credentials přejděte do konfiguračního souboru NGINX pro váš registr Docker na adrese /etc/nginx/sites-available/název_vaší_domény . Přidejte následující text do konfiguračního souboru NGINX na server sekce:

server {
	...
	...
	location / {
			...
			auth_basic            "Basic Auth";
      auth_basic_user_file  "/etc/nginx/registry.credentials";
			...
	}
}

4. Znovu restartujte NGINX a znovu použijte konfigurace pomocí následujícího příkazu:

# Restarting nginx
sudo systemctl restart nginx

Obrázek níže ukazuje, že když se pokusíte o přístup k https://název_vaší_domény/ ve vašem prohlížeči budete vyzváni k zadání uživatelského jména a hesla. Pro tento výukový program běží registr Docker na subdoméně registry.joeshiett.xyz s povoleným SSL.

Přesun obrázku do soukromého úložiště dockeru

Nyní, když je váš registr Docker spuštěn a je schopen přijímat větší nahrávání souborů, vložíte do něj obrázek. Chcete-li odeslat obrázek do registru Docker, musíte získat přístup ke svému klientskému počítači.

Pokud nemáte bitovou kopii Dockeru uloženou lokálně na klientském počítači, můžete si ji zdarma stáhnout z Docker Hub.

1. Spusťte následující příkaz pro stažení obrazu Alpine Linux z centra Docker, nastavte název obrazu na test-image a spusťte kontejner v interaktivním prostředí:

# Pull and run Alpine container
sudo docker run --name test-image -it alpine:latest /bin/sh

2. Jakmile jste v kontejneru Alpine, vytvořte soubor s názvem TEST . Tento soubor pak bude potvrzením toho, že obrázek, který stáhnete z registru Docker, je ten, který nyní upravujete:

# create a file called TEST
touch /TEST

3. Ukončete interaktivní shell zadáním exit na vašem terminálu.

4. Nyní vytvořte obraz Dockeru z kontejneru Alpine Docker s názvem test-image , právě jste přizpůsobili:

# Creating Docker image
sudo docker commit test-image your_domain_name/test-image:latest

Obraz Alpine, který jste dříve vytáhli a upravili, je nyní k dispozici lokálně s úložištěm nazvaným your_domain_name/test-image a tag latest .

5. Chcete-li odeslat nově vytvořený obraz do registru Docker, přihlaste se do registru Docker pomocí příkazu níže:

# Login to Docker registry
sudo docker login https://your_domain_name 

Budete vyzváni k zadání uživatelského jména a hesla, které jste nastavili v předchozí části. Výstup bude:

...
Login Succeeded
...

6. Po přihlášení odešlete označený obrázek do svého úložiště Docker:# Pushing docker image sudo docker push your_domain_name/test-image:latest

# Pushing docker image
sudo docker push your_domain_name/test-image:latest

Výstup příkazu bude vypadat takto:

Načítání obrázku ze soukromého úložiště dockeru

Nyní, když jste úspěšně vložili obrázek Dockeru do svého soukromého úložiště Docker, je čas stáhnout obrázek, který jste právě vložili.

1. Nejprve se musíte přihlásit do svého soukromého úložiště Docker:# Login to Docker registry sudo docker login https://your_domain_name

# Login to Docker registry
sudo docker login https://your_domain_name 

2. Po přihlášení stáhnete dříve vytvořený obraz Docker:

# Pull Docker image from Docker registry
sudo docker pull your_domain_name/test-image

Z obrázku níže můžete vidět, že Docker stáhne test-image úspěšně.

3. Čas na spuštění interaktivního shellu:

sudo docker run -it your_domain_name/test-image /bin/sh

4. V interaktivním prostředí spusťte následující příkaz:

ls

Z obrázku níže můžete vidět, že TEST dříve vytvořený soubor je uvnitř kontejneru.

Nyní jste úspěšně otestovali svůj registr Docker a můžete začít!

Závěr

V tomto tutoriálu jste vytvořili svůj vlastní soukromý registr Docker. Nainstalovali jste nezbytné předpoklady; nastavit ověřování SSL a HTTP. A pak jste konečně zatlačili a vytáhli obrázek z vašeho registru.

Jaké balíčky tedy plánujete odeslat do registru?


Docker
  1. Jak nastavit soukromý registr dockerů na Rocky Linux 8

  2. Jak nainstalovat Docker na Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  3. Jak vytvářet, zobrazovat a mazat kontejnery Docker v systému Linux

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

  2. Jak nainstalovat Docker na Ubuntu 22.04

  3. Jak nainstalovat Docker na Ubuntu 18.04?

  1. Jak vytvořit spouštěcí Ubuntu USB Stick na Linuxu

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

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