Ana içeriğe atla Navigasyona atla Alt bilgiye atla
Sınırlı süre: Design Partner Programı. BUSINESS planında ömür boyu ücretsiz.

Depo Fork'lama

Tüm bir depoyu (uygulama, veritabanı, dosyalar) saniyeler içinde klonlayın. Her boyutta. Sıfır ek disk.

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.

Parent fans out into independent clones

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ı?

Sharing a folder link is the same speed regardless of the folder's size

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.

1 GB, 100 GB, 1 TB. Same time, every time.

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

Many mirrors, one sun: shared base, your changes are yours

Ü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?

A fork is a frozen photograph; the parent keeps flowing like a river

Ş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

Five forks of a 100 GB repo, still about 100 GB total

İş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.