Bu yazımda, sizlere temel Docker komutlarından bahsedecek, komutları açıklamaları ve örnekleriyle birlikte anlatacağız. Böylece, Docker Hub’dan bir image indirmeyi, bir container’ı (kapsayıcı) çalıştırabilmeyi, durdurabilmeyi veya silebilmeyi öğreneceksiniz.
Docker kurulu bir sistemde komut satırından bu komutu yazıldığında, Docker ile ilgili komut ve parametreler listelenecektir.
Docker’ın versiyonunu görmek için kullanılır. Aşağıdaki gibi bir çıktı üretir.
Docker servisinin durumu öğrenmek için kullanılır. Docker’ın o an aktif olup olmadığını gösterir. Eğer docker servisiniz inactive durumdaysa, servisinizi başlatmanız gerekmektedir.
Bu komut ile Docker servisi başlatılabilir.
Docker komutlarının “sudo” ile çalıştırılması gerekmektedir. “sudo” yazmadan docker komutlarını kullanabilmek için mevcut kullanıcının Docker grubuna eklenmesi gerekmektedir. Bunun için kendi kullanıcınızla terminaldeyken aşağıdaki komutları girebilirsiniz.
$ sudo usermod -aG docker
$ su –
Yukarıdaki ile belirtilen kısma eklemek istediğiniz kullanıcıyı girmeniz gerekmektedir. Bundan sonraki komutlar sudo kullanılmadan verilecektir.
Bu komutla makinenin içerisinde çalıştırılabilir Docker image’leri detaylı bir şekilde listelenir. Aşağıda da görüldüğü gibi makinemizde bulunan image’ler detaylı bir biçimde listelendi.
Hem container oluşturmak hem de onu çalıştırmak için kullanılır. Create ve start komutunun yaptığını tek seferde yapar.
docker run = docker create + docker start
Örneğin hello-world container’ını çalıştırmak isteyelim:
docker run hello-world
Yukarıdaki komutu yazdığınızda hello-world image’i lokalde aranır ve bu image lokalinizde yoksa docker hub’dan indirilir. Tekrar aynı komutu girdiğinizde bir uyarı vermeden direkt çalıştırılır. Yukarıda listelediğimiz image’ler arasında hello-world de bulunduğu için bu komut ile direkt çalıştırmış olacağız.
Çalışan container’ları listelemek için kullanılır. Bu aşamada herhangi bir container çalıştırmadığımız için liste boş dönmüştür.
Daha önceden çalıştırılıp sonradan durdurulan container’ları listeler.
Docker login ve logout komutları ile Docker Hub sayfasından oluşturulan hesaba giriş yapılabilir ve oturumdan çıkılabilir. Komut satırından yukarıdaki login komutu ile giriş yaparak image yükleyebilir veya image çekebilirsiniz.
Pull komutu ile istenen image Docker Hub’dan kullanılan makineye çekilebilir.
Bir container’ı çalıştırmak, durdurmak ve silmek için kullanılan komutlar
Daha önce de belirttiğimiz gibi run komutu ile bir container çalıştırılabilir. Örnek olarak postgresql container’ına bağlanalım. Bunun için docker hub’da postgresql yazarak arama yaparsanız aşağıdaki gibi bir sonuç gelecektir.
En yukarıda listelenen Docker official image en güvenilir olanıdır. Biz de onu seçerek devam edeceğiz. Official olanı seçtiğinizde bu image hakkında bilgiye, versiyonlarına ve nasıl kullanılacağına ulaşabilirsiniz.
docker run postgres ile en son sürüm etiketiyle bağlanılır. Ancak öze bir sürüm kullanılmak istendiğinde aşağıdaki gibi belirtilmesi gerekmektedir.
docker run --name docker_postgres –e POSTGRES_USER=postgres –e POSTGRES_PASSWORD=1234 –d postgres:13
Şimdi burada geçen ifadeleri açıklayalım:
--name: Bu değişken ile container’a dilediğiniz bir isim verebilirsiniz.
-e: Ortam değişkeni (environment variable) tanımlamak için kullanılır. Her container’ın kendine ait ortam değişkenleri olur. Bu değişkenlere docker hub’da istediğiniz container’ı aratarak erişebilirsiniz.
-POSTGRES_USER: Bu isteğe bağlı ortam değişkeni, bir kullanıcıyı ve parolasını ayarlamak için POSTGRES_PASSWORD ile birlikte kullanılır. Belirtilmezse, postgres'in varsayılan superuser kullanıcısı olan postgres parolası kullanılacaktır.
-d (--detach): Container’ı arkaplanda oluşturur ve container ID’sini ekrana yazdırır.
postgres:13: Burada farklı tag’ler kullanabilirsiniz. Bu tag’lere docker hub sayfasından ulaşabilirsiniz. Biz aşağıda da listelenen tag’lerden 13 tag’ını kullandık.
Daha önce bu image makinemizde bulunmadığı için komutu girdiğimizde image docker hub’dan indirilir.
Tekrar container’larımızı listelediğimizde artık postgres’in bu yeni versiyonunu da göreceğiz. Tag’leri versiyon olarak düşünebilirsiniz. Artık makinemizde hem 10 hem de 13 tag’ine sahip postgres image’ımız bulunmakta.
Oluşturulan container’ı tekrar başlatmak için run etmemize gerek yoktur. Container id veya container name ile start yapabiliriz.
Docker container start docker_postgres
Bir container’a bağlanma
Çalıştırdığımız postresql container’ı ile etkileşime nasıl geçebiliriz? Image’ımız yukarıdaki sonuçlardan da gördüğünüz gibi postgres:13, container’ımız ise docker_postgres. postgres:13 image’ından docker_postgres isimli container’ı yarattık.
Gelin elimizi biraz kirletelim ve çalışan docker_postgres container’ımızın içinde bir terminal açalım:
docker container exec –it docker_postgres /bin/bash
ile aşağıdaki gibi bir sonuç elde edeceksiniz. Prompt’un nasıl değiştiğine ve Container ID’yi içerdiğine dikkat edin. Kullanıcınız artık root oldu.
Artık container’ın içerisindeyiz. Bir işletim sisteminin terminalini kullandığınız gibi burada da o komutları çalıştırabilirsiniz. Örneğin ls komutunu deneyelim:
exit komutu ile çıkış yapabilirsiniz.
Peki, /bin/bash yerine direkt postgresql shell’ine bağlanmak istersek:
docker container exec –it docker_postgres psql –U postgres
Şu an postgresql’in shell’indeyiz. Burada veritabanı işlemleri yapabiliriz.
\l ile veritabanlarını listeleyebilir, Postresql shell’den çıkmak için \q komutu kullanılabilir.
Bir container’ı durdurma
Aşağıdaki komutlar ile bir container durdurulabilir:
docker container stop
veya
docker container stop
Bir container’ı silme
docker rm
veya
docker rm
Komutları bir container’ı silmek için kullanılabilir. Eğer silinmek istenen container halihazırda çalışıyorsa, bu komutu çalıştırıldığında hata ile karşılaşılır. Silinmek istenen container’ın öncelikle durdurulması gerekmektedir.
Daha önce oluşturduğumuz docker_postgres isimli container’ımızı silelim ve tüm container’ları docker container ls –a komutu ile listeleyelim. Çıkan sonuçtan artık postgres:13’ün listelenmediğini görebilirsiniz.
Container silindikten sonra docker container start docker_postgres komutu hata verecektir. Bunun nedeni artık ilgili container’ın makinemizde bulunmamasıdır.
Tüm container’ların kaldırılması
docker system prune
Komutu ile tüm container’ları kaldırabiliriz.
Bu yazıda en çok kullanılan Docker komutlarını sizlerle paylaştım. Tabii docker komutları sadece bunlarla sınırlı değil. Yazının başında docker komutu ile listelediğimiz komutlardan da gördüğünüz gibi kullanabileceğiniz çok daha fazla komut mevcut. Sizler de Docker’ı etkin bir şekilde kullanmak ve Docker komutlarına hakim olmak istiyorsanız Miuul’un Production Level Data Science programını inceleyebilirsiniz. 'Veri Bilimcileri' ve adaylarını teknik yönden güçlendirmek, onları container ortamlarıyla tanıştırmak, farklı model dağıtım seçenekleri hakkında bilgiyle donatarak yeterli pratikliği kazandırmayı hedefleyen bu program, kendinizi bu alanda geliştirmeniz için kaçırılmayacak bir fırsat sunuyor.