Takip et

Neden Kendi Özel Docker Kayıt Defterinize İhtiyaç Duyarsınız?

Ubuntu Üzerinde Özel Docker Kayıt Defteri Kurulumu: Kapsamlı Rehber

Şirket içi yazılım geliştirme süreçlerinde veya hassas verilerle çalışırken, Docker imajlarınızı herkese açık Docker Hub yerine kendi kontrolünüzde, güvenli bir ortamda saklamak ister misiniz? Bu makale, Ubuntu sunucunuzda kendi özel Docker kayıt defterinizi nasıl kuracağınızı, yöneteceğinizi ve güvenli hale getireceğinizi adım adım açıklıyor.

Neden Kendi Özel Docker Kayıt Defterinize İhtiyaç Duyarsınız?

Modern yazılım geliştirme dünyasında konteynerleştirme, uygulamaları paketleme ve dağıtma şeklimizi temelden değiştirdi. Docker, bu devrimin öncüsü olarak, geliştiricilere ve operasyon ekiplerine büyük kolaylıklar sunuyor. Docker imajları, uygulamanızın çalışması için gerekli tüm kodları, çalışma zamanlarını, sistem araçlarını, kütüphaneleri ve ayarları içeren hafif, bağımsız ve yürütülebilir paketlerdir. Bu imajlar genellikle Docker Hub gibi herkese açık kayıt defterlerinde depolanır ve buradan çekilir. Ancak, her senaryo için herkese açık bir kayıt defteri kullanmak uygun olmayabilir.

Özellikle kurumsal ortamlarda, hassas veya tescilli yazılımlarla çalışırken, imajlarınızın güvenliği ve gizliliği en üst düzeyde önceliklidir. Kendi özel Docker kayıt defterinizi kurmak, bu tür endişeleri gidermenin en etkili yoludur. Öncelikle, veri egemenliği ve uyumluluk açısından kritik bir avantaj sağlar. Şirketinizin veri politikaları veya sektör düzenlemeleri (örneğin GDPR, HIPAA) gereği verilerin belirli bir coğrafi bölgede kalması gerektiğinde, özel bir kayıt defteri size tam kontrol sunar. Ayrıca, herkese açık kayıt defterlerinin yaşadığı olası kesintilerden veya performans sorunlarından etkilenmezsiniz. Kendi sunucularınızda barındırdığınız için, ağ gecikmeleri azalır ve imaj çekme/yükleme işlemleri daha hızlı gerçekleşir, bu da özellikle CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) süreçlerinizde verimliliği artırır.

Bir diğer önemli nokta ise maliyet kontrolüdür. Docker Hub’ın ücretsiz katmanı belirli sınırlamalara sahipken, özel bir kayıt defteri ile depolama ve bant genişliği maliyetleri üzerinde doğrudan kontrol sahibi olursunuz. Büyük ölçekli ekipler ve projeler için bu, uzun vadede önemli tasarruflar sağlayabilir. Güvenlik açısından bakıldığında, kendi kayıt defterinizde kimlik doğrulama, yetkilendirme ve erişim kontrol mekanizmalarını tamamen kendi şirket politikalarınıza göre yapılandırabilirsiniz. Örneğin, yalnızca belirli IP adreslerinden veya VPN üzerinden erişime izin verebilir, LDAP veya Active Directory entegrasyonu ile mevcut şirket kimlik doğrulama sistemlerinizi kullanabilirsiniz. Kendi özel kayıt defterinizi kurarak, Docker imajlarınızın yaşam döngüsü üzerinde tam kontrol sahibi olur, güvenlik açıklarını daha hızlı tespit edip giderebilir ve şirketinizin güvenlik standartlarına tam uyum sağlayabilirsiniz. Bu, özellikle hassas iş yükleri ve kritik uygulamalar geliştiren firmalar için vazgeçilmez bir çözümdür.

Ubuntu Üzerinde Docker Kurulumu ve Temel Hazırlıklar Nasıl Yapılır?

Özel Docker kayıt defterimizi kurmadan önce, Ubuntu sunucumuzda Docker’ın kendisinin kurulu ve çalışır durumda olması gerekir. Bu bölüm, sıfırdan bir Ubuntu sunucusu üzerinde Docker Engine’i kurmak için gerekli adımları ve temel sistem hazırlıklarını kapsar. Öncelikle, güncel bir Ubuntu sunucunuz olduğundan ve sudo yetkilerine sahip bir kullanıcı ile giriş yaptığınızdan emin olun. Bu rehber, Ubuntu 20.04 LTS veya daha yeni sürümler için geçerlidir, ancak adımlar çoğu güncel Ubuntu sürümünde benzer şekilde çalışacaktır.

İlk adım olarak, sistem paket dizinini güncellemek ve mevcut paketleri yükseltmek her zaman iyi bir uygulamadır. Bu, herhangi bir bağımlılık sorununu önlemeye yardımcı olur ve en güncel yazılım sürümlerini kullanmanızı sağlar. Terminalinizde aşağıdaki komutları çalıştırın:


sudo apt update
sudo apt upgrade -y
  

Paketler güncellendikten sonra, Docker’ın APT deposunu HTTPS üzerinden kullanabilmesi için gerekli paketleri yüklememiz gerekiyor. Bu paketler, Docker deposundan güvenli bir şekilde indirme yapmamızı sağlar:


sudo apt install ca-certificates curl gnupg lsb-release -y
  

Şimdi Docker’ın resmi GPG anahtarını sistemimize ekleyelim. Bu anahtar, indirdiğimiz Docker paketlerinin orijinalliğini doğrulamak için kullanılır ve kötü niyetli yazılımların yüklenmesini engeller:


sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  

GPG anahtarı eklendikten sonra, Docker’ın resmi APT deposunu sistemimizin kaynak listesine ekleyebiliriz. Bu sayede, Docker paketlerini doğrudan Docker’ın kendi sunucularından çekebiliriz:


echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  

Depoyu ekledikten sonra, yeni depoyu algılaması için paket dizinimizi tekrar güncellememiz gerekiyor:


sudo apt update
  

Artık Docker Engine’i ve ilgili araçları yüklemeye hazırız. Aşağıdaki komut, Docker Engine, containerd ve Docker Compose’u kuracaktır:


sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
  

Kurulum tamamlandıktan sonra, Docker servisinin otomatik olarak başladığından ve düzgün çalıştığından emin olmak için durumunu kontrol edebiliriz:


sudo systemctl status docker
  

Eğer her şey yolundaysa, çıktıda “active (running)” ifadesini görmelisiniz. Son olarak, Docker komutlarını sudo kullanmadan çalıştırabilmek için mevcut kullanıcımızı docker grubuna ekleyelim. Bu, geliştirme ve yönetim süreçlerini kolaylaştırır, ancak güvenlik açısından dikkatli olunmalıdır:


sudo usermod -aG docker $USER
  

Bu değişikliklerin etkili olması için oturumu kapatıp tekrar açmanız veya sunucuyu yeniden başlatmanız gerekebilir. Oturumu yeniden başlattıktan sonra, Docker kurulumunu basit bir “hello-world” imajı çekerek test edebiliriz:


docker run hello-world
  

Bu komut, Docker’ın düzgün çalıştığını gösteren bir mesaj çıktısı vermelidir. Temel hazırlıklar tamamlanmış olup, artık özel Docker kayıt defterimizi kurmaya geçebiliriz. Güvenlik amacıyla, Ubuntu’nun yerleşik güvenlik duvarı UFW’yi etkinleştirip gerekli portları açmak da iyi bir adımdır. Örneğin, Docker kayıt defteri genellikle 5000 numaralı portu kullanır:


sudo ufw allow 22/tcp  # SSH için
sudo ufw allow 5000/tcp # Docker Registry için
sudo ufw enable
sudo ufw status
  

Bu adımlarla, kayıt defteri kurulumu için sağlam bir temel oluşturmuş olursunuz.

Özel Docker Kayıt Defteri Kurulumu: Adım Adım Rehber

Docker ve temel sistem hazırlıklarımız tamamlandığına göre, artık kendi özel Docker kayıt defterimizi kurmaya başlayabiliriz. Docker’ın resmi kayıt defteri imajını kullanarak bu işlemi oldukça kolay bir şekilde gerçekleştirebiliriz. Bu bölüm, temel bir kayıt defteri kurulumunu ve testini adım adım açıklar. Ancak unutmayın ki, bu ilk kurulum güvenlik önlemleri içermez; sonraki bölümlerde güvenlik adımlarını ele alacağız.

Öncelikle, kayıt defteri verilerini kalıcı hale getirmek için bir dizin oluşturmamız gerekiyor. Docker konteynerleri varsayılan olarak geçicidir, yani konteyner silindiğinde içindeki tüm veriler de kaybolur. Bu durumu önlemek için, imajlarımızın depolanacağı bir dizini sunucumuzda oluşturup, bu dizini konteynerin içine bağlayacağız (volume mount). Örneğin, /opt/docker-registry dizinini kullanabiliriz:


sudo mkdir -p /opt/docker-registry
  

Şimdi Docker kayıt defteri konteynerini çalıştırabiliriz. Bu işlem için Docker’ın resmi registry imajını kullanacağız. Konteyneri, 5000 numaralı porttan dışarıya açacak ve oluşturduğumuz dizini konteynerin içindeki /var/lib/registry yoluna bağlayacak şekilde yapılandıracağız. Ayrıca, konteynerin sistem yeniden başlatıldığında otomatik olarak başlaması için --restart always seçeneğini ekleyeceğiz:


docker run -d \
  -p 5000:5000 \
  --restart always \
  --name my-private-registry \
  -v /opt/docker-registry:/var/lib/registry \
  registry:2
  

Bu komutun açıklaması şöyledir:

  • -d: Konteyneri arka planda (detached mode) çalıştırır.
  • -p 5000:5000: Sunucunun 5000 numaralı portunu konteynerin 5000 numaralı portuna eşler. Docker Registry varsayılan olarak 5000 portunu kullanır.
  • --restart always: Konteynerin her zaman yeniden başlamasını sağlar (sunucu yeniden başlatıldığında veya konteyner çöktüğünde).
  • --name my-private-registry: Konteynerimize kolayca tanınabilecek bir isim verir.
  • -v /opt/docker-registry:/var/lib/registry: Sunucumuzdaki /opt/docker-registry dizinini, konteyner içindeki kayıt defteri verilerinin depolandığı /var/lib/registry dizinine bağlar. Bu, imajlarımızın kalıcı olmasını sağlar.
  • registry:2: Kullanılacak Docker imajının adıdır (Docker Registry’nin 2. sürümü).

Konteynerin başarıyla çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:


docker ps
  

Çıktıda my-private-registry isimli konteynerin “Up” durumda olduğunu görmelisiniz. Kayıt defterimiz artık çalışır durumda! Ancak, bu haliyle güvenli değildir ve varsayılan olarak HTTP üzerinden erişilebilirdir. Docker istemcisi, varsayılan olarak güvenli olmayan (HTTP) kayıt defterlerine imaj göndermeye veya çekmeye izin vermez.

Bu sorunu geçici olarak aşmak ve kayıt defterimizi test etmek için, Docker daemon’ımızın yapılandırmasını değiştirmemiz gerekiyor. Bu, sadece test ve geliştirme ortamlarında veya dahili, izole ağlarda önerilen bir yöntemdir. Üretim ortamlarında mutlaka HTTPS kullanılmalıdır. Docker daemon yapılandırma dosyasını (/etc/docker/daemon.json) düzenleyerek güvenli olmayan kayıt defterimizi ekleyeceğiz. Eğer bu dosya yoksa oluşturmanız gerekir:


sudo nano /etc/docker/daemon.json
  

Dosyanın içine aşağıdaki içeriği ekleyin (YOUR_SERVER_IP yerine Ubuntu sunucunuzun IP adresini veya alan adını yazın):


{
  "insecure-registries": ["YOUR_SERVER_IP:5000"]
}
  

Değişiklikleri kaydedip çıktıktan sonra, Docker daemon’ı yeniden başlatmanız gerekir ki yeni yapılandırma etkili olsun:


sudo systemctl restart docker
  

Şimdi kayıt defterimizi test edebiliriz. Öncelikle, yerel bir imajı etiketlememiz ve ardından özel kayıt defterimize göndermemiz gerekiyor. Örneğin, hello-world imajını kullanalım:


docker pull hello-world
docker tag hello-world YOUR_SERVER_IP:5000/my-hello-world
docker push YOUR_SERVER_IP:5000/my-hello-world
  

Eğer push işlemi başarılı olursa, imajınız artık özel kayıt defterinizde depolanmış demektir. Bu imajı çekerek de test edebiliriz:


docker rmi YOUR_SERVER_IP:5000/my-hello-world # Yerel kopyayı sil
docker pull YOUR_SERVER_IP:5000/my-hello-world
  

Bu adımlar, temel bir özel Docker kayıt defterinin kurulumunu ve işlevselliğini doğrulamak için yeterlidir. Bir sonraki bölümde, bu kayıt defterini üretim ortamına uygun hale getirmek için HTTPS ve kimlik doğrulama gibi güvenlik önlemlerini nasıl ekleyeceğimizi inceleyeceğiz. Bu, hassas imajlarınızı güvenli bir şekilde depolamanız için kritik bir adımdır.

Güvenli Bir Özel Docker Kayıt Defteri Oluşturma: HTTPS ve Kimlik Doğrulama

Yukarıdaki adımlarla temel bir özel Docker kayıt defteri kurmuş olsak da, bu kurulum üretim ortamları için kesinlikle uygun değildir. Çünkü imajlar HTTP üzerinden şifresiz olarak aktarılır ve herhangi bir kimlik doğrulama mekanizması bulunmaz. Bu durum, veri güvenliği ve gizliliği açısından ciddi riskler taşır. Bu bölümde, kayıt defterimizi HTTPS ile güvenli hale getirmeyi ve temel kimlik doğrulama (Basic Auth) eklemeyi ele alacağız. Üretim ortamlarında önerilen yaklaşım, Let’s Encrypt ile ücretsiz SSL/TLS sertifikaları kullanarak HTTPS sağlamak ve Nginx gibi bir ters proxy kullanmaktır.

TLS/SSL Sertifikaları ile HTTPS Sağlama

Kayıt defterimize HTTPS sağlamak için bir SSL/TLS sertifikasına ihtiyacımız var. Geliştirme veya test ortamları için kendinden imzalı (self-signed) sertifikalar kullanabiliriz, ancak üretim için güvenilir bir sertifika yetkilisinden (CA) alınmış bir sertifika gereklidir. Let’s Encrypt, ücretsiz ve otomatik sertifikalar sunarak bu süreci kolaylaştırır. Nginx’i bir ters proxy olarak kullanıp, Let’s Encrypt ile sertifika alacağız.

Nginx Kurulumu ve Yapılandırması

İlk olarak, Nginx’i sunucumuza kuralım:


sudo apt install nginx -y
  

Nginx kurulduktan sonra, Docker Registry’ye gelen istekleri yönlendirecek bir yapılandırma dosyası oluşturalım. Örneğin, /etc/nginx/sites-available/docker-registry.conf:


sudo nano /etc/nginx/sites-available/docker-registry.conf
  

İçeriği aşağıdaki gibi doldurun (your.domain.com yerine kayıt defterinize erişmek için kullanacağınız alan adını yazın):


upstream docker-registry {
  server 127.0.0.1:5000;
}

server {
  listen 80;
  server_name your.domain.com;

  location / {
    return 301 https://$host$request_uri;
  }
}

server {
  listen 443 ssl;
  server_name your.domain.com;

  ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;

  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

  client_max_body_size 0;
  chunked_transfer_encoding on;

  location /v2/ {
    # proxy_pass'tan önce kimlik doğrulama (sonraki adımda eklenecek)
    # auth_basic "Restricted Registry";
    # auth_basic_user_file /etc/nginx/conf.d/docker-registry.htpasswd;

    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;
  }
}
  

Bu yapılandırmada, HTTP istekleri otomatik olarak HTTPS’ye yönlendirilir ve 443 portu üzerinden gelen HTTPS istekleri docker-registry upstream’ine (yani 127.0.0.1:5000’deki Docker Registry konteynerimize) iletilir. Sertifika yolları Let’s Encrypt’in varsayılan yollarıdır.

Şimdi bu yapılandırmayı etkinleştirelim ve Nginx’i yeniden başlatalım:


sudo ln -s /etc/nginx/sites-available/docker-registry.conf /etc/nginx/sites-enabled/
sudo nginx -t # Yapılandırma hatası var mı kontrol et
sudo systemctl restart nginx
  

Güvenlik duvarınızda (UFW) 80 ve 443 portlarını açmayı unutmayın:


sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
  

Let’s Encrypt ile Sertifika Alma

Certbot ile Let’s Encrypt sertifikası almak için Certbot’u kuralım:


sudo apt install certbot python3-certbot-nginx -y
  

Şimdi sertifikayı alabiliriz. Certbot, Nginx yapılandırmanızı otomatik olarak algılayıp güncelleyebilir:


sudo certbot --nginx -d your.domain.com
  

Certbot size e-posta adresi soracak ve hizmet şartlarını kabul etmenizi isteyecektir. Başarılı olursa, Nginx yapılandırma dosyanız otomatik olarak güncellenecek ve sertifikalarınız /etc/letsencrypt/live/your.domain.com/ altına yerleştirilecektir.

Kimlik Doğrulama Ekleme (Basic Auth)

Kayıt defterimize erişimi kısıtlamak için Basic Auth kullanacağız. Bu, Nginx tarafından sağlanır ve kullanıcı adı/şifre ile koruma sağlar. İlk olarak, htpasswd aracını yüklememiz gerekiyor:


sudo apt install apache2-utils -y
  

Şimdi bir kullanıcı adı ve şifre dosyası oluşturalım. Örneğin, /etc/nginx/conf.d/docker-registry.htpasswd:


sudo htpasswd -Bc /etc/nginx/conf.d/docker-registry.htpasswd your_username
  

your_username yerine kullanmak istediğiniz kullanıcı adını yazın. Komut sizden bir şifre girmenizi isteyecektir. Daha fazla kullanıcı eklemek için -c parametresini kullanmadan aynı komutu çalıştırabilirsiniz (-c dosyayı yeniden oluşturur).

Şimdi Nginx yapılandırma dosyamızı (/etc/nginx/sites-available/docker-registry.conf) düzenleyerek Basic Auth’u etkinleştirelim. location /v2/ { ... } bloğunun içine aşağıdaki satırları ekleyin (yorum satırlarını kaldırın):


    auth_basic "Restricted Registry";
    auth_basic_user_file /etc/nginx/conf.d/docker-registry.htpasswd;
  

Değişiklikleri kaydedin ve Nginx’i yeniden başlatın:


sudo systemctl restart nginx
  

Docker İstemcisini Yapılandırma

Artık kayıt defterimiz HTTPS ile güvenli ve kimlik doğrulamalı. Docker istemcinizin bu kayıt defteriyle etkileşime geçebilmesi için login komutunu kullanması gerekir:


docker login your.domain.com
  

Komut sizden kullanıcı adınızı ve şifrenizi isteyecektir (htpasswd ile oluşturduğunuz). Başarılı bir girişten sonra, imajları güvenli bir şekilde çekebilir ve gönderebilirsiniz:


docker pull hello-world
docker tag hello-world your.domain.com/my-secure-hello-world
docker push your.domain.com/my-secure-hello-world
docker pull your.domain.com/my-secure-hello-world
  

Bu adımlarla, özel Docker kayıt defterinizi üretim ortamına uygun, güvenli bir şekilde kurmuş olursunuz. Bu sayede, hassas imajlarınız şifreli bir şekilde iletilir ve sadece yetkili kullanıcılar tarafından erişilebilir hale gelir. Bir sonraki bölümde, kayıt defteri yönetimi ve ileri düzey ipuçlarına değineceğiz.

Docker Kayıt Defteri Yönetimi ve İleri Düzey İpuçları

Özel Docker kayıt defterinizi güvenli bir şekilde kurduktan sonra, onu etkili bir şekilde yönetmek ve performansını optimize etmek önemlidir. Bu bölüm, kayıt defteri yönetimi için pratik ipuçları ve ileri düzey konuları ele almaktadır. Bu sayede, kayıt defterinizin sorunsuz çalışmasını sağlayabilir ve geliştirme süreçlerinizi daha da hızlandırabilirsiniz.

Veri Kalıcılığı ve Depolama

Kayıt defteri konteynerini çalıştırırken, imaj verilerinin kalıcılığını sağlamak için bir bind mount (-v /opt/docker-registry:/var/lib/registry) kullandık. Bu, verilerin sunucunuzun dosya sisteminde güvenli bir şekilde depolandığı anlamına gelir. Ancak, büyük ölçekli ve yüksek erişilebilirlikli senaryolar için, harici depolama çözümlerini (örneğin, AWS S3, Google Cloud Storage, Azure Blob Storage) kullanmayı düşünebilirsiniz. Docker Registry, çeşitli depolama arka uçlarını destekler. Bu, özellikle kayıt defterinizin tek bir sunucunun depolama alanıyla sınırlı kalmamasını sağlar ve yedekleme/geri yükleme işlemlerini kolaylaştırır.

Kayıt defteri yapılandırmasını değiştirmek için, genellikle bir config.yml dosyası kullanılır. Bu dosyayı sunucunuzda oluşturup, konteynerin içine volume olarak bağlayabilirsiniz. Örneğin, S3 kullanmak için /opt/docker-registry/config.yml dosyasına şunları ekleyebilirsiniz:


version: 0.1
log:
  fields:
    service: registry
storage:
  s3:
    bucket: your-s3-bucket-name
    region: your-s3-region
    encrypt: true
    secure: true
  cache:
    blobdescriptor: inmemory
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
  tls:
    certificate: /etc/nginx/certs/fullchain.pem # Nginx'in kullandığı sertifika yolu
    key: /etc/nginx/certs/privkey.pem # Nginx'in kullandığı anahtar yolu
auth:
  htpasswd:
    realm: Registry Realm
    path: /etc/nginx/conf.d/docker-registry.htpasswd # Nginx'in kullandığı htpasswd yolu
  

Bu config.yml dosyasını konteynere bağlarken, Nginx’in kullandığı sertifika ve htpasswd dosyalarını da konteynere bağlamanız gerekecektir. Ancak, bu yapılandırma Nginx’i ters proxy olarak kullanırken genellikle Nginx tarafında yapılır ve kayıt defteri konteyneri HTTP olarak kalır. Yukarıdaki config.yml örneği daha çok doğrudan TLS sonlandırması ve kimlik doğrulamasını kayıt defteri konteyneri içinde yapmak için geçerlidir, ki bu Nginx ters proxy senaryosunda tavsiye edilmez. Nginx kullanıyorsak, kayıt defteri konteyneri genellikle HTTP üzerinden çalışır ve Nginx, TLS ile kimlik doğrulamasını üstlenir.

Garbage Collection (Çöp Toplama)

Zamanla, kayıt defterinizde kullanılmayan veya eski imaj katmanları birikecektir. Bu katmanlar disk alanınızı tüketir ve kayıt defterinizin performansını düşürebilir. Docker Registry, bu “çöp”ü temizlemek için bir garbage collection aracı sağlar. Çöp toplama işlemini çalıştırmadan önce kayıt defterini okuma-yazma işlemlerine kapatmanız önerilir, aksi takdirde veri bozulması riski olabilir. Bu nedenle, genellikle bakım pencerelerinde veya kayıt defterinin daha az kullanıldığı zamanlarda yapılır.

Konteynerin çalıştığı sunucuda aşağıdaki komutu kullanarak çöp toplama işlemini başlatabilirsiniz:


docker exec -it my-private-registry registry garbage-collect /etc/docker/registry/config.yml
  

Bu komut, kayıt defteri konteynerinin içindeki registry komutunu çağırarak yapılandırma dosyasına göre gereksiz katmanları temizler. Çöp toplama işlemi tamamlandıktan sonra, disk alanınızın bir kısmının geri kazanıldığını fark edeceksiniz. Düzenli aralıklarla bu işlemi yapmak, kayıt defterinizin sağlıklı kalmasını sağlar.

İzleme ve Günlükleme

Kayıt defterinizin sağlığını ve performansını izlemek, olası sorunları proaktif olarak tespit etmek için hayati öneme sahiptir. Docker Registry, standart çıkışa (stdout) günlükler gönderir. Bu günlükleri Docker’ın kendi günlük mekanizmasıyla (docker logs my-private-registry) veya merkezi bir günlük toplama sistemine (ELK Stack, Grafana Loki vb.) yönlendirerek izleyebilirsiniz. Ayrıca, kayıt defterinizin konteyner metriklerini (CPU, bellek, disk I/O) izlemek için Prometheus ve Grafana gibi araçları kullanabilirsiniz. Bu, özellikle yüksek yüklü ortamlarda kayıt defterinin darboğazlarını tespit etmek için önemlidir.

CI/CD Entegrasyonu

Özel Docker kayıt defterinizin en büyük avantajlarından biri, CI/CD süreçlerinize sorunsuz bir şekilde entegre olabilmesidir. Geliştirme ekipleri, uygulamalarını Docker imajları olarak oluşturup doğrudan özel kayıt defterinize gönderebilir. CI/CD araçlarınız (Jenkins, GitLab CI, GitHub Actions, Azure DevOps vb.) daha sonra bu imajları otomatik olarak çekip test, sahneleme veya üretim ortamlarına dağıtabilir. Bu, yazılım dağıtım süreçlerinizi otomatikleştirir, hızlandırır ve insan hatasını azaltır.

Örneğin, bir GitLab CI yapılandırmasında, özel kayıt defterinize giriş yapmak ve imaj göndermek için aşağıdaki gibi bir adım kullanabilirsiniz:


stages:
  - build
  - deploy

build_image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $YOUR_DOMAIN_COM
    - docker build -t $YOUR_DOMAIN_COM/my-app:$CI_COMMIT_SHORT_SHA .
    - docker push $YOUR_DOMAIN_COM/my-app:$CI_COMMIT_SHORT_SHA
  

Bu örnekte, $YOUR_DOMAIN_COM, $CI_REGISTRY_USER ve $CI_REGISTRY_PASSWORD gibi değişkenler GitLab CI tarafından sağlanır veya proje ayarlarında tanımlanır. Bu tür bir entegrasyon, geliştiricilerin kodlarını hızla imaja dönüştürüp dağıtım için hazır hale getirmelerini sağlar.

Yedekleme ve Geri Yükleme

Kayıt defteri verilerinizin düzenli yedeklerini almak kritik öneme sahiptir. /opt/docker-registry dizinini (veya kullandığınız depolama birimini) düzenli olarak yedeklemelisiniz. Basit bir rsync veya tar komutu ile bu işlemi gerçekleştirebilirsiniz. Harici depolama kullanıyorsanız (S3 gibi), bu hizmetlerin kendi yedekleme ve sürümleme özelliklerinden faydalanabilirsiniz. Bir felaket durumunda, yedeklediğiniz verileri geri yükleyerek kayıt defterinizi hızla çalışır duruma getirebilirsiniz.

Bu ileri düzey ipuçları ve yönetim uygulamaları, özel Docker kayıt defterinizin sadece çalışmasını değil, aynı zamanda güvenli, performanslı ve sürdürülebilir olmasını sağlar. Bu sayede, konteyner tabanlı geliştirme ve dağıtım stratejilerinizde tam potansiyeline ulaşabilirsiniz.

Mobil Uyumlu Bir Yaklaşım: Yönetim ve İzleme Arayüzleri

Docker Registry’nin kendisi doğrudan bir web arayüzü sağlamaz; komut satırı arayüzü (CLI) aracılığıyla yönetilir. Ancak, kayıt defteriyle etkileşime geçen veya onun durumunu izleyen harici araçlar ve dokümantasyonlar için mobil uyumlu bir yaklaşım benimsemek günümüzün dijital dünyasında kaçınılmazdır. Özellikle, geliştiricilerin veya operasyon ekiplerinin hareket halindeyken kayıt defterinin durumu hakkında bilgi edinmesi, imaj listelerini kontrol etmesi veya temel yönetim görevlerini gerçekleştirmesi gerekebilir. Bu senaryolarda, eğer bir web tabanlı yönetim arayüzü (örneğin Portainer gibi üçüncü taraf bir araç) kullanılıyorsa veya kayıt defteriyle ilgili dokümantasyon ve izleme panoları (örneğin Grafana) sunuluyorsa, bunların mobil cihazlardan erişilebilir olması büyük bir kolaylık sağlar.

Mobil uyumlu bir web arayüzü, farklı ekran boyutlarına ve cihazlara (akıllı telefonlar, tabletler) otomatik olarak adapte olan duyarlı bir tasarıma sahip olmalıdır. Bu, kullanıcıların herhangi bir cihazdan tutarlı ve optimize edilmiş bir deneyim yaşamasını sağlar. Duyarlı tasarım, genellikle CSS Media Queries kullanılarak gerçekleştirilir. Media Query’ler, tarayıcının genişliği, yüksekliği, cihazın yönü (yatay/dikey) gibi özelliklere göre farklı CSS kuralları uygulamanıza olanak tanır. Örneğin, küçük ekranlar için menüleri daraltmak, sütunları alt alta sıralamak veya font boyutlarını ayarlamak gibi optimizasyonlar yapılabilir.


/* Örnek bir CSS Media Query kullanımı */
@media (max-width: 768px) {
  .container {
    flex-direction: column; /* Küçük ekranlarda sütunları alt alta sırala */
  }
  .sidebar {
    display: none; /* Kenar çubuğunu gizle */
  }
  .main-content {
    width: 100%; /* Ana içeriği tam genişlik yap */
  }
}
  

Bu tür bir yaklaşım, kayıt defterinin doğrudan kendisi için olmasa da, onunla ilişkili yönetim, izleme ve dokümantasyon araçlarının erişilebilirliğini ve kullanılabilirliğini artırır. Bir geliştirici, yolda giderken bile telefonundan CI/CD hattının son durumunu, bir imajın başarılı bir şekilde kayıt defterine gönderilip gönderilmediğini veya kayıt defterinin disk kullanımını kontrol edebilir. Bu, karar alma süreçlerini hızlandırır ve ekiplerin daha esnek çalışmasına olanak tanır.

Ayrıca, kayıt defteriyle ilgili teknik dokümanların (kurulum rehberleri, API referansları vb.) mobil uyumlu formatlarda sunulması da önemlidir. PDF gibi sabit formatlar yerine, duyarlı web sayfaları veya Markdown tabanlı, mobil dostu platformlar tercih edilmelidir. Bu, geliştiricilerin ihtiyaç duydukları bilgilere anında ve zahmetsizce ulaşmalarını sağlar. Sonuç olarak, özel Docker kayıt defterinin kendisi bir web arayüzüne sahip olmasa da, onunla etkileşime geçen tüm ekosistemin mobil uyumlu olması, modern DevOps pratiklerinin ayrılmaz bir parçasıdır ve ekiplerin verimliliğini önemli ölçüde artırır.

Sonuç ve Sıkça Sorulan Sorular

Bu kapsamlı makalede, Ubuntu sunucunuz üzerinde kendi özel Docker kayıt defterinizi kurmanın ve yönetmenin tüm adımlarını detaylı bir şekilde inceledik. Başlangıçta Docker’ın neden bu kadar önemli olduğunu ve özel bir kayıt defterine neden ihtiyaç duyduğumuzu ele aldık. Ardından, Ubuntu üzerinde Docker kurulumunu ve kayıt defterini çalıştırmak için gerekli temel hazırlıkları adım adım gösterdik. En önemlisi, kayıt defterinizi HTTPS ile güvenli hale getirmek ve kimlik doğrulama eklemek için Nginx ve Let’s Encrypt gibi araçları kullanarak üretim ortamına uygun bir yapılandırma oluşturmayı öğrendik. Son olarak, kayıt defteri yönetimi, çöp toplama, izleme ve CI/CD entegrasyonu gibi ileri düzey konulara değinerek, sisteminizi daha verimli ve sürdürülebilir kılacak ipuçları sunduk. Bu bilgilerle, şirket içi veya hassas projeleriniz için güvenli, kontrollü ve yüksek performanslı bir Docker imaj depolama çözümüne sahip olabilirsiniz.

Özel bir Docker kayıt defteri kurmak, geliştirme ve operasyon ekiplerinize veri egemenliği, gelişmiş güvenlik, daha hızlı imaj dağıtımı ve maliyet kontrolü gibi pek çok avantaj sağlar. Bu yatırım, uzun vadede yazılım geliştirme süreçlerinizin verimliliğini ve güvenliğini artıracaktır. Artık kendi imajlarınızı tamamen kontrol altında tutabilir, şirketinizin özel ihtiyaçlarına göre özelleştirebilir ve modern konteynerleştirme stratejilerinizi bir sonraki seviyeye taşıyabilirsiniz.

Sıkça Sorulan Sorular (SSS)

  • Özel Docker kayıt defterimi kurmak için neden Ubuntu tercih etmeliyim?

    Ubuntu, geniş topluluk desteği, kolay kullanımı ve Docker ile iyi entegrasyonu sayesinde sunucu ortamları için popüler bir seçimdir. Ayrıca, güncel paket yöneticisi (APT) ve kapsamlı dokümantasyonu sayesinde kurulum ve yönetim süreçleri oldukça basittir.

  • Kayıt defterime dışarıdan erişim sağlamak için ne yapmalıyım?

    Kayıt defterinize dışarıdan erişim sağlamak için, sunucunuzun genel IP adresine veya bir alan adına (örneğin your.domain.com) ihtiyacınız vardır. Alan adınızı sunucunuzun IP adresine yönlendirdikten sonra, Nginx’i ters proxy olarak kullanarak ve HTTPS ile güvenli hale getirerek dış erişimi sağlayabilirsiniz. Güvenlik duvarınızda (UFW) 80 ve 443 portlarının açık olduğundan emin olun.

  • Kayıt defterimdeki imajları nasıl listeleyebilirim?

    Docker Registry’nin doğrudan bir web arayüzü olmadığı için, imajları listelemek için genellikle curl komutunu kullanabilirsiniz. Örneğin, tüm depoları listelemek için: curl -u "username:password" https://your.domain.com/v2/_catalog komutunu kullanabilirsiniz. Belirli bir deponun etiketlerini listelemek için ise: curl -u "username:password" https://your.domain.com/v2/my-app/tags/list komutunu çalıştırabilirsiniz.

  • Kayıt defterimin yedeklemesini nasıl yapmalıyım?

    Kayıt defterinizin verileri, -v parametresiyle bağladığınız dizinde (örneğin /opt/docker-registry) bulunur. Bu dizini düzenli olarak kopyalayarak yedekleyebilirsiniz. Konteynerin çalışmadığı veya okuma-yazma işlemlerinin durdurulduğu bir zamanda yedekleme yapmak, veri bütünlüğü açısından en güvenli yöntemdir. Harici depolama kullanıyorsanız, o hizmetin kendi yedekleme mekanizmalarından faydalanabilirsiniz.

  • Docker Registry’yi birden fazla sunucuya dağıtmak mümkün müdür?

    Evet, Docker Registry yüksek erişilebilirlik ve ölçeklenebilirlik için birden fazla sunucuya dağıtılabilir. Bu genellikle bir yük dengeleyici (load balancer) ve paylaşılan bir depolama çözümü (örneğin, S3 gibi bulut depolama veya bir ağ dosya sistemi) kullanılarak yapılır. Her bir kayıt defteri örneği aynı depolama arka ucunu kullanır ve yük dengeleyici, gelen istekleri mevcut örnekler arasında dağıtır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.