Komut Satırı— Docker #S1B2
Mavi Balina — Docker #S1B1 🐳 bölümünden sonra hayatımızda yer edinecek CLI komutlarını beraber gözden geçirelim. Tüm CLI komutlarına buradan erişebilirsiniz veya diğer bir yöntem olan powershell üzerinden docker --help
komutuyla da detaylarını görüntüleyebiliriz.
docker run (run a command in a new container)
Container oluştururken aynı zamanda container’ı ayağa kaldırmak istiyorsak bu komut iyi bir çözüm olabilir. 👌🏻 Çünkü container oluşturmak için kullanılan docker craete + docker start
komutlarının her ikisini birlikte gerçekleştiren komuttur. Ayrıca run komutu docker attach
komutunu da üstlendiğinden dolayı uygulamanın çıktısını da görebiliriz.
docker start: start one or more stopped containers
docker create: create a new container
docker attach: attach local standard input, output, and error streams to a running container
docker run — rm (remove one or more containers)
Özünde container silmek için kullanılan komut desek çok yanlış olacağını düşünmüyorum. Bir container’ı ayağa kaldırırken -rm
parametresini belirtirseniz eğer container durdurulduğunda aynı zamanda durdurulan container silinmiş ✂️olacaktır.
Container’ı durdurmak ile silmek birbirinden farklı şeylerdir. Containerlar #S1B1 bölümünden bilindiği üzere silinebilir, durdurulabilir veya çalıştırılabilir.
Eğer mevcut container’ların tamamını silmek isterseniz docker rm $(docker ps -a -q) --force
komut şemasını kullanabilirsiniz.
docker rmi (remove one or more images)
Özünde image silmek için kullanılan komuttur fakat image’inize bağlı olan container/lar varsa önce bağımlı containerları silmeniz gereklidir. ( --force
kullanmadığınızı varsayıyorum.) Bunun tabii nedeni sizin de tahmin edebileceğiniz gibi “Güvenlik” 👮🏻♀️ 👮🏻
Imageler tag yardımıyla versiyonlanarak birden fazla aynı isme sahip image oluşturulabilir.
docker rmi (image sil) & docker rm (container sil) force
Çalışan bir container’ı silemezsiniz, docker sizi bu konuda uyarır. Eğer zorunlu olarak çalışan container’ı silmek istiyorsanız docker rm
komutunun sonuna --force
parametresini eklemelisiniz. $ docker rm --force redis
Eğer image’e bağlı bir container aktif şekilde çalışıyorsa --force
parametresi ile dahi image’i silemezsiniz. İlk önce container’i durdurmanız gerekmektedir. Yetti mi? Yetmedi.. Container dursa dahi bir image’e bağımlı olduğu için image’i yine silemezsiniz. Anlaşılacağı üzere çalışan bir container’ı silemiyoruz ve container durmuş dahi olsa bir bağımlılığı var ise yine silemiyoruz.
Image özelinde özetlemek gerekirse; Image’e bağlı bir container varsa image silinemez. İlgili image’a bağlı durdurulmuş bir container varsa force parametresiyle image silinebilir. Eğer image’e bağlı container yoksa sadece rmi
komutuyla image silinebilir.
docker pull (pull an image or a repository from a registry)
Docker Hub sitesinden bu komutla beraber image/ler local 💻 docker’ımza indirebiliriz.
Bu image içerisinde mini bir işletim sistemi ve bu işletim sistemi üzerinde hazır kurulu SDK bulunacaktır. Pull ettiğimiz image bir SDK olduğundan dolayı herhangi bir uygulamaya build işlemi gerçekleştirebilirim.
Image’lerin katman (layer) 📚 topluluğu olduğundan bahsetmiştik. İlk komut olan docker pull komutuna dikkat ederseniz her bir katmanı tek tek pull etmektedir.
docker push (push an image or a repository to a registry)
Docker Hub hesabımızdaki repository (image depolanan yer) adresimize image kaydetmek 💾 için kullanırız.
Repositories içerisinde 1 adet private, sınırsız public repository oluşturabiliriz.
Aşağıdaki görselde test bir public repository oluşturuyorum.
Repository’mizi oluşturduktan sonra bir image’i repository’e push edebilmemiz için aşağıdaki görselde de görüldüğü üzere tarifi yapılmış.
Yukarıdaki görselde dikkat ederseniz console_docker_app:v1 ile cihatsolak/testpublicrepository:v1 imagelerinin IMAGE ID’leri birebir aynıdır. Çünkü cihatsolak/testpublicrepository:v1 console_docker_app:v1’i referans almaktadır. Tekrar docker içerisinde yeni bir image oluşturmuyor sadece isimlendirerek asıl image’e referans oluşturuyor. Docker Hub bu tag’le birlikte image’i hangi repository’e atacağını biliyor, performanstan 🚀 da kayıp yaşamıyoruz.
Dipnot: Farklı tagler vererek repository içerisine istenilen kadar image gönderebilirim.
Sonlara doğru yaklaşırken, docker pull ve push komutlarıyla direkt docker hub ile haberleşiriz. Pull docker pull image
komutuyla docker hub üzerindeki belirlediğimiz image’i indiririz. Push docker push
dediğimizde docker hub içerisindeki repositorylere public veya private olarak image gönderebiliriz.
İçerikte yaptığımız tüm işlemlerde Docker CLI kullandığımızdan dolayı Docker CLI direkt olarak docker hub ile haberleşmektedir. Azure CLI kullanırsanız bu seferde image’ler Azure Container Registry içerisine kaydedilir ya da var olan image’leri çekebilirsiniz. CLI’ya göre ortamınız değişecektir.
Hızlı Kılavuz 📋
$ docker ps -a
durumuna bakılmaksızın (çalışıyor/durdurulmuş) containerların tamamını listeler.
$ docker ps
sadece çalışmakta olan containerları listeler.
$ docker images
mevcut image’leri listeler.
$ docker build -t {imageName}
Dockerfile’dan bir image build ederken -t
ile oluşturulacak image’e isim verilir.
$ docker run -p {SystemPortNumber}:{DockerPortNumber} {containerName} {imageName}
container ayağa kaldırırken -p
ile sistem ve docker tarafındaki portları eşleriz.
$ docker run -e {environmentName}="{environmentValue}"
container ayağa kaldırırken -e
ile environment değişkenler belirtiriz.
#S1B3 bölümünde görüşmek üzere. Wir Sehen Uns 😎