Docker Serisi — Docker CLI
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: falseServer: 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 bashShare 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.