Dockerfile ile kendi imajımızı nasıl oluştururuz?

Dockerfile ile kendi imajımızı nasıl oluştururuz?

Bu yazımızda öncelikle Docker komutlarından bahsedip daha sonra örnek bir Dockerfile ve image’imizi oluşturuyoruz.
Merve Özdeş06 Ara 2022

Dockerfile, Docker imajının nasıl oluşturulacağına ilişkin talimatları içeren bir komut dosyasıdır. Bu talimatlar aslında belirli bir Docker imajı oluşturmak için Docker ortamında otomatik olarak yürütülen bir grup komuttur. Dockerfile içerisindeki bu komutlar hangi imajın kullanılacağı, hangi dosyaları içereceği ve hangi uygulamanın hangi parametrelerle çalışacağını gösterir. Dockerfile dosyası oluşturulurken dosya adının kesinlikle “Dockerfile” olması aksi takdirde Dockerfile dosyasının isminin imajı build ederken mutlaka belirtilmesi gerekmektedir. 

Gelelim Dockerfile içerisinde kullanabileceğimiz komutlara. Dockerfile içerisinde kullanacağımız bazı komutlar (tag’lar) aşağıdaki gibidir:

 

FROM Oluşturmakta olduğunuz imajın temel imajını (base image) tanımlar. Base imajı mevcut bir Docker imajı veya bir işletim sistemi imajı olabilir. Dockerfile’da birden fazla imaj olabilir. Bunun için birden fazla FROM komutu kullanılmalıdır.

RUN En önemli Dockerfile komutlarından biridir ve uygulamanızı kurmak ve yapılandırmak için komut satırında çalıştıracağınız komutları tanımlar. 

LABEL LABEL komutu, bir imaja meta veriler ekler. LABEL, bir anahtar/değer çiftidir.

COPY COPY  şeklinde tanımlanır ve belirtilen kaynak dosyalar, container içerisinde belirlenen yere kopyalanır.

ENTRYPOINT Bu komut ile Container çalıştığında varsayılan parametreler tanımlanır.

EXPOSE Port yapılandırılması için kullanılan komuttur. Container’ın docker içinde çalışacağı port adresi bu komutla belirlenir. Eğer bir port belirlenmezse varsayılan olarak TCP portu kullanılır.

WORKDIR Onu takip eden tüm RUN, CMD, ENTRYPOINT, COPY ve ADD komutları için çalışma dizinini ayarlar. Bir Dockerfile'de birden çok kez kullanılabilir

CMD Yürütülmekte olan bir kapsayıcı için varsayılanlar bu komutla belirlenir. Bir Dockerfile'de yalnızca bir CMD komutu olabilir. Birden fazla CMD listelerseniz, yalnızca son CMD geçerli olur.

ENV Imajdan oluşturulan Container’ler içindeki ortam değişkenlerini ayarlamak/değiştirmek için kullanılır.
 

Yukarıda Dockerfile içerisinde kullanabileceğiniz komutlara değindik. Peki kendi imajımızı nasıl oluşturacağız? Kendi imajımızı oluşturmak için öncelikle Dockerfile dosyasını oluşturmamız gerekmekte. Docker imajımızın nasıl olması gerektiğini bu dosyayla belirtmiş oluyoruz.

 

Öncelikle bir Docker isimli klasör açıp onun içerisine bir Dockerfile oluşturalım:

 

Dockerfile dosyamızın içerisine gerekli komutlarımızı aşağıdaki gibi ekleyelim.

 

Docker klasörümüzün içerisine, Dockerfile’da belirttiğimiz hello.py dosyamızı da vim editörü ile aşağıdaki gibi oluşturalım.

 

Docker klasörümüzün içerisinde hem Dockerfile hem de hello.py dosyamız bulunmakta.

 

Artık Dockerfile ve çalıştıracağımız hello.py dosyasını oluşturduğumuza göre imajımızı build edebiliriz. docker build komutu ile oluşturduğumuz Dockerfile içerisindeki komutlar Docker Daemon tarafından okunup adım adım çalıştırılarak imaj oluşturulur. Dockerfile içerisinde tanımlamış olduğunuz her bir komut satırı bir katmana karşılık gelmektedir. İmajlar da Dockerfile’ın içerisindeki komut satırlarından yani katmanlardan oluşur. Yukarıda tanımlamış olduğumuz Dockerfile dosyasındaki komutları düşündüğümüzde imajımız 5 katmandan (FROM, RUN, WORKDIR, COPY, CMD) oluşacaktır. Aşağıda imajımızı build ettikten sonra oluşan çıktıda da gördüğünüz gibi imajımız beş adımda (step) oluşmuştur. 

-t ifadesini kullanarak imajımıza istediğimiz tag’i verebiliriz. İmaj build edilirken Dockerfile dosyasının bulunduğu path’in de belirtilmesi gerekmektedir. Dockerfile dosyamızın olduğu klasörün içerisinden build ettiğimiz için komutun sonuna “.” (nokta) koyduk. 

 

Çalıştığınız sistemde python:3.6 baz imajının olmaması durumunda FROM python:3.6 komutu ile python baz imajı makinenize indirilir. Örnek için kullandığımız makinede python baz imajı bulunduğu için tekrar indirilmedi.

 

Artık imajımızı tanımladığımız tag ile run edebiliriz. Siz de aşağıdaki komutu kullanarak merveozdes/mypython:0.1 tag’i yerine kendi tanımladığınız tag’i kullanarak imajınızı run edebilirsiniz. Run ettikten sonra hello.py dosyasında print komutu ile ekrana yazmasını beklediğimiz  “Hello world” mesajını elde etmiş olduk.

 

Oluşturduğunuz imajı docker images komutu ile de görebilirsiniz.


 

Bu yazımda sizlere Dockerfile dosyasının yapısını ve komutlarının açıklamalarını vererek bir imajın nasıl oluşturulduğunu göstermek istedim. Bunu basit bir python dosyası ile imaj oluşturarak örnekledik. Siz de bu uygulamada yaptığımız gibi farklı uygulamalar için de imajlar oluşturup build edebilirsiniz. Docker imaj oluşturma, Docker Hub içinde imaj arama, imaj etiketleme, Dockerfile dosyası oluşturma, özgün imajlar yaratma, imajların Docker Hub’a gönderilmesi ve daha fazlasını uygulamalı bir biçimde öğrenmek isterseniz Miuul’un sunmuş olduğu Production Level Data Science programını mutlaka incelemelisiniz


 

Kaynak

Miuul topluluğunun bir parçası ol!

Abone ol butonuna tıklayarak Miuul'dan pazarlama ve haber içerikleri almayı onaylıyorum.