Dockerfile, Docker konteynerlerinin oluşturulması ve yapılandırılması için kullanılan komutları içerir. Bu komutlar, container’ın nasıl oluşturulacağını, nasıl yapılandırılacağını ve çalıştırılacağını belirtir.
Bir image üzerinden container ayağa kaldırıldıktan sonra birçok ayarlama yapılır. Bu ayarları her seferinde yapmak büyük bir zaman kaybı oluşturur. Dockerfile sayesinde bu ayarlamalar otomatikleştirilmiş olur. Direkt basit bir örnek üzerinden anlatalım. Bir klasöre Dockerfile adında bir dosya oluşturalım. Bu Dockerfile dosyasına aşağıdaki satırları ekleyelim. Farklı text editörleri kullanabilirsiniz. (Ben Visual Studio Code) ve bu ortamdaki terminal üzerinden çalıştırmaları yaptım.)
1 2 3 4 5 6 |
#Image Örneği FROM ubuntu RUN apt-get update RUN apt-get install –y nginx CMD [“echo”,”Image yaratıldı.”] |
Kısaca yapılan işlemleri açıklayalım.
- İlk satır yorumdur. # komutu yardımıyla Docker Dosyasına yorum ekleyebilirsiniz. Tavsiye olunur 🙂
- FROM ile başlamalıyız. Bu bölüm hangi docker image’ini kullanacağımızı gösterir. Burada “:” kullanılıp image’in türü belirlenebilir. Hiçbir şey yazılmadığında default image kullanılmış olur.
- RUN komutu çalışacak komutları belirler. Burada Ubuntu güncellemesi yapılmış ve ardından ngnix sunucusu ubuntu içine kurulmuştur. -y kurulum yapılırken kullanıcıdan beklenen her girdinin “evet” olarak işaretlenmesi anlamına gelir.
- Son komut, CMD ile echo komutu çağrılmış ve bir parametre (“Image yaratıldı.”) gönderilmiştir. Ekrana bu yazıyı basar.
Dosyamızı kaydetmeyi unutmayalım. Kaydetmeden sonra aşağıdaki komutlar ile image’i oluşturabiliriz.
docker build komutu ile Dockerfile üzerinenden kendimize bir image oluşturabiliriz. Bu komut aşağıdaki parametreleri alır.
docker build -t ImageName:TagName dir
Burada
- -t: image’e bir etiket için kullanılır.
- ImageName – Image’inize isim vermek için kullanılır.
- TagName – Image’inizin etiket ismi için kullanılır. (versiyon, slim versiyon için kullanışlı)
- Dizin – Docker Dosyasının yolunu verir. “.” ile geçerli klasör verilebilir.
Terminal ekranından Dockerfile dosyamızı build yapalım. Ben Dockerfile ile aynı klasörde olmayı tercih ettim. (Daha az kod yazmak için) Sonuç:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
(base) erdincuzun@... 01.DockerFile % docker build -t myimage:0.1 . [+] Building 16.3s (7/7) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 165B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ubuntu:latest 0.0s => [1/3] FROM docker.io/library/ubuntu 0.0s => CACHED [2/3] RUN apt-get update 0.0s => [3/3] RUN apt-get install -y nginx 16.1s => exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:c9ead4f7f2cfd77dd0b06a32a59f32d9e7a094a6b62bf7a6603cd 0.0s => => naming to docker.io/library/myimage:0.1 0.0s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them |
docker images komutu ile image’in yaratılıp yaratılmadığını kontrol edebiliriz.
1 2 3 4 |
(base) erdincuzun@... ~ % docker images REPOSITORY TAG IMAGE ID CREATED SIZE myimage 0.1 c9ead4f7f2cf 4 minutes ago 161MB ubuntu latest 3c2df5585507 4 weeks ago 69.2MB |
Tebrikler, ilk image’nizi yarattınız.