‫Bu derste, bind mount ve bu mount'lardaki kalıcı veriler hakkında konuşacağız. Gereksinimler gerçekten sadece konteyner yönetimi ve konteynerlerin
‫nasıl çalıştırılacağı hakkında bilgi sahibi olmanızdır.
‫Hadi başlayalım. Bağlama aparatları hakkında konuşalım. Aslında oldukça havalılar.
‫Onları ilk öğrendiğimde, Docker'ı yerel geliştirme için nasıl kolayca kullanabileceğime dair bir
‫aha verdi.
‫Gerçekte, bir bind mount sadece ana bilgisayar dosyalarının veya dizinlerinin bir konteyner dosyasına veya dizinine
‫eşlenmesidir. Bunu yapabilirsin.
‫Bir dizin ya da sadece tek bir dosya belirtebilirsiniz. Arka planda, temel olarak iki
‫konumun disk üzerinde aynı fiziksel konumlara işaret etmesi yeterlidir.
‫Yine, bu aslında diğer birimlerin yaptığı gibi UFS'yi atlar, böylece konteyneri sildiğinizde
‫ana bilgisayar konumunuzu silmeyecektir.
‫Konteynerde ana bilgisayar dosyalarını eşlediğiniz herhangi bir dosya varsa, ana bilgisayar dosyaları kazanır. Aslında üzerine yazdığı konteynerdeki
‫dosyaları silmez çünkü konteynerdeki hiçbir şeyin üzerine yazmaz.
‫Sadece bağlama bağı var olduğu sürece oradadır.
‫Artık bind mount'a ihtiyaç duymadığınız ve konteyneri onsuz yeniden çalıştırdığınız anda,
‫aslında daha önce orada olan temel verileri göreceksiniz. Bind mount'lar genellikle ana bilgisayara özgü olduğundan,
‫çalışmak için ana bilgisayarın sabit diskinde belirli verilerin olması gerekir.
‫Bunları bir Docker dosyasında belirtemezsiniz.
‫Docker container run komutunu kullandığınızda bunları çalışma zamanında kullanmanız gerekir. Formatı burada görebilirsiniz.
‫Bu aslında daha önce kullandığımız -v'dir, sadece iki nokta üst üste işaretinin
‫sol tarafına sadece bir isim yerine tam bir yol koyuyoruz.
‫Docker'ın aslında bir süre önce yaptığımız gibi adlandırılmış birim ile bind mount arasındaki
‫farkı anlayabilmesinin yolu, bind mount'un bir ileri eğik çizgi ile başlamasıdır.
‫Windows'ta, iki ileri eğik çizgi ve ardından sürücü harfi ve ardından yolunuz olduğunu fark edeceksiniz.
‫Sol iki nokta üst üste ve sağ taraflara sahip olduğunuz sürece, ana bilgisayardan konteynere istediğiniz her şeyi
‫gerçekten eşleyebilirsiniz ve ayrıca salt okunur gibi şeyler de belirtebilirsiniz.
‫Bunun gerçekten parladığı yer, ana bilgisayarınızda kullandığınız veya değiştirdiğiniz dosyalara
‫erişen konteynerinizin içinde geliştirme ve çalıştırma hizmetleridir.
‫Bunu Nginx ile yapalım.
‫Bu kurs için depomuzun kök dizinine giderseniz ve ardından Dockerfile örnek 2 dizinine
‫girersek. Daha önce de buradaydık.
‫Hatırlarsanız, iki dosya var. Bu Nginx için, değil mi?
‫Docker dosyasına hızlıca bakarsak, oldukça basit olduğunu görürüz. Bu sadece bir çalışma dizini belirlemek ve ardından bir dizin
‫dosyasını bu dizine kopyalamaktır.
‫Burada hacim yok.
‫Bir bağlama montajının çalışması için bir birim gerekmez, ancak bir birim kesinlikle orada olabilir.
‫Ev sahibi her zaman kazanır, unuttun mu? Yani, bir docker konteyner çalıştırması yaptığımızda,
‫bir -d... adını nginx koyalım.
‫Daha önce olduğu gibi 8080 portunu verelim.
‫O zaman bu sefer hacim vereceğiz. Ve mevcut çalışma dizinimin aslında konteynerdeki bu çalışma
‫dizinine bağlanacağını söylemem gerekiyor. Dizin dosyam bu klasörde olduğu için konteynerde
‫olmasını istiyorum,
‫böylece onu burada düzenleyebilirim ve konteynerde canlı olarak görülür.
‫Bu yüzden bir saniye içinde mantıklı olacak.
‫İşte size küçük bir ipucu. Benim tüm yolumu bulmam ve her şeyi
‫yazmam yerine, burada pwd'yi şu şekilde kullanabilirsiniz.
‫Bu, 'çalışma dizinini yazdır ve bu komutu bu yolla değiştir' diyen bir kabuk kısayoludur.
‫'
‫Daha sonra Dockerfile'daki aynı çalışma dizinini kullanacağız ve ardından Nginx imajını
‫belirleyeceğiz.
‫Yapacağım şey, çok hızlı bir şekilde, aslında başka bir terminal penceresi açacağım, böylece aynı
‫anda iki şey yapabileceğiz.
‫Bunu yapmanıza gerçekten gerek yok.
‫Temel olarak, ana bilgisayarımızdaki dosyayı düzenleyeceğiz ve sonra konteynerin içinde olacağım ve neler olduğunu
‫göreceğim.
‫Çalıştığından emin olmak için
‫localhost'a gidelim.
‫Tamam, bu varsayılan Nginx HTML dosyası değil.
‫Ve normal Nginx imajını kullandık.
‫Aslında bu dizindeki özel olanı kullanmadık.
‫Sadece stok bir resim kullandık. Bu noktayı kanıtlamak için, aslında aynı, tam komutu tekrar
‫yapabiliriz, ancak -v'yi çıkarabiliriz ve bunun yerine 8080 portunda çalıştıracağım. Ve ben buna nginx2 diyeceğim.
‫Tarayıcıma gidip localhost 8080'e gidersem, bu varsayılan nginx dizinidir. html dosyası.
‫Bu, bu dizinde yaşadığımız özel bir dizindir.
‫Dolayısıyla, şimdiden doğru bir şekilde eşlendiğini görebiliyoruz.
‫Burada başka bir sekme açarsam ve kapsayıcıda bir komut satırı alırsam.
‫Sonra o dizine gidin.
‫Tüm dizini eşlediğimiz için Docker dosyasını gerçekten görebildiğimizi fark edeceksiniz.
‫Eğer sol tarafta yeni bir dosya oluşturduysak, yeni bir dosya oluşturmak için Linux touch komutunu
‫kullanabilirim. Sonra sağ tarafta. Oops... Bunu unutup duruyorum. ls -al, ve bunu dosyanızda
‫göreceksiniz.
‫Umarım burada neler olup bittiğini, bu iki konumun da aynı yer olduğunu anlamışsınızdır.
‫Ve eğer o testme dosyasına bir şey eklersem ve
‫sonra...
‫İşte oldu.
‫Nginx'imiz değişiklikleri görebiliyor çünkü bu sadece konteynerdeki normal bir dosya
‫yolu ve bu dosyalar ana bilgisayarda.
‫Bunları kapsayıcıda silecek olsaydım, aynı dosya olduğu için ana bilgisayarda da silineceklerdi.
‫Bu, genellikle bir geliştiricinin bu kadar karmaşık bir kuruluma sahip olan tüm geliştirme ortamları
‫hakkında düşünmesini sağladığım zamandır. Belki de mükemmel ortamlarını kurmak için Vagrant veya
‫başka bir manuel yöntem kullanıyorlar ve bunun bunu nasıl çok daha basit hale getirebileceğini görmeye başlayabilirler.
‫Mac'imde karmaşık bir kurulum yapmam gerekmediği için sadece bir konteyner çalıştırdım.
‫mount ile -v komutunu kullandım ve artık kodum ana bilgisayarımda düzenlenebiliyor.
‫Ve gerçekten de kabın içine girmeme hiç gerek yok.
‫Genellikle, kodlama yaparken herhangi bir hata olup olmadığını görmek için konteyneri çalıştırabilir ve günlüklerine
‫bakabilirsiniz.
‫Elbette bu Nginx ile yapılan basit bir örnektir. Daha sonra, yerel geliştirme ve konteynerler
‫için farklı geliştirme ortamlarına ilişkin belirli örneklerimiz olacak.