Komut Satırı— Docker #S1B2

Cihat Solak
lTunes Tribe
Published in
5 min readSep 3, 2021

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 cli komutları
Command Line Interface — Docker CLI

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 cli ile image oluşturma, container listeleme
docker run { — name containerName} {ImageId veya imageName}

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.

docker komutları ile container ayağa kaldırmak
docker run — rm — name {containerName/containerId} {ImageName/ImageId}

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” 👮🏻‍♀️ 👮🏻

docker komutları ile image ve container silmek
docker rmi {ImageId/ImagaName}

Imageler tag yardımıyla versiyonlanarak birden fazla aynı isme sahip image oluşturulabilir.

Image Tag

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 --forceparametresi 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.

docker hub sitesinden image indirmek
.Net SDK — Docker Hub

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.

docker pull mcr.microsoft.com/dotnet/sdk:3.1

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.

docker hub — repositories

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.

Create Repository — Docker Hub

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ış.

docker push cihatsolak/testpublicrepository:tagname
docker push cihatsolak/testpublicrepository:v1

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.

docker repositories -> tags

Sonlara doğru yaklaşırken, docker pull ve push komutlarıyla direkt docker hub ile haberleşiriz. Pull docker pull imagekomutuyla docker hub üzerindeki belirlediğimiz image’i indiririz. Push docker pushdediğ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.

--

--