Kubedo Academy’e hoş geldiniz! Bu laboratuvarda Docker imajları oluşturmayı, Dockerfile kullanmayı ve katman yapısını öğreneceksiniz.
Zorluk seviyesi: Başlangıç
Süre: Yaklaşık 25 dakika
İçindekiler
- 1. Container’dan İmaj Oluşturma
- 2. Dockerfile ile İmaj Yaratma
- 3. İmaj Katmanları
- 4. İmaj İnceleme
- 5. Terminoloji
Giriş
Önceki bölümde, container içerisinde çalıştırmak için imajları Docker Hub‘dan indirmiştik. Şimdi kendi imajlarımızı nasıl oluşturacağımızı öğreneceğiz.
Docker Hub’da 700.000’den fazla imaj mevcut olsa da, kendi ihtiyaçlarınıza göre özelleştirilmiş imajlar oluşturmak isteyeceksiniz.
1. Container’dan İmaj Oluşturma
Bir ubuntu container’ında interaktif shell çalıştırarak başlayalım:
$ docker container run -ti ubuntu bashContainer içinde figlet paketini kuralım:
$ apt-get update
apt-get install -y figlet
figlet "selam docker"Container’dan çıkın:
$ exitContainer’ı İmaj Olarak Kaydetme
Container ID’sini bulun:
$ docker container ls -aDeğişiklikleri analiz edin:
docker container diff <container_ID>
Container’ı commit ederek imaj oluşturun:
docker container commit <container_ID>
İmajları listeleyin:
$ docker image lsİmaj Etiketleme
İmajı anlamlı bir isimle etiketleyin:
docker image tag <IMAGE_ID> bizimfiglet
docker image ls
Yeni imajı test edin:
$ docker container run bizimfiglet figlet merhaba docker[!TIP] Manuel kurulum yerine Dockerfile kullanmak çok daha iyi bir yöntemdir. Takip eden bölümde bunu öğreneceğiz.
2. Dockerfile ile İmaj Yaratma
Dockerfile, imaj oluşturma talimatlarını içeren bir metin dosyasıdır. Bu yöntemin avantajları:
- Tekrarlanabilirlik - Her seferinde aynı imaj
- Versiyon kontrolü - Git ile yönetilebilir
- Paylaşılabilirlik - Başkalarıyla kolayca paylaşılır
Örnek: Node.js Uygulaması
index.js dosyası oluşturun:
var os = require("os");
var hostname = os.hostname();
console.log(hostname + " sunucusu içinden merhaba");
Dockerfile oluşturun:
FROM alpine
RUN apk update && apk add nodejs
COPY . /app
WORKDIR /app
CMD ["node","index.js"]
Dockerfile Komutları
| Komut | Açıklama |
|---|---|
FROM | Temel imajı belirtir |
RUN | Container içinde komut çalıştırır |
COPY | Dosyaları container’a kopyalar |
WORKDIR | Çalışma dizinini ayarlar |
CMD | Container başladığında çalışacak komutu belirtir |
İmajı Oluşturma
$ docker image build -t hello:v0.1 .Test edin:
$ docker container run hello:v0.1[!NOTE] Aristo’nun sözü Docker için: “Bir sistem yöneticisine bir imaj verin, uygulamaları bir gün güncel olsun. Bir Dockerfile verin, uygulamaları her zaman güncel olsun.”
3. İmaj Katmanları
Docker imajları katmanlardan oluşur. Her Dockerfile komutu yeni bir katman oluşturur.
Katman Geçmişi
docker image history <image_ID>

Cache Kullanımı
Uygulamayı güncelleyin:
$ echo "console.log(\"surum v0.2\");" >> index.jsYeniden build edin:
$ docker image build -t hello:v0.2 .“Using cache” mesajına dikkat edin - Docker değişmeyen katmanları yeniden kullanır!
[!IMPORTANT] Katmanlar immutable (değişmez)‘dir. Bu hem güvenlik hem de verimlilik sağlar.
4. İmaj İnceleme
Bir imajın detaylarını incelemek için:
$ docker image inspect alpineBelirli Bilgileri Filtreleme
Katmanları görüntüleme:
$ docker image inspect --format "{{ json .RootFS.Layers }}" alpineAlpine tek katmandan oluşur:
["sha256:60ab55d3..."]
Hello imajımız ise üç katmandan oluşur:
- Alpine base image (FROM)
- apk install (RUN)
- Uygulama dosyaları (COPY)
5. Terminoloji
| Terim | Açıklama |
|---|---|
| Layers | Docker imajını oluşturan katmanlar. Her Dockerfile komutu bir katman oluşturur. |
| Dockerfile | İmaj oluşturma talimatlarını içeren metin dosyası. |
| Volumes | Kalıcı veri depolama için özel Docker bileşeni. Container’dan bağımsız olarak veri saklar. |
| Cache | Değişmeyen katmanların yeniden kullanılması için önbellek. |