‫Bu ders için gerekenler, önceki derslerden bir konteynerin nasıl başlatılacağını biliyor olmanızdır.
‫Bir konteynerin içinde neler olup bittiğini dışarıdan görmekle ilgili son dersi yeni bitirdik.
‫Bu tamamen bir konteynerin içine girip içini karıştırmakla ilgili. Kullanabileceğimiz birkaç komut
‫var.
‫Birincisi -it ile çalıştırılan konteynerdir.
‫Konteynerin içinde bir kabuk elde etmek için -it'in nasıl çalıştığından bahsedeceğiz.
‫Daha sonra ikinci bir işlem çalıştırmak istediğiniz konteynerleri çalıştırmak için de konteyner yürütmesini
‫kullanabilirsiniz ve bunun birkaç örneğini göstereceğiz.
‫Daha sonra yol boyunca Ubuntu gibi normal bir Linux dağıtımının sanal bir makineye ya da donanıma
‫kurulumu arasındaki birkaç farktan bahsedeceğiz.
‫Ve sonra bu Linux dağıtımlarının bir konteyner içinde nasıl olduğunu.
‫Hadi başlayalım.
‫Bir konteynere dışarıdan bakmak zaman zaman çok kullanışlıdır.
‫Ancak insanların bana sıklıkla sorduğu ilk sorulardan biri, konteynere nasıl girebileceğim ve komut satırından
‫canlı olarak nasıl bir şeyler yapabileceğimdir.
‫Bazen insanlar bunu konteynerlerinin içinde bir SSH Sunucusu istemekle karıştırırlar, böylece içine ssh atabilirler.
‫Ancak aslında bunu yapmamıza gerek yok çünkü konteyner çalışırken içinde bir kabuk
‫bulmamızı sağlayan birkaç komutumuz var.
‫İlki sadece docker container run komutudur.
‫Ancak birkaç ekstra seçenek daha belirleyeceğiz.
‫Bir -it yapacağız.
‫Aslında -it iki ayrı seçenektir.
‫Yardımı hızlıca gösterecek olursam, t'nin aslında bize sahte bir tty ya da ssh ile elde edeceğinize benzer
‫bir istem verdiğini görebilirsiniz.
‫Ve sonra i'ye kadar kaydırırsak, daha fazla
‫komut çalıştırmaya devam edebilmemiz için bu oturumu açık tutmamızı sağlayan şey budur.
‫Eğer bir docker container run -it yaparsak ve sonra başka bir nginx çalıştırırsak. Buna vekalet diyelim.
‫O zaman alternatif bir komut belirlememiz gerekecek.
‫Bu bölümün başında docker komut satırının biçimi hakkında konuştuğumuzu hatırlarsanız,
‫bir docker konteyneri çalıştırırken, yardımda görebileceğiniz gibi, burada sonunda, imajdan sonra, ne çalıştıracağını
‫söylemek için başlatmak üzere olduğunuz bu yeni konteynere gönderebileceğiniz isteğe bağlı
‫komut ve argümanlarınız vardır. Görüntüde, daha sonra nasıl yapılandırılacağını göreceğimiz varsayılan
‫bir komut vardır.
‫Ancak başlangıçta neyin çalıştırılacağını değiştirmek isterseniz, bunu doğrudan çalıştırma satırından yapabilirsiniz.
‫Bash diyelim. Çünkü Bash, genellikle bir kapta bulabileceğiniz yaygın kabuklardan biridir
‫ve size çalışmak için bir kabuk verecektir.
‫Şuna bak. Acil bir durumdayım.
‫Komut istemimde root yazdığını fark edeceksiniz, bu da konteynerin başlatıldığı kullanıcıdır. Bu aslında ana bilgisayarda root olduğum anlamına
‫gelmiyor.
‫Bu sadece konteyner üzerinde root olarak hareket ettiğim anlamına geliyor.
‫Ondan sonra gelen sayı aslında konteyner kimliğidir.
‫Eğer ls -al yaparsam, bulunduğum yerdeki her şeyin tam bir listesini alırım.
‫Ve konteynerin içindeki dosya sisteminin kök yolunda olduğumu görebilirsiniz.
‫Aslında Nginx imajını temel alan konteynerin içindeki tüm dosyalara bakıyorum.
‫Buradan yapılandırma dosyalarını değiştirebiliyor, internetten
‫paket indirebiliyor ve normal bir kabuktan yapabileceğiniz hemen hemen tüm genel yönetimsel
‫şeyleri yapabiliyordum.
‫İşiniz bittiğinde kabuktan çıkmak için, herhangi bir kabukta yaptığınız gibi exit yazacağım ve şimdi
‫bu konteyner durdu.
‫Eğer gerçekten bir docker container ls yapsaydık, orada göremezdiniz.
‫Hatırlayın, buna vekalet demiştik.
‫Bu yüzden -a yapmak zorunda kaldım.
‫Ve orada. Şimdi çalıştırdığı komuta bakın. Bir Nginx konteyneri için varsayılan komut Nginx programının
‫kendisini çalıştırmaktır.
‫Ancak son komutumuzu yazdığımızda, bu varsayılan programı aslında Bash olarak değiştirdik,
‫bu da bize kabuğumuzu verdi. Kabuktan çıktığımızda konteyner durdu. Çünkü konteyner 'ler yalnızca başlangıçta
‫çalıştırdığı komut çalıştığı sürece çalışır. Bash olarak değiştirdiğimiz için, Bash'ten çıkmak yeterlidir
‫Şimdi, Nginx'i
‫gerçekten yapmak yerine tam bir Linux dağıtımı kullansaydım ne olurdu? Tam bir Ubuntu yapalım.
‫Aslında Ubuntu imajını indirecek ve beni bu yeni konteynerin istemine yerleştirecek.
‫Eğer daha önce Ubuntu kullandıysanız, apt paket yöneticisini biliyorsunuzdur.
‫Yani bunu burada kullanabilirim. Tıpkı standart bir Ubuntu sunucusunda yaptığım gibi. Aslında apt-get install
‫-y curl gibi bir şey
‫yükleyebilirim.
‫Ubuntu ve konteyner içindeki diğer dağıtımlarla ilgili olan şey, genellikle çok minimal olmalarıdır.
‫Normalde sanal bir makineye yerleştireceğiniz canlı bir CD ya da Ubuntu ISO'sunun indirilmesi, apt paket yöneticisi
‫ile her zaman daha fazla yazılım ekleyebileceğiniz Ubuntu'nun gerçekten çok minimal bir sürümü olan Ubuntu
‫konteynerinden varsayılan olarak çok daha fazla yazılıma sahip olacaktır.
‫Artık bu çalışan konteynerde curl yüklü ve onu tıpkı yerel bir makinede olduğu gibi kullanabiliyorum.
‫Kabuktan tekrar çıktığımda, konteyneri gerçekten durduracak. docker container
‫ls. Görmediğimi fark ettin. Az önce çalıştırdığımız Ubuntu imajı var.
‫Eğer bu konteyneri tekrar başlatırsam, içinde curl yüklü olacaktı.
‫Ancak Ubuntu imajından yeni bir konteyner oluşturursam, bu farklı konteynerde curl komut satırı
‫yüklü olmayacaktı.
‫Ya bu konteyneri yeniden çalıştırmak ve Bash'i tekrar içine almak istersek?
‫Docker container start komutunu kullanabiliriz.
‫Mevcut bir konteyneri başlattığımızda biraz farklı olduğunu fark edeceksiniz,
‫ancak bu... Bu sadece bir yapay zeka.
‫Sonra konteynerimizin adı Ubuntu. Hemen geri döndüğümüzü fark edeceksiniz ve google'ı
‫tekrar kıvırabiliyorum ve çalışıyor.
‫Eğer çıkarsam, tekrar durdu.
‫Peki ya MySQL ya da Nginx gibi bir şey çalıştıran bir konteynerin içindeki kabuğu gerçekten
‫görmek istersem?
‫Bunu da yapabiliriz.
‫Ve bu exec komutunu kullanıyor. docker container exec.
‫Ve burada birkaç seçeneğimiz olduğunu görebilirsiniz.
‫Ve en yaygın olanı... Diyelim ki MySQL konteynerine atlamak istiyorum çünkü MySQL'in
‫kendisinde bazı yönetimsel şeyler yapmam gerekiyor.
‫Bunu tekrar yapabilirim ve sonra konteynerin adını yazabilirim. Sonra çalıştırmak istediğim program.
‫Ve bu durumda yine Bash ve şimdi MySQL ile konteynırdayım.
‫Aslında kapsayıcının içinde süreçleri listeleyen bir ps aux yapabiliyorum. Bu elbette bana arka planda çalışan MySQL daemon'unun
‫yanı sıra şu anda içinde bulunduğum Bash sürecini ve az önce çalıştırdığım ps komutunu
‫gösterecektir.
‫Bu kabukta, mysql komut satırı ile MySQL'in kendisine atlayabilirdim. Bu
‫Bash kabuğundan çıkıp bir ls yaptığımda MySQL'in hala çalıştığını fark edeceksiniz. Docker container exec aslında mevcut çalışan bir container
‫üzerinde ek bir süreç çalıştırdığından, MySQL daemon
‫için kök süreci etkilemeyecektir. Bir tane daha deneyelim.
‫Burada görebileceğiniz gibi bu, sorun gidermeniz gerektiğinde veya çalışan bir sistemde bir
‫şeyi biraz değiştirmeniz gerektiğinde konteynerlere atlamak ve Ubuntu veya Alpine gibi tam bir makineniz olsaydı sahip
‫olacağınız ortamı sağlamak için farklı dağıtımların konteynerlerini kullanmak için çok kullanışlıdır.
‫Alpine nedir? Alpine'den daha önce bahsetmemiştik. Alpine başka bir Linux dağıtımıdır, ancak Alpine
‫çok küçük olacak şekilde tasarlanmıştır.
‫Aslında sadece 5MB boyutunda.
‫Eğer bir docker pull alpine yaparsam, bu en son Alpine imajını aşağı çekecektir ve eğer bir docker image ls yaparsam, aslında
‫Alpine imajının Ubuntu'ya kıyasla ne kadar küçük olduğunu görebilirsiniz.
‫Alpine ile ilgili en güzel şey, kendi paket yöneticisi ile birlikte gelmesidir.
‫Bir sonraki bölümde imajları ve Docker Hub'ı incelerken Alpine'ı Docker Hub'da bir seçenek olarak göreceksiniz.
‫Ama şimdilik Alpine'in içinde bir Bash kabuğu yapalım. docker container run -it alpine bash.
‫Şimdi burada ne oldu?
‫Neden oraya girdim ki?
‫Bana konteyner sürecini başlattığını ve bash çalıştırılabilir dosyasının yolda bulunamamasına
‫neden olduğunu söylüyor. Bu da Bash'in konteynerde olmadığı anlamına geliyor.
‫Ve bu, yalnızca başlattığınızda görüntüsünde zaten var olan konteynerde bir şeyler çalıştırabileceğimiz
‫kavramına geri
‫döner.
‫Ya da exec veya run komutları aracılığıyla sonradan eklediğiniz bir şey olabilir.
‫Ama bu durumda Alpine görüntüsüne nasıl girebilirim?
‫Alpine o kadar küçük ki aslında içinde Bash yok. Ama sh var. Bu yüzden komutu, Bash kadar tam özellikli
‫olmayan ancak bizi doğrudan konteynere götüren sh ile değiştirebiliriz.
‫Alpine Linux'u internette araştırırsanız, paket yöneticisinin apk olduğunu ve gerçekten
‫ihtiyacımız olursa Bash'i yüklemek için bunu kullanabileceğimizi öğrenirsiniz.
‫Bu derste öğrendiklerimizi hızlıca özetleyelim.
‫Konteyner çalıştırma için -it seçeneğini öğrendik, bu da bize konteynerde bir tür sunucuya ssh'landığımızda
‫yaptığımız gibi etkileşimli bir kabuğa eşdeğer şeyler yapmamızı sağlar.
‫Daha sonra docker container
‫exec için run ile tamamen aynı şeyi yapan it ile yeni bir komut öğrendik, ancak bunu yeni bir konteyner başlatmak
‫yerine çalışan mevcut bir konteyner üzerinde yapıyor.
‫Ve son olarak, Alpine hakkında biraz bilgi edindik ve bunun büyük Linux dağıtımlarından nasıl farklı olduğunu ve
‫aslında 4MB boyutunda olduğunu ve konteyner görüntüleri için ideal olduğunu öğrendik.