Docker Başlangıç

Docker kullanımı ve genel özellikleri - İlk container'ınızı çalıştırın

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


İpuçları

Ortamımız içerisindeki kod parçacıkları üç yoldan biriyle gösterilir:

  1. Bu gibi görünen kod, genellikle bir açıklamanın parçası olan örnek kod parçacıklarıdır.
  2. Terminal bloklarındaki kod tıklanabilir ve çalışacağı terminal penceresine otomatik olarak yazılır.
  3. <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:

Terminal
$ docker container run hello-world

Peki Burada Ne Oldu?

Ekranda çıkan hello-world yazısı bize ne olduğu hakkında bir ipucu veriyor aslında:

  1. Docker komutu, hello-world adlı bir imaj bulmaya çalıştı
  2. Unable to find image... çıktısı, yerel diskte bu imajın olmadığını bildirdi
  3. Docker Engine, varsayılan Docker Registry olan Docker Hub‘dan imajı indirdi
  4. İmajı bir container içerisinde çalıştırdı
  5. Container işini bitirip sonlandı
Hello World işlem akışı
Docker run akışı

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:

ÖzellikSanal Makine (VM)Container
SanallaştırmaDonanım katmanıUygulama katmanı
İşletim SistemiHer VM kendi OS’unu taşırHost OS kernel’ini paylaşır
Başlangıç Süresi1-2 dakikaMilisaniyeler
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ımBoyut
Ubuntu~70MB
Alpine~5MB

Alpine imajını indirmek için:

Terminal
$ docker image pull alpine

Sisteminizdeki imajları listelemek için:

Terminal
$ docker image ls
REPOSITORY   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:

Terminal
$ docker container run alpine ls -l
total 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:

  1. İmajı bulur (alpine)
  2. Container’ı oluşturur
  3. Komutu container içinde çalıştırır (ls -l)
  4. Komut bitince container durur
Docker run detayları

Başka Komutlar Deneyelim

Terminal
$ docker container run alpine echo "Bu çıktı ALPINE içerisinden gelmektedir"

Container içinde olduğunuzu anlamanın bir yolu:

Terminal
$ cat /etc/issue
Terminal
$ docker container run alpine cat /etc/issue

İnteraktif Terminal

Bir shell ortamı için -it parametresini kullanın:

Terminal
$ 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:

Terminal
$ docker container ls

Durmuş olanlar dahil tümünü görmek için:

Terminal
$ docker container ls -a

2.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:

Terminal
$ docker container run -it alpine /bin/ash

Container içindeyken:

echo "Merhaba Kubedo!" > merhaba.txt
ls
exit

Şimdi yeni bir container başlatalım:

Terminal
$ docker container run alpine ls

merhaba.txt dosyası yok! Çünkü bu tamamen farklı bir container.

Container izolasyonu
Her container izole bir ortamdır

Durmuş Container’a Erişmek

Dosyamızın olduğu container’ı bulmak için:

Terminal
$ docker container ls -a

COMMAND 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

TerimAçıklama
ImageContainer oluşturmak için kullanılan kalıp. Değişmezdir.
ContainerImage’ın çalışan hali. Uygulamayı ve bağımlılıklarını içerir.
Docker DaemonContainer’ları yöneten arka plan servisi.
Docker ClientDaemon ile etkileşim için komut satırı aracı.
Docker HubDocker image’larının bulunduğu varsayılan registry.

Sonraki Adım

Docker İmajları →


Konu Tekrarı - Kısa Sınav