Autor del tema
#0
Docker ekosisteminin temel taşlarından biri olan Docker Registry, imajlarınızı depolamanıza, yönetmenize ve paylaşmanıza olanak tanıyan merkezi bir depodur. Geliştirme süreçlerinde ekipler arası koordinasyonu sağlamak, CI/CD boru hatlarını otomatikleştirmek ve imaj versiyonlarını kontrol altında tutmak için hayati bir rol oynar. Kendi özel Docker Registry sunucunuzu kurmak, bulut sağlayıcılara bağımlılığı azaltır, veri egemenliğini artırır ve şirket içi güvenlik politikalarına tam uyum sağlar. Bu kurulum, özellikle hassas veriler içeren veya özel ağlarda çalışması gereken uygulamalar için vazgeçilmezdir.
Özel bir Docker Registry sunucusu kurmadan önce bazı önemli ön gereksinimleri karşılamak ve sisteminizi buna uygun şekilde hazırlamak gerekir. Öncelikle, sunucunuzda çalışan bir Docker Engine kurulumunun olması şarttır. Ayrıca, sunucu işletim sisteminizin güncel ve stabil olduğundan emin olmalısınız; Ubuntu, CentOS gibi Linux dağıtımları genellikle tercih edilir. Yeterli disk alanı tahsis etmek de kritik öneme sahiptir, zira imajlar zamanla oldukça yer kaplayabilir. Özellikle performans açısından SSD diskler kullanmak deneyimi iyileştirecektir. Ağ yapılandırmasında, registry’nin dışarıdan erişilebilmesi için ilgili portların (genellikle 5000) açık olduğundan ve güvenlik duvarı kurallarının doğru şekilde ayarlandığından emin olmak gerekir. Örneğin, bu port dışarıya kapalı kalırsa, istemciler imajları çekemez veya itemez.
Kendi Docker Registry sunucunuzu kurmak oldukça basit birkaç adımdan oluşur. İlk olarak, bir Docker Engine kurulu olan sunucunuzda `docker run` komutunu kullanarak registry konteynerini başlatmalısınız. Genellikle `docker run -d -p 5000:5000 --restart=always --name registry registry:2` komutu bu iş için yeterlidir. Bu komut, registry imajını çeker, 5000 numaralı port üzerinden yayınlar ve sunucu yeniden başlatıldığında otomatik olarak çalışmasını sağlar. Registry konteyneri varsayılan olarak `/var/lib/registry` dizininde depolama yapar, ancak bir bind mount kullanarak bu dizini sunucunuzdaki kalıcı bir depolama alanına yönlendirmek veri kaybını önler. Örneğin, `-v /path/to/your/data:/var/lib/registry` parametresini eklemek bu amaçla kullanılır. Kurulumun ardından, `docker pull localhost:5000/myimage` gibi bir komutla yerel registry'nizin çalıştığını test edebilirsiniz.
Güvenli bir Docker Registry kullanımı için TLS/SSL şifrelemesi vazgeçilmezdir. Registry ile istemciler arasındaki iletişimin şifrelenmesi, hassas imaj verilerinin ağ üzerinde güvenle aktarılmasını sağlar. Kendi imzalı sertifikalarınızı oluşturabilir veya Let's Encrypt gibi bir sertifika sağlayıcısından geçerli bir sertifika temin edebilirsiniz. Sertifikaları oluşturduktan sonra, bu sertifika dosyalarını (genellikle `domain.crt` ve `domain.key`) sunucunuzda uygun bir dizine yerleştirmelisiniz. Ek olarak, Docker Registry konteynerini başlatırken bu sertifikaları ve anahtarları doğru şekilde belirtmeniz gerekir. Örneğin, `-v /path/to/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key` parametreleri ile konteyneri başlatarak TLS'yi etkinleştirebilirsiniz. Unutmayın ki, istemcilerin de sunucunun sertifikasını güvenilir olarak tanıması için bu sertifikanın istemci makinelerine dağıtılması gerekebilir.
Güvenli bir Docker Registry'nin önemli bir bileşeni de kullanıcı kimlik doğrulaması ve yetkilendirme mekanizmasıdır. Varsayılan olarak, registry herkesin erişimine açıktır; bu durum üretim ortamları için kesinlikle uygun değildir. Temel kimlik doğrulaması (Basic Authentication) genellikle tercih edilen basit bir yöntemdir. Bu yöntemde, `htpasswd` aracı kullanarak kullanıcı adları ve şifreler içeren bir dosya oluşturursunuz. Bu `htpasswd` dosyasını Docker Registry konteynerine bağlayarak kimlik doğrulamasını etkinleştirebilirsiniz. Örneğin, `REGISTRY_AUTH=htpasswd REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd` gibi çevre değişkenleri ve ` -v /path/to/auth:/auth` bağlamasıyla yetkilendirme sağlanır. Başka bir deyişle, sadece yetkili kullanıcılar imaj itme ve çekme işlemlerini gerçekleştirebilir. Ek olarak, daha gelişmiş senaryolar için LDAP veya OAuth gibi entegrasyonlar da mümkündür.
Docker Registry'nin verimli çalışması için depolama seçimi ve performans optimizasyonu büyük önem taşır. Konteyner imajları büyüdükçe ve sayıları arttıkça disk IO performansı kritik hale gelir. Bu nedenle, registry verilerini saklamak için hızlı SSD diskler kullanmak performansı önemli ölçüde artırır. Ayrıca, ağ dosya sistemleri (NFS, GlusterFS) veya bulut tabanlı depolama hizmetleri (Amazon S3, Google Cloud Storage, Azure Blob Storage) gibi harici depolama çözümlerini entegre etmek ölçeklenebilirlik sağlar. Ek olarak, registry üzerinde periyodik çöp toplama (garbage collection) işlemleri yaparak kullanılmayan imaj katmanlarını temizlemek disk alanından tasarruf etmenize yardımcı olur. `docker exec registry /bin/registry garbage-collect /etc/docker/registry/config.yml` komutuyla bu işlemi manuel olarak gerçekleştirebilirsiniz. Sonuç olarak, doğru depolama stratejisi ve düzenli bakım, registry'nizin uzun ömürlü ve performanslı olmasını sağlar.
Docker Registry sunucunuzu kurduktan sonra düzenli yönetim ve bakım işlemleri, sisteminizin sorunsuz çalışmasını sağlamak için hayati önem taşır. İlk olarak, registry konteynerinizin ve altındaki disk alanının izlenmesi gerekir. Disk alanı dolmak üzereyken uyarılar almak, olası kesintilerin önüne geçer. İkinci olarak, imajlarınızı etiketleme ve versiyonlama konusunda tutarlı bir politika izlemek karmaşıklığı azaltır. Ek olarak, periyodik olarak kullanılmayan veya eski imajları temizlemek için çöp toplama (garbage collection) işlemini gerçekleştirmeyi unutmamalısınız. Ancak bu işlemi yaparken registry'nin salt okunur moda alınması veya tamamen durdurulması veri bütünlüğü açısından önemlidir. Ayrıca, güvenlik güncellemelerini takip etmek ve registry imajını düzenli olarak güncellemek, olası güvenlik açıklarını kapatır. Son olarak, registry yapılandırmasını bir sürüm kontrol sisteminde (örneğin Git) tutmak, geri dönüşleri ve yapılandırma değişikliklerini kolaylaştırır.
Ön Gereksinimler ve Sistem Hazırlığı
Özel bir Docker Registry sunucusu kurmadan önce bazı önemli ön gereksinimleri karşılamak ve sisteminizi buna uygun şekilde hazırlamak gerekir. Öncelikle, sunucunuzda çalışan bir Docker Engine kurulumunun olması şarttır. Ayrıca, sunucu işletim sisteminizin güncel ve stabil olduğundan emin olmalısınız; Ubuntu, CentOS gibi Linux dağıtımları genellikle tercih edilir. Yeterli disk alanı tahsis etmek de kritik öneme sahiptir, zira imajlar zamanla oldukça yer kaplayabilir. Özellikle performans açısından SSD diskler kullanmak deneyimi iyileştirecektir. Ağ yapılandırmasında, registry’nin dışarıdan erişilebilmesi için ilgili portların (genellikle 5000) açık olduğundan ve güvenlik duvarı kurallarının doğru şekilde ayarlandığından emin olmak gerekir. Örneğin, bu port dışarıya kapalı kalırsa, istemciler imajları çekemez veya itemez.
Docker Registry Kurulumu Adımları
Kendi Docker Registry sunucunuzu kurmak oldukça basit birkaç adımdan oluşur. İlk olarak, bir Docker Engine kurulu olan sunucunuzda `docker run` komutunu kullanarak registry konteynerini başlatmalısınız. Genellikle `docker run -d -p 5000:5000 --restart=always --name registry registry:2` komutu bu iş için yeterlidir. Bu komut, registry imajını çeker, 5000 numaralı port üzerinden yayınlar ve sunucu yeniden başlatıldığında otomatik olarak çalışmasını sağlar. Registry konteyneri varsayılan olarak `/var/lib/registry` dizininde depolama yapar, ancak bir bind mount kullanarak bu dizini sunucunuzdaki kalıcı bir depolama alanına yönlendirmek veri kaybını önler. Örneğin, `-v /path/to/your/data:/var/lib/registry` parametresini eklemek bu amaçla kullanılır. Kurulumun ardından, `docker pull localhost:5000/myimage` gibi bir komutla yerel registry'nizin çalıştığını test edebilirsiniz.
TLS/SSL ile Güvenli Erişim
Güvenli bir Docker Registry kullanımı için TLS/SSL şifrelemesi vazgeçilmezdir. Registry ile istemciler arasındaki iletişimin şifrelenmesi, hassas imaj verilerinin ağ üzerinde güvenle aktarılmasını sağlar. Kendi imzalı sertifikalarınızı oluşturabilir veya Let's Encrypt gibi bir sertifika sağlayıcısından geçerli bir sertifika temin edebilirsiniz. Sertifikaları oluşturduktan sonra, bu sertifika dosyalarını (genellikle `domain.crt` ve `domain.key`) sunucunuzda uygun bir dizine yerleştirmelisiniz. Ek olarak, Docker Registry konteynerini başlatırken bu sertifikaları ve anahtarları doğru şekilde belirtmeniz gerekir. Örneğin, `-v /path/to/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key` parametreleri ile konteyneri başlatarak TLS'yi etkinleştirebilirsiniz. Unutmayın ki, istemcilerin de sunucunun sertifikasını güvenilir olarak tanıması için bu sertifikanın istemci makinelerine dağıtılması gerekebilir.
Kullanıcı Kimlik Doğrulaması ve Yetkilendirme
Güvenli bir Docker Registry'nin önemli bir bileşeni de kullanıcı kimlik doğrulaması ve yetkilendirme mekanizmasıdır. Varsayılan olarak, registry herkesin erişimine açıktır; bu durum üretim ortamları için kesinlikle uygun değildir. Temel kimlik doğrulaması (Basic Authentication) genellikle tercih edilen basit bir yöntemdir. Bu yöntemde, `htpasswd` aracı kullanarak kullanıcı adları ve şifreler içeren bir dosya oluşturursunuz. Bu `htpasswd` dosyasını Docker Registry konteynerine bağlayarak kimlik doğrulamasını etkinleştirebilirsiniz. Örneğin, `REGISTRY_AUTH=htpasswd REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd` gibi çevre değişkenleri ve ` -v /path/to/auth:/auth` bağlamasıyla yetkilendirme sağlanır. Başka bir deyişle, sadece yetkili kullanıcılar imaj itme ve çekme işlemlerini gerçekleştirebilir. Ek olarak, daha gelişmiş senaryolar için LDAP veya OAuth gibi entegrasyonlar da mümkündür.
Depolama ve Performans Optimizasyonu
Docker Registry'nin verimli çalışması için depolama seçimi ve performans optimizasyonu büyük önem taşır. Konteyner imajları büyüdükçe ve sayıları arttıkça disk IO performansı kritik hale gelir. Bu nedenle, registry verilerini saklamak için hızlı SSD diskler kullanmak performansı önemli ölçüde artırır. Ayrıca, ağ dosya sistemleri (NFS, GlusterFS) veya bulut tabanlı depolama hizmetleri (Amazon S3, Google Cloud Storage, Azure Blob Storage) gibi harici depolama çözümlerini entegre etmek ölçeklenebilirlik sağlar. Ek olarak, registry üzerinde periyodik çöp toplama (garbage collection) işlemleri yaparak kullanılmayan imaj katmanlarını temizlemek disk alanından tasarruf etmenize yardımcı olur. `docker exec registry /bin/registry garbage-collect /etc/docker/registry/config.yml` komutuyla bu işlemi manuel olarak gerçekleştirebilirsiniz. Sonuç olarak, doğru depolama stratejisi ve düzenli bakım, registry'nizin uzun ömürlü ve performanslı olmasını sağlar.
Registry Yönetimi ve Bakım İpuçları
Docker Registry sunucunuzu kurduktan sonra düzenli yönetim ve bakım işlemleri, sisteminizin sorunsuz çalışmasını sağlamak için hayati önem taşır. İlk olarak, registry konteynerinizin ve altındaki disk alanının izlenmesi gerekir. Disk alanı dolmak üzereyken uyarılar almak, olası kesintilerin önüne geçer. İkinci olarak, imajlarınızı etiketleme ve versiyonlama konusunda tutarlı bir politika izlemek karmaşıklığı azaltır. Ek olarak, periyodik olarak kullanılmayan veya eski imajları temizlemek için çöp toplama (garbage collection) işlemini gerçekleştirmeyi unutmamalısınız. Ancak bu işlemi yaparken registry'nin salt okunur moda alınması veya tamamen durdurulması veri bütünlüğü açısından önemlidir. Ayrıca, güvenlik güncellemelerini takip etmek ve registry imajını düzenli olarak güncellemek, olası güvenlik açıklarını kapatır. Son olarak, registry yapılandırmasını bir sürüm kontrol sisteminde (örneğin Git) tutmak, geri dönüşleri ve yapılandırma değişikliklerini kolaylaştırır.