Selamlar arkadaşlar bu yazımda sizlere Docker Image oluşturma işlemleri hakkında bilgiler vereceğim.
Sizinde bildiğiniz üzere Docker Image’larını oluşturma işleminde en büyük rol oynayan dosyamız Dockerfile dosyalarımızdır. Bu dosyamız sayesinde Image’lar oluşturabilir ve bu oluşturduğumuz Image’ları Container’larımızda çalıştırabiliriz. Bu sayede uygulamalarımız için izole ortamlar oluştururuz.
Nedir bu Dockerfile ?
Dockerfile, Docker Container’ları oluşturmak ve yapılandırmak için kullanılan, adım adım talimatlarımızı içeren metin tabanlı bir dosyadır. Bu dosyamızın herhangi bir uzantası yoktur. Bu dosyamız sayesinde uygulamalarımızın gereksinimleri, hangi dosyaları içereceği, çalışacağı parametreleri belirtebiliriz.
Bir Dockerfile oluşturduktan sonra dosyamızı Build işleminden geçiririz ve Image elde ederiz. Bu Image’ı Docker komutlarımızı ile Run ederiz ve daha sonra uygulamazı içeren Container’lar elde ederiz.
Her Dockerfile bir Base Image ile başlar. FROM kodu ile eklediğimiz bu Image’lar İşletim sistemi, Docker Image’lardan ya da uygulamalara ait Image’lardan olabilmektedir.
Dockerfile’ın hizmet ettiği amaçları söylemem gerekirse;
Container oluşturma işlemlerimiz sırasında, her zaman belirttiğimiz amaç için kullanılır.
Uygulamalarınızın ya da hizmetlerinizin farklı ortamlarda aynı şekilde çalışmasını sağlamayı amaçlamaktadır. Test, geliştirme ya da canlı ortamlarınızda da aynı şekilde çalışacağını ve yapısını koruyacağı anlamına gelmektedir.
Uygulama ve Hizmetlerinizin sürüm kontrollerinde de kullanabilirsiniz. Aynı dosya içerisinde uygulamanızın bağımlılıkları aynı olacak ancak içerisindeki kod yapınızı değiştirerek devam edecek ve yeni sürümler elde edebileceksiniz.
Docker Registry ya da Hub gibi alanlardan uygulamanızın paylaşımını kolaylaştıracaktır.
Dockerfile oluşturulurken en çok kullanılan komutları aşağıda bulabilirsiniz :
FROM : Temel alınacak olan OS imajını belirttiğimiz alandır. Diğer komutlar bu Base Image üzerinden inşa edilecektir.
ÖR : FROM ubuntu:20.04
RUN : Docker Container’larına komutlar veya komut dizileri ekler ve eklenen bu komutları çalıştırır. Bağımlılıkların yüklenmesi ve Configuration ayarlanmalarının yapılması için kullanılır.
ÖR : RUN apt-get update && apt-get install -y httpd
COPY veya ADD : Local File’ları veya uzak URL’leri Container içine kopyalamak için kullanılır.
ÖR : COPY ./uygulama-dosyası /uygulama-dosyası
WORKDIR : Çalışma dizinini belirttiğimiz alandır. Bu sayede Container içerisinde komutların çalıştırılacağı dizini ayarlamış oluruz.
ÖR : WORKDIR /uygulama-kodunun-calisacagi-yer
EXPOSE : Container’lara dışarıdan erişim yapılacağı sırada dinleyeceği portu belirttiğimiz alandır.
ÖR : EXPOSE 8080
CMD veya ENTRYPOINT : Container çalıştığında çalıştırılacak komutu belirtir. Birden fazla bu komuttan tanımlanabilir ancak en son tanım geçerli olacaktır.
ÖR : CMD [“nginx”, “-g”, “daemon off;”]
ENV : Ortam değişkenlerini tanımlarken kullandığımız komuttur.
ÖR : ENV Application_DB=database1
VOLUME : Verileri saklayacağımız Volume alanını belirttiğimiz alandır. Bu sayede datalarımız Container dışında saklanacaktır.
ÖR : VOLUME /data-folder
Bu yukarıda belirttiğim komutlar Dockerfile oluştururken kullanılan Temel Yapı Taşları diyebiliriz arkadaşlar.
ÖNEMLİ NOT : Buraya kadar okuduysanız aklınızda bulunsun arkadaşlar Dockerfile oluşturacağınız zaman D harfi büyük bir şekilde yazmanız ve herhangi bir uzantı girmemeniz gerekiyor. Tam olarak “Dockerfile” şeklinde yazmalısınız.
Şimdi örnek bir Dockerfile ile işlem yapmaya sıra geldi :
> touch Dockerfile
İlk olarak sistemimizde Dockerfile dosyamızı Touch komudu ile oluşturuyoruz.
FROM ubuntu:20.04
RUN DEBIAN_FRONTEND=noninteractive apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y apache2
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]
Daha sonra yukarıdaki kodları içeren ve Build ettiğimizde Httpd ile Apache çalıştırmamızı sağlayacak olan komutları giriyoruz sonrasında dosyamızı kayıt edip çıkıyoruz. Bu kodların arasındaki DEBIAN_FRONTEND=noninteractive ifadesi ile kurulumun katılımsız olmasını istediğimizi belirtiyoruz.
> docker image build -t sistemdostu/apachecalismasi -f Dockerfile .
Daha sonra Image Build komutumuzu -t ile image’ımıza vermek istediğimiz ismi belirleyerek ve -f ile hangi dosyadan build edileceğini söyleyerek başlatıyoruz. Build edilecek olan dosyanın yolunu ise en sonda . ile belirtirken, kodu çalıştırdığımız klasör içerisinde olduğunu belirtiyoruz.
> docker image history sistemdostu/apachecalismasi
Komudu yardımıyla ise build işlemi yapılırken hangi adımların çalıştırıldığını bizim için kayıt altına alan history komudunun çalıştırmış olduk. Bu sayede hangi adımların uygulandığını kontrol edebilirsiniz.
> docker container run -d -p 8080:80 --name ilkdockerfile sistemdostu/apachecalismasi
> docker container ls
> docker image ls
Daha sonra oluşturmuş olduğumuz bu Image’ı Run etmemiz gerekiyor. sistemdostu/apachecalismasi adındaki image’ı çalıştırdıktan sonra container ls ile çalışıp çalışmadığını kontrol edebilir ve image ls ile de Image ID’nizi görebilirsiniz.
Daha sonra Docker kurulu olan cihazınızın sahip olduğu IP Adresine belirlediğiniz port numarası ile istek yapmanız durumunda Apache2’nin çalıştığını göreceksiniz.
COPY ./files/* /var/www/html
Dockerfile dosyama eklemiş olduğum yukarıdaki kod sayesinde ./files/* yolunda bulunan tüm dosyaları, container’ım içerisinde /var/www/html yoluna kopyaladım. Files altında ise index.html dosyam vardı ve bu html dosyasında “Bu bir SistemDostu sayfasidir.” Yazmaktadır.
Bu sayede Apache2’nin anasayfasını “Bu bir SistemDostu sayfasidir.” olarak değiştirmiş olduk.
Bir yazımın daha sonuna geldik arkadaşlar. Bir sonraki yazılarda görüşmek üzere. Yazılarımla ilgili Yorum, soru ve görüşleriniz olursa yorumlar kısmından bana iletebilir. Bana destek olmak isterseniz de YouTube üzerinde bulunan SistemDostu kanalıma abone olabilirsiniz.