
A GitLab integrált Dependency Proxy-val rendelkezik, amely gyorsítótárazza a Docker képeket. Korábban prémium szolgáltatásként a Dependency Proxy nyílt forráskódú volt, és 2020 novemberében az összes GitLab verzió számára elérhetővé vált. GitLab 13.6.
A Dependency Proxy átmenő gyorsítótárként viselkedik a Docker Hubon tárolt Docker-képeknél. A Dependency Proxy beállítása felgyorsíthatja a csővezetékeket és elősegíti a bennmaradást Docker sebességhatárai.
A függőségi proxy engedélyezése
A Dependency Proxy elérhetőségét egy példányszintű beállítás vezérli. A Dependency Proxy engedélyezéséhez a GitLab konfigurálása szükséges. Ez rövid idejű leállást okoz.
A szolgáltatás engedélyezéséhez adja hozzá a következő sort a telepítéshez /etc/gitlab/gitlab.rb fájl:
gitlab_rails["dependency_proxy_enabled"] = true
Mentse a fájlt, és futtassa a következő parancsot a terminálon:
sudo gitlab-ctl reconfigure
A fenti utasítások a GitLab Omnibus telepítésekre vonatkoznak. Ha forrásból telepítette, a függőségi proxyt belül engedélyezni kell a te config/gitlab.yml fájl.
A Dependency Proxy használata
A Dependency Proxy csak a GitLab csoportokkal működik. Jelenleg nem használható önálló személyes projektekkel.
A funkciót általában a CI-folyamat szkriptjeiben használják. Amikor egy képre hivatkozunk egy folyamaton belül, előtagolja a képet Docker Hub neve a CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX változó. Ez a változó automatikusan feloldja az aktív GitLab-csoport függőségi proxy URL-jét.
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/nodejs:latest
Ez a csővezeték a nodejs:latest tartály. A kép a Dependency Proxy-n keresztül húzódik. A későbbi futási folyamatoknak csak akkor kell elérniük a Docker Hub-ot, ha az upstream kép valóban megváltozik.
A függőségi proxyt manuálisan is elérheti, a GitLab CI-n kívül. Hitelesítenie kell a következővel: docker login első. Használnia kell GitLab felhasználónevét és jelszavát, vagy felhasználónevét és személyes hozzáférési tokent.
docker login gitlab.example.com --username username --password password
Miután hitelesítette, megteheti docker pull a GitLab Dependency Proxy használatával. Cserélje ki example-group az alábbi URL-ben a használni kívánt csoport nevével. A kihúzott képet a rendszer a Dependency Proxy-ba tárolja.
docker pull gitlab.example.com/example-group/dependency_proxy/containers/nodejs:latest
Ha a GitLab Container Registry-jét is használja (képek tárolásához) te build), vegye figyelembe, hogy a Dependency Proxy teljesen különálló és más URL-lel rendelkezik. Míg a konténernyilvántartás általában a saját aldomainjén van kitéve (pl registry.example.com), A Dependency Proxy ugyanazon gazdagépnéven keresztül érhető el, mint a GitLab webes felhasználói felület.
Hogyan működik a függőségi proxy
A Dependency Proxy egy másik Docker-nyilvántartásként jelenik meg. Amikor használni szeretné a proxyt, akkor docker login hozzá és akkor docker pull mint általában.
Ha a Dependency Proxy már gyorsítótárba helyezte a képet, akkor közvetlenül a Docker Hub használata nélkül adja vissza. Ellenkező esetben a kép a Docker Hubról kerül lehúzásra, a gyorsítótárba kerül, és visszakerül a Docker CLI-re.
A GitLab megpróbálja kapcsolatba lépni a Docker Hub-szal docker pull, akkor is, ha gyorsítótárazott kép áll rendelkezésre. A proxy-nak ugyanis ellenőriznie kell, hogy a kép frissült-e a Docker Hubon.
Ez az eljárás nem befolyásolja a Docker sebességkorlátozását. Dokkmunkás engedélyek ingyen HEAD kéri, hogy hasonlítsa össze a képfájl-verziókat Ha a Docker azt jelzi, hogy a gyorsítótárazott kép elavult, akkor a GitLab húzza a friss verziót (ütemkorláttalálattal jár). Ellenkező esetben a gyorsítótárazott kép visszaküldik, anélkül, hogy hozzáadná a Docker Hub sebességkorlátozásához tartozó összeget.
Ezek a jellemzők teszik a Dependency Proxy-t ideálisnak a CI-csővezetékekhez. Ha belép a proxyba, biztonságosan docker pull minden csővezeték-futáson, anélkül, hogy elérné a Docker Hub sebességkorlátját.
A függőségi proxy beállításainak konfigurálása
A Dependency Proxy idővel jelentős mennyiségű tárhelyet használhat fel. Képeket tárol a Docker Hubból; ezek a képek elég nagyok lehetnek attól függően, hogy mit használ.
A GitLab segítségével testre szabhatja a tárolási helyet. Állítsa be a dependency_proxy_storage_path beállítva /etc/gitlab/gitlab.rb ha dedikált tároló meghajtót szeretne használni.
gitlab_rails["dependency_proxy_storage_path"] = "/mnt/my-storage-drive"
A forrás telepítéseknek be kell állítaniuk a storage_path ingatlanon belül dependency_proxy szakasza config/gitlab.yml helyette.
Tárolhatja a tárolt képeket is egy objektumtárolón szolgáltatás, például az Amazon S3. Itt található egy példa az Omnibus konfigurációjára /etc/gitlab/gitlab.rb:
gitlab_rails["dependency_proxy_object_store_enabled"] = true # This is the S3 bucket name gitlab_rails["dependency_proxy_object_store_remote_directory"] = "gitlab-dependency-proxy" gitlab_rails["dependency_proxy_object_store_connection"] = { "provider" => "AWS", "region" => "eu-west-1", "aws_access_key_id" => "AWS_ACCESS_KEY_ID", "aws_secret_access_key" => "AWS_SECRET_ACCESS_KEY" }
A teljesítmény javítása érdekében a GitLab helyileg tárolja a képeket, majd a háttérben az S3-ra tölti fel. Ha inkább közvetlenül az S3-ra szeretne feltölteni, állítsa be a dependency_proxy_object_store_direct_upload beállítva true.
Át kell állítania a GitLab (sudo gitlab-ctl reconfigure), miután módosította a tárolási beállításokat. Ezután a Dependency Proxy tárolja a gyorsítótárazott képeket az új konfigurációval.
Tárhely felszabadítása
GitLab soha nem törli gyorsítótárazott függőségi proxy adatok. A csoportok gyorsítótárának tartalmát úgy tekintheti meg, hogy az oldalsávján kiválasztja a Csomagok és nyilvántartások> Függőségi proxy elemet. Ezen a képernyőn engedélyezheti vagy letilthatja a Dependency Proxy szolgáltatást a csoport számára, és megtekintheti a tárolt adatok teljes méretét. Azonban nem használhatja a felhasználói felületet a régi foltok törlésére.

Ha tárhelyet kell felszabadítania, akkor a GitLab API-t kell használnia. Van egyetlen végpont, amely lehetővé teszi az összes, az adott csoport számára tárolt függőségi proxy-adat törlését.
Hozzon létre egy személyes hozzáférési tokent: kattintson a profilra a jobb felső sarokban, kattintson a „Hozzáférési tokenek” lehetőségre a bal oldalsávon, és adjon hozzá egy új api hatálya.

Ezután használja curl a csoport függőségi proxy gyorsítótárának törléséhez:
curl --request DELETE --header "PRIVATE-TOKEN: <Access-Token>" https://gitlab.example.com/api/v4/groups/<Group-Id>/dependency_proxy/cache

A csoportazonosító megkereséséhez keresse fel a megtisztítani kívánt csoport kezdőlapját. A csoport azonosítója megjelenik a neve mellett.
Következtetés
A Dependency Proxy engedélyezése egy egyszerű lépés, amely javítja a csővezetékek rugalmasságát. Ha a Docker Hub leáll, akkor a proxy továbbra is gyorsítótárazott képváltozatokkal látja el a folyamatot.
A Dependency Proxy segít abban is, hogy a Docker Hub tarifakeretein belül maradjon. Csak akkor kell képeket húznia a Docker Hubról, amikor azok valóban megváltoznak. Egy aktív csapat számára, amely naponta sok csővezetéket futtat, ez segíthet abban, hogy ne kelljen prémium Docker Hub-csomagra frissíteni.
