Docker Serisi — Docker CLI

Ahmet Cokgungordu
4 min readJan 5, 2019

Docker ile iletişim kurmamızı sağlayan komutları kullanabileceğimiz komut satırıdır. Komutları kullanıcıdan alır ve Docker Daemon’a iletmektedir.

Bu yazımda sık kullanılan Docker İstemci komutlarını güncel olarak paylaşmaya çalışacağım.

docker version

Docker yüklü ise versiyon bilgilerini gösterir.

Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:47:51 2018
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.0
API version: 1.39 (minimum version 1.12)
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:55:00 2018
OS/Arch: linux/amd64
Experimental: false

docker images

Sistemdeki bütün Image’ları listeler. Şuanda image olmadığından boş bir liste gelecektir.

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker pull hello-world

hello-world isimli Image’ın Docker Hub üzerinden indirilmesini sağlar. Versiyon yazmadığımızdan default olarak latest versiyonu çeker.

Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Already exists
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

docker run hello-world

hello-world Image’ını indirirmek gerekiyorsa indirir, gerekmiyorsa daha önce indirilen hello-world Image’ini çalıştırır.

Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/

docker ps

Çalışan Container’ları gösterir. hello-world uygulamasının görevi ekrana bir yazı basmak ve uygulamayı sonlandırmak olduğundan burada Container’ı göremeyeceksiniz. Arka planda çalışan bir uygulama olduğunda bu komut ile o Container’ları görebilirsiniz.

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

docker ps -a

Daha önce çalışmış ve çıkış yapmış Container’ları da gösterir.

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
df728f0f584c hello-world "/hello" 13 minutes ago Exited (0) 13 minutes ago pensive_lewin

docker ps -aq

Yukarıdaki komutun aynısını yapar. Tek farkı Container Id’leri gösterir.

df728f0f584c

docker start -a <container id>

Daha önce çalışmış ve sonlanmış olan uygulamayı tekrar başlatır. -a parametresi ile terminale attach edilmesini ve ekranda çıktının görünmesi sağlanır. -a parametresi olmasaydı yine uygulama çalışacak ve ekrana sadece id basacaktı.

docker stop <container id>

Container Id üzerinde çalışmaya devam eden bir uygulama var ise durdurmaya yarar.

docker stop -f $(docker ps -aq)

Çalışan Container’ları durdurur.

docker logs -f <container id>

Belirtilen Container Id üzerinde çalışmış olan uygulama loglarını içerir. Her çalıştırmanızda log dosyasına daha önceki loglar eklenerek devam etmektedir. Bu yüzden uygulamayı 3 kez çalıştırdıysanız 3 kez tekrar log göreceksiniz. -f yani follow parametresi ile devam eden logları da göstermeye devam eder.

docker rm -f <container id>

Container’ı silmek için kullanılır. Bu işlemi yaptıktan sonra docker ps -a çalıştırınca listede olmadığını göreceksiniz. -f parametresi force anlamına gelir ve çalışır durumda olsa bile onu silmeye zorlar.

docker rm -f -v $(docker ps -aq)

Listelenen bütün Container’lardaki Container Id’leri alıp hepsini siler. -v parametresi ise ilişkili volume var ise birlikte kaldırır.

docker run --rm hello-world

Uygulama çalışıp bittikten sonra silinir. Bu komutla uygulama run komutunu çalıştıracak ve silecektir. Bu yüzden docker ps -a komutunu çalıştırdığınızda listede göremeyeceksiniz.

docker run -p 8080:80 nginx

nginx Image’ı olmadığından öncelikle indirecek ve sonra çalıştıracaktır. -p komutu ile ise 8080 portuna gelen istekleri Container içerisindeki 80 portuna yönlendirir.

Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
177e7ef0df69: Pull complete
ea57c53235df: Pull complete
bbdb1fbd4a86: Pull complete
Digest: sha256:b543f6d0983fbc25b9874e22f4fe257a567111da96fd1d8f1b44315f1236398c
Status: Downloaded newer image for nginx:latest

Browser’a localhost:8080 yazdığınızda nginx sayfasını görebilirsiniz. Bu durumda konsola aşağıdaki gibi bir log yazacaktır.

172.17.0.1 - - [05/Jan/2019:22:07:07 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
172.17.0.1 - - [05/Jan/2019:22:07:08 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
2019/01/05 22:07:08 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:8080", referrer: "http://localhost:8080/"

Burada terminal uygulamayı çalıştırdığından yeni bir terminal açıp docker ps komutu ile çalıştırdığımız uygulamanın detaylarını görebiliriz.

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
7b1e5236900e nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp upbeat_blackburn

Yukarıda uygulamanın “nginx -g ‘daemon of…” komutu ile bailatıldığı yer almaktadır. Uygulamanın 2 dakika önce çalıştığını ve port yönlendirmesini görebilirsiniz. Burada 80 portu nginx image’ının ayağa kalkarken 80 numaraları porttan kalkması sağlanmış olduğundan 8080 portunu 80 portuna yönlendirdik.

docker top <container id>

Belirtilen Container’da top komutunu çalıştırır.

PID                 USER                TIME                COMMAND
14467 root 0:00 nginx: master process nginx -g daemon off;
14501 101 0:00 nginx: worker process

docker pause/unpause <container id>

Pause Container’ı duraklatmaya, unpause ise duraklatılmışsa devam ettirir.

docker rmi -f <image id|image name>

Image!ı silmeye yarar. -f ile başka Image’lar tarafından taglenmiş Image var ise ancak bu şekilde kaldırılabilir.

docker inspect <container id>

Image hakkında detaylı bilgiyi görüntüler.

docker images -q -f dangling=true

Taglenmemiş ve herhangi bir Container ile ilişkili olmayan Image’ları listeler.

docker rmi $(docker images -q -f dangling=true)

Taglenmemiş ve herhangi bir Container ile ilişkili olmayan Image’ları kaldırır.

docker volume ls -f dangling=true

Taglenmemiş ve herhangi bir Container ile ilişkili olmayan Volume’ları listeler.

docker volume rm $(docker volume ls -f dangling=true -q)

Taglenmemiş ve herhangi bir Container ile ilişkili olmayan Volume’ları kaldırır.

docker exec <container id> <command>

Çalışan Container’da komut çalıştırmak için kullanılır.

docker exec -it <container id> /bin/bash

Container içinde terminal açmaya yarar.

docker attach <container_id>

Çalışan bir Container’a attach olmak için kullanılır.

--

--