Docker Nedir?

Fatma Delen
5 min readJan 10, 2021

--

Merhabalar🙋‍♀️, bugün sizlere bir container teknolojisi olan Docker’dan bahsedeceğim.

Docker, uygulamaların hızlı derlenip test edilmesine ve dağıtılmasına imkan tanıyan bir container teknolojisidir. Sanal makineden farklı olarak, işletim sistemi oluşturmak yerine, Linux çekirdeğini paylaşarak birbirinden izole ve bağımsız binlerce processler(containerlar) sayesinde sanallaştırma sağlar.

Kurulum Linki: https://docs.docker.com/get-docker/

Bilinmesi Gereken Terimler:

— İmage: Çalıştırmak istediğimiz uygulamaların paketlenmiş halleridir.

— Container: Paketlenmiş imageleri çalıştırabileceğimiz alanlardır.

— Dockerfile: Localimizde çalışan projeden image üretmek için kullanacağımız config dosyasıdır.

— Docker Registry: İmagelerin saklandığı yeri temsil eder.

— Docker Engine: Linux çekirdeğinin üzerinde çalışır.

— Docker Machine: Bir veya birden fazla sistem üzerine “Docker Engine” yüklemek için kullanılır.

— Docker Daemon: Containerların birbirlerinden izole bir şekilde çalışmasını sağlamak için gerekli ortamları sağlar.

— Docker CLI: Kullanıcının Docker Daemon ile konuşabilmesi için gerekli komut setini sağlar.

NOT — Docker, Linux Kernel e eklenen Linux Containers (LXC) üzerine kurulu bir teknolojidir. Docker client-server yapısını kullanır. Mac ve Windows’da Docker kendi Linux’unu kurarak sanal bir Linux üzerinde çalışıyor. Yani serverını oluşturuyor. (Client tarafı sizin kendi hostunuz oluyor server tarafı ise Dockerın çalıştığı host oluyor.) Bizde client dan ona hangi container nı oluşturması gerektiğini neyin nasıl olması gerektiğini söylüyoruz.

DOCKER CLI ile Docker’ı Tanıma Yolculuğu

—docker version : Docker’ı kurduk amaaa gerçekten kurulmuş mu diye kontrol etmek için bu komutu koşturun. Eğer kurulmuşsa docker version bilgilerini verecektir.

— docker pull <image>: DockerHub’dan istediğimiz image i dowload edelim. Ben nginx ‘i dowload ettim.

— docker images: İmageleri listeler.

— docker run <image>: İlgili imageden yeni bir container oluşturulur ve container çalıştırılır.

— docker rmi <image>: İmage i siler.

— docker ps: Containerlar listelenir.

Koşmaya devam ediyorsa yukarıdaki gibi bir çıktı verecektir.

Daha önce koşan ve işlemini tamamlayıp çıkan containerları listelemek için docker ps -a komutunu kullanabiliriz.

Daha anlaşılabilir olması için bir kere koşup çıkan(exit) hello-world image’ini indirdim.

— docker start -a <CONTAINER ID>: Çıkış yapan containeri tekrar çalıştırmak için kullanılır.

— docker restart <CONTAINER ID>: Containerı yeniden başlatmak için kullanılır.

— docker rm <CONTAINER ID>: Sadece çıkış yapmış containerlar silinebilir. docker rm -f <CONTAINER ID> ile container çalışır durumda olsa bile silinir.

— docker stop <CONTAINER ID>: Bu komut ile container durdurulur. Yukarıda çalışır durumda olan containeri silmek için kullanılan komutu kullanmak istemiyorsak ilk önce containerı durdurur ardından docker rm <CONTAINER ID> komutunu kullanarak containerı silebiliriz.

— docker exec -it <CONTAINER ID> bash : Containera erişir ve containerın içindeki komutları çalıştırır.(Container’a bir Bash Shell açar.)

En son nginx containerını silmiştim tekrar çalışırıp terminaline yukarıdaki komutla ulaştım. “ls” komutu ile içinde bulunan dosyaları listeledim.

— docker cp <CONTAINER ID>:<kopyalanacak yol> <local yol>: Container’daki bir dosyayı locale kopyalar.

Dockerfile Oluşturma

Örnek olarak, bir react projesi oluşturan bir Dockerfile oluşturalım, bunun için uzantısı olmayan Dockerfile adında bir dosya oluşturalım:

FROM: Kullanılacak Image i ifade eder.
RUN: Build işlemi sırasında çalıştırılacak komutları belirtmek için kullanılır.
WORKDIR: Çalışma dizinini ifade eder.
CMD: Dockerfile içerisinde sadece bir CMD komutu bulunabilir. Image’in çalıştığı container içerisinde terminale komut verir.
ADD: Oluşturulan image e host dosya üzerinden veya internet üzerinden yeni bir dosya eklemek için kullanılır.
COPY: Image kopyalanacak dosyaları ifade eder.
EXPOSE : Image port numarasını ifade eder.

Dosyayı oluşturduktan sonra dosyanın bulunduğu klasöre gidip “docker build . “ komutu koşulur.

Yukarıdaki gibi bir çıktı elde etmelisiniz…
Çıktının sonu.

Şimdi imagelerimizi kontrol edelim.

Görüldüğü gibi image id kolonunda verilen değerin (49a27e93d42d) yukarıdaki(bundan önceki) çıktıdaki en son satırda verilen Image ID olduğuna dikkat edin.

İmageleri listelerken yeni oluşturduğumuz image’in bir repository ve tagı olmadığını gördük.

— docker tag <image id> <repository>:<tag> : Repository ve tag eklemek için kullanılır.

Docker Compose Nedir?

Compose ile birlikte birden fazla Container tanımı tek bir dosyada yapılabilir. Development ve test ortamı için kullanılır. Docker Compose bu ortamlarda kolay kurulum, bakım ve genel olarak kullanım sağlamaktadır. Kısaca, biz dizi farklı Container’ları kolay bir şekilde başlatma, düzenleme ve yönetme işini yapar.

docker-compose.yml isimli bir dosya oluşturulur. Bu dosyada çalıştırmak istediğimiz imageleri hangi port da hangi volume da çalıştırmak istediğimizi belirtiriz.

Not: Bu dosyada detayları verilen ve birbiriyle ilişkileri tanımlanan containerlar tek bir komut ile koşturulabilir, durdurulabilir veya kaldırılabilir.

Hemen docker-compose.yml dosyası oluşturalım. (Öncelikle 2 html dosyası oluşturdum servisler için)

version: Docker compose versiyon numarası
services: Docker Compose ile yönetmek istediğimiz servislerin tanımlandığı alan
image: Servisin kullandığı image adı
ports: Servisin dışarıya açılan portun kendi bilgisayarımızda hangi porta karşılık geleceğini tanımladığımız alan.
volumes : Klasörü Container üzerindeki belirtilen klasöre mount etmek için kullanılır.

docker-compose up: docker-compose.yml dosyasının içerisindeki serviceleri ayağa kaldırır.(yml’ın bulunduğu dizinde bu komutu koşun)

Yukarıdaki çıktıya benzer bir çıktı görmelisiniz. (Ctrl c yaparsak containerların çalışmaları durur.)

docker-compose up -d: Bu komut servisleri ayağı kaldırıp çıktıyı verip çıkar. Yukarıdaki komut gibi dinamik değildir.

docker ps ile containerları listelediğimizde bu çıktıyı görmeliyiz.(Eğer containerları durdurduysak docker ps -a kontrol ediniz.)

docker-compose ps: yml dosyasının bulunduğu dizinde çağırılınca compose tarafından başlatılan containerları listeler.

docker-compose down: Composer’ın yarattığı bütün containerleri durdurur ve siler.

docker-compose exec <service> bash: Çalışmakta olan Container’da bir komut koşturmak için kullanılır.

İlgili servicedeki Container’a bir Bash Shell açtık.

Okuduğunuz için teşekkür ederim 😇.

--

--