14 Aralık 2020 Pazartesi

Docker Container Yapısı -3

Bu yazıda Docker Container yapısında yer alan Docker CLI kullanımına, komutlarına ve bilmemiz gerek temel özelliklere değinmeye devam edeceğim.

Docker Container Yapısı -1 ve Docker Containe Yapısı -2 yazılarında bir container oluşturup çalıştırdık ve ona ne yapmasını söylediysek onu yaptı. Container'ın ideal kullanımında da senaryo bu şekilde ilerler. Yani container'ı çalıştırırsınız ve container çalıştırıldığı image dosyasında ki ayarlara göre ayağa kalkar. Başka bir deyişle container çalıştıktan sonra içine girip şunu çalıştır bunu çalıştır demeyiz. Bu işlemlerin tamamı container image oluşturma aşamasında belirtilir ve image olarak paketlenir. Container ise o image den oluşturulmuş çalışan bir kopyadır.  Genel olarak tek bir uygulama çalışması için hazırlanır ve container çalıştırıldığı zaman da o uygulama çalışır  ve uygulama çalıştıkça da container ayakta durmaya devam eder. 

Kısaca bir container hangi uygulamanın çalışması için ayarlandıysa onunla ilgili her türlü ayarın image oluşturma aşamasında ayarlanmasıdır. Dolayısıyla sonradan container'a bağlanıp herhangi bir değişiklik yapmak gerekmez.

Container'a bağlanıp herhangi bir değişiklik yapmamız gerekmez demek container'a bağlanamayız anlamına gelmemektedir.  Docker, container'ın içine bağlanıp değişiklikler yapmamıza izin verir.  Bunun için gerekli tek şey o container image sinin içerisinde bağlanabileceğimiz bir shell olmasıdır ki hemen hemen bütün image'lerde bağlanabileceğimiz bir shell mevcuttur.

Container'a Bağlanma:
Öncelikle bir container oluşturalım:
docker container run -d -p 8282:80 --name htmlcontainer emrahakin/htmlsite

container oluşturma kısmını bir önce ki yazıda detaylı olarak anlatmıştım dilerseniz orayı referans alabilirsiniz.

Container'ımızı oluşturduktan sonra çalışan container'ları listeleyelim

docker container ls




Bu oluşturduğumuz container'a bağlanmak için "exec" komutunu kullanacağız.

docker container exec -it CONTAINER ID sh




Gördüğünüz gibi "sh" komutu ile container içerisinde ki shell'e bağlanmış olduk. Ben Docker imege oluştururken alpine tabanlı bir docker image si oluşturdum. Alpine tabanlı dağıtımlarda "sh" ile bir shell açabiliyorum.
Eğer Ubuntu tabanlı bir image kullansaydım onun içinde bash olduğundan "sh" yerine "bash" yazacaktım.

docker container exec -it CONTAINER ID bash

Peki "-it" nedir?
-it esasında iki opsiyonun birleşimi "--interactive" ve "--tty" opsiyonlarının birleşimi olarak "-it" kullanıyoruz. Yani bu container'a interactive modda bağlan (benim komutlarımı bu container içerisinde çalıştır) ve bunu sağlamak içinde bir terminal bağlantısı kur demek.

Container'a bağlandığımıza göre artık normal bir Linux makine gibi ne yapmak istiyorsak onu yapabiliriz.

Mesela bağlandığımız container'da ki dosyaları "ls" komutu ile listeleyelim

Container'ımızı ayağa kaldırdığımız makinede bir web browser açık localhost:8282 adresine gidersek orada bir web sitesinin çalıştığını göreceğiz.



Şimdi "sh" ile container'ın içine bağlandığımıza göre bu html sayfasını değiştirebilirim.

Docker imnage sini oluştururken bir Dockerfile dosyası hazırlamıştık bu dosyaya buradan ulaşabilirsiniz. Bu Dockerfile dosyasında index.html in /usr/share/ngnix/html klasörü içerisine atılmasını belirtmiştik. Şimdi bu dizine bağlanarak index.html dosyası orada mı bir bakalım.



Bu şekilde tek satır komutla da ilgili klasöre gidebiliriz:

cd usr/share/ngnix/html

Artık index.html dosyasına ulaştığımıza göre değiştirebiliriz:

echo "yeni yazı ekledim" >> index.html

bu komutu çalıştırdığımızda mevcut index.html dosyasına "yeni yazı ekledim" diye bir text eklemiş olacağız.



Web tarayıcımızda sayfayı yenilediğimizde "yeni yazı eklendi" yazısının sayfaya eklendiğini görüyoruz.


Görüldüğü gibi mevcut bir docker container'ın içine girip değişiklik yapabiliyoruz.

Bu container'ın içinde hangi uygulamaların çalıştığını yine "ps" komutuyla görebiliriz. Container'ın içindeyken terminal ekranına "ps" komutunu yazarsak hangi uygulamaların çalıştığı listelecektir.



"exit" komutuyla container'ın içerisinden çıkıp kendi shell ekranımıza dönebiliriz. "exit" komutu ile sadece container ile olan bağlantımızı kesiyoruz container çalışmaya devam eder bunu da "docker container ls" komutuyla görebiliriz. 

Benzer Yazılar

0 yorum:

Yorum Gönder