Depo Fork’lama
Tüm bir üretim ortamını (uygulama, veritabanı, yapılandırma dosyaları) saniyeler içinde fork alın. Her boyutta. Sıfır ek disk. İstediğiniz kadar fork alın.
Slogan: üretimi klonlayın, hiçbir şeyi bozmayın.
Öğreticiyi izleyin
Kaybedecek bir şey kurun
Önce fork’un izolasyonunu kanıtlayabilmek için çalışan uygulamaya bir dosya ekleyin. Depoyu VS Code’da açın, ardından deponun içinde bir işaret dosyası oluşturun:
rdc vscode connect -m my-server -r my-app
echo "Hello from production" > index.html
Şimdi fork alın.
Fork
rdc repo fork --parent my-app -m <machine-name> --tag experiment --up Tek bir komut tüm repo'yu kopyalar: uygulama, veritabanı ve yapılandırma dosyaları. Fork süresi, repo boyutundan bağımsız olarak sabittir; bir gigabayt, yüz gigabayt veya bir terabayt olsa da fark etmez.
Tek komut. Her şeyi (uygulama, veritabanı, yapılandırma dosyaları) klonladı ve saniyeler içinde oldu. Tekrar çalıştırırsanız başka bir bağımsız klon elde edersiniz.
Neden bu kadar hızlı?
Bunun nedeni btrfs reflink’leridir. Bir fork, ana deponun aynı veri bloklarına işaret eden yeni bir dosya sistemi ağacı oluşturur. Fork alınırken hiçbir veri kopyalanmaz. Her şey meta verisidir, bu nedenle ana deponun boyutu fork’un ne kadar süreceğini hiçbir zaman etkilemez.
Fork’lama da aynı şekilde çalışır. 1 GB, 100 GB, 1 TB. Her seferinde aynı süre.
Neler paylaşılır, neler size aittir
Üst depoyu sabit bir kaynak olarak düşünün. Fork’unuz, ona yazma sırasında kopyalayan bir görünümdür. Fork’a yazın; yazılar fork içinde kalır. Kaç fork olursa olsun üst depo değişmez.
Güneşi tutamazsınız, ama onu aynada tutabilirsiniz.
Üst depo daha sonra değişirse ne olur?
Şimdi anlık görüntü mantığını düşünün. Fork aldığınızda, üst depoyu tam o anda dondurursunuz. Üst depo hareket etmeye devam eder; fork’unuz etmez.
Üst depo daha sonra değişirse, fork’unuz olduğu yerde kalır.
Nehri tutamazsınız, ama onu fotoğrafta tutabilirsiniz.
Disk kullanımı sabit kalır
İşte bu yüzden diskiniz patlamaz. 100 GB’lık bir deponun beş fork’u mı? Toplam hâlâ yaklaşık 100 GB. Yalnızca her fork’ta değiştirdiğiniz veriler için disk kullanırsınız.
İstediğiniz kadar fork alın. Diskiniz fark bile etmez.
Fork’ların devralmadığı şey: gizli bilgiler
Fork’un kasıtlı olarak takip etmediği bir şey vardır: gizli bilgiler. Bir fork; API anahtarı, veritabanı parolası, Stripe token’ı olmadan başlar. “Üretimi klonlayın, hiçbir şeyi bozmayın” sloganının gerçekten işe yaramasının nedeni budur. Sandbox’ınız sizi taklit edemeyeceği için gerçek müşterilere fatura kesamaz. Bunu Gizli Bilgileri Yönetme öğreticisinde düzgünce ayarlıyoruz.
İzolasyonu doğrulayın
Her iki depoyu yan yana listeleyin:
rdc repo list -m <machine-name> Her iki repo artık aynı makine ve diskte iki tam bağımsız ortam olarak bir arada bulunur.
my-app ve my-app:experiment’in aynı anda çalıştığını göreceksiniz. Orijinalde, işaret dosyası tam olarak bıraktığınız yerdedir:
rdc term connect -m <machine-name> --repository my-app --command 'ls -la index.html' Orijinal repo'yu inceleyerek izolasyonu doğrulayın: işaret dosyası yerinde kalır. Fork oluşturmak üst repo'yu değiştirmez.
Şimdi yıkıcı bir değişiklik yapın, ama yalnızca fork içinde:
rdc term connect -m <machine-name> --repository my-app:experiment --command 'rm index.html && echo removed' İşaret dosyasını yalnızca fork içinde silin. Bu, fork kapsamında yıkıcı bir değişikliktir.
Orijinale geri dönün ve kontrol edin:
rdc term connect -m <machine-name> --repository my-app --command 'ls -la index.html' Orijinal repo'ya geri dönün: işaret dosyası sağlam kalır. Üst repo ve fork aynı image'ı paylaşır ancak ayrı Docker daemon'lar ve ayrı dosya sistemleri üzerinde çalışır.
İşaret dosyası hâlâ burada, dokunulmamış. Fork’un değişiklikleri fork içinde kaldı. Aynı görüntüler, ayrı Docker daemon’ları, ayrı dosya sistemleri.
Temizleyin
İşiniz bittiğinde fork’u silin:
rdc repo delete --name my-app:experiment -m <machine-name> İşiniz bittiğinde fork'u silin. Orijinal repo etkilenmez; bu, güvenli bir fork, deney ve imha iş akışını mümkün kılar.
Orijinal tam olarak olduğu gibi kalır. Fork alın, deneyin, bir şeyleri bozun, silin. Hiçbir risk yok.
Sonraki: Fork İzolasyonu Uygulamada.