Kubedo Academy’e hoş geldiniz! Bu laboratuvarda popüler, ücretsiz, az kaynak tüketen bir container çalıştıracak ve container’ların nasıl çalıştığını anlayacaksınız.
Zorluk seviyesi: Başlangıç
Süre: Yaklaşık 25 dakika
İçindekiler
- 1. İlk Container’ı Çalıştırmak
- 2. Container ve İmaj Nedir?
- 2.1 Docker Container Çalıştırma
- 2.2 Container İzolasyonu
- 2.3 Terminoloji
İpuçları
Ortamımız içerisindeki kod parçacıkları üç yoldan biriyle gösterilir:
Bugibi görünen kod, genellikle bir açıklamanın parçası olan örnek kod parçacıklarıdır.- Terminal bloklarındaki kod tıklanabilir ve çalışacağı terminal penceresine otomatik olarak yazılır.
<container ID>şeklinde görünen öğeler, talimatlara göre değiştirmeniz gereken parçalardır.
1. İlk Container’ı Çalıştırmak
Yazılım dünyasında her zaman “Hello World” uygulaması ile başlama geleneğine uyalım. İlk Docker container’ınızı çalıştırmak için aşağıdaki komutu yazın:
$ docker container run hello-worldPeki Burada Ne Oldu?
Ekranda çıkan hello-world yazısı bize ne olduğu hakkında bir ipucu veriyor aslında:
- Docker komutu, hello-world adlı bir imaj bulmaya çalıştı
Unable to find image...çıktısı, yerel diskte bu imajın olmadığını bildirdi- Docker Engine, varsayılan Docker Registry olan Docker Hub‘dan imajı indirdi
- İmajı bir container içerisinde çalıştırdı
- Container işini bitirip sonlandı
Container vs Sanal Makine
Sanal makinelere aşina iseniz, bu işlemin bir sanal makineyi çalıştırmaya benzediğini düşünebilirsiniz. Ancak önemli farklar vardır:
| Özellik | Sanal Makine (VM) | Container |
|---|---|---|
| Sanallaştırma | Donanım katmanı | Uygulama katmanı |
| İşletim Sistemi | Her VM kendi OS’unu taşır | Host OS kernel’ini paylaşır |
| Başlangıç Süresi | 1-2 dakika | Milisaniyeler |
| Kaynak Kullanımı | Yüksek (GB RAM) | Düşük (MB RAM) |
[!TIP] Çoğu production ortamda yapı
Donanım → Hypervisor → VM → Containerşeklindedir. Container’lar genellikle sanal sunucular içinde çalıştırılır.
2. Container ve İmaj Nedir?
İmaj (Image) olarak bahsedilen kavram çok önemlidir. İmaj, bir anlık görüntü veya heykel yapmak için kullandığınız bir kalıptır. İmaj kalıcı ve değişmeyen bir ortamdır; her seferinde aynı imajla aynı işlemi yaparsınız.
[!NOTE] Docker için image kelimesi geçtiğinde aklınıza her zaman heykel yapmak için kullanacağınız değiştirilemez bir kalıp düşünün.
Alpine Linux
Laboratuvarın geri kalan kısmında Alpine Linux container’ı kullanacağız. Alpine çok az kaynağa ihtiyaç duyan bir Linux dağıtımıdır:
| Dağıtım | Boyut |
|---|---|
| Ubuntu | ~70MB |
| Alpine | ~5MB |
Alpine imajını indirmek için:
$ docker image pull alpineSisteminizdeki imajları listelemek için:
$ docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest d6e46aa2470d 3 weeks ago 5.57MB
hello-world latest bf756fb1ae65 10 months 13.3kB
2.1 Docker Container Çalıştırma
İmajı indirdiğimize göre artık çalıştırabiliriz. Container, indirdiğimiz imajın çalışan bir örneğidir:
$ docker container run alpine ls -ltotal 56
drwxr-xr-x 2 root root 4096 Oct 21 09:23 bin
drwxr-xr-x 5 root root 340 Nov 17 16:33 dev
drwxr-xr-x 1 root root 4096 Nov 17 16:33 etc
...
run komutunu çağırdığınızda Docker:
- İmajı bulur (alpine)
- Container’ı oluşturur
- Komutu container içinde çalıştırır (
ls -l) - Komut bitince container durur
Başka Komutlar Deneyelim
$ docker container run alpine echo "Bu çıktı ALPINE içerisinden gelmektedir"Container içinde olduğunuzu anlamanın bir yolu:
$ cat /etc/issue$ docker container run alpine cat /etc/issueİnteraktif Terminal
Bir shell ortamı için -it parametresini kullanın:
$ docker container run -it alpine /bin/shŞu an bir container’ın içindesiniz! Bazı komutları deneyin:
ls -la
uname -a
cat /etc/os-release
exit
Çalışan Container’ları Listeleme
Aktif container’ları görmek için:
$ docker container lsDurmuş olanlar dahil tümünü görmek için:
$ docker container ls -a2.2 Container İzolasyonu
Her docker container run komutu aynı imajı kullansa bile ayrı, izole bir container oluşturur.
[!IMPORTANT] Bu, Docker container’ları için kritik bir güvenlik konseptidir! Her container’ın ayrı bir dosya sistemi ve namespace’i vardır.
İzolasyonu Görelim
Bir container’da dosya oluşturalım:
$ docker container run -it alpine /bin/ashContainer içindeyken:
echo "Merhaba Kubedo!" > merhaba.txt
ls
exit
Şimdi yeni bir container başlatalım:
$ docker container run alpine lsmerhaba.txt dosyası yok! Çünkü bu tamamen farklı bir container.
Durmuş Container’a Erişmek
Dosyamızın olduğu container’ı bulmak için:
$ docker container ls -aCOMMAND sütununda /bin/ash olan container’ı bulun. Container ID’yi not alın, ardından:
docker container start <container_id>
docker container exec <container_id> ls
[!TIP] Container ID’nin ilk birkaç karakterini kullanmak yeterlidir. Örneğin:
docker container start d897
2.3 Terminoloji
| Terim | Açıklama |
|---|---|
| Image | Container oluşturmak için kullanılan kalıp. Değişmezdir. |
| Container | Image’ın çalışan hali. Uygulamayı ve bağımlılıklarını içerir. |
| Docker Daemon | Container’ları yöneten arka plan servisi. |
| Docker Client | Daemon ile etkileşim için komut satırı aracı. |
| Docker Hub | Docker image’larının bulunduğu varsayılan registry. |