Docker Komutları – 1
İmajları indirmek
Bu komutla hub.docker.com adresinde bulunan imajları indirebilirsiniz. Örneğin `ubuntu` imajını indirmek için aşağıdaki komutu kullanabilirsiniz:
docker pull ubuntu
Sisteme indirilmiş imajları listelemek
docker images komutuyla sistemde yüklü olan tüm imajları listeleyebiliriz. Örnek çıktı:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest ba6acccedd29 6 weeks ago 72.8MB confluentinc/cp-kafka latest 76da344f7a49 7 weeks ago 772MB confluentinc/cp-zookeeper latest 0390b975e207 7 weeks ago 772MB hello-world latest feb5d9fea6a5 2 months ago 13.3kB
Tüm containerları listelemek
Çalışan ve çalışmayan tüm containerları listelemek için aşağıdaki komutu kullanabilirsiniz:
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES 5b0724ccbc4a ubuntu "bash" 3 seconds ago Exited (0) 2 seconds ago nostalgic_nobel 1c2b67f0dd05 hello-world "/hello" 11 seconds ago Exited (0) 11 seconds ago modest_carver
Çalışan bir containerın id’sini bulmak
Containerlar üzerinde işlem yapmak için container id’sine ihtiyaç duyarız. Bu yüzden belirli bir imajın çalışan containerının id’sini bulmak için aşağıdaki komutu kullanırız. Eğer bir imajdan birden fazla container mevcutsa birden fazla id dönecektir:
docker ps -a | grep "container-adi" | awk '{ print $1 }'
Containerı öldürmek/durdurmak
Containerı öldürmek (kill) ve durdurmak (stop) aynı işi yapmaktadır. Her iki yöntem de çalışan bir containerı durdurur. Aynı imajdan birden fazla container olabileceği için hangi containerı durdurmak istediğimizden emin olmamız gerekmektedir. Bunun için öncelikle tüm containerları listeleyelim.
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9cfa1dd42c5e ubuntu "bash" 19 seconds ago Exited (0) 18 seconds ago ubuntu_1 43428ede42d2 ubuntu "--name ubuntu" 29 seconds ago Created ecstatic_allen ba730888ed7b nginx "/docker-entrypoint.…" 17 minutes ago Up 8 seconds 0.0.0.0:8000->80/tcp nginx_1 8037736035f7 mysql "docker-entrypoint.s…" 14 hours ago Up 4 seconds 33060/tcp, 0.0.0.0:43306->3306/tcp mysql_1
Ardından durdurmak veya öldürmek istediğimiz containerı belirleyelim. Burada nginx_1 isimli containerımızın id’sini alıyoruz.
docker kill 8037736035f7 # alternatif bir yöntem olarak kill yerine stop da diyebiliriz docker stop 8037736035f7
Bir container’ı veya imajı silmek
Durdurulmuş olan bir container’ı silmek için rm komutunu, imajı silmek için de rmi komutunu kullanırız.
docker rm 1a12c4750a6c
docker rmi ba6acccedd29
Tüm container’ları ve imajları silmek
Normal şartlarda çalışan bir container silinmeye çalıştığında hata verir fakat -f parametresini kullandığımızda çalışan containerları zorlayarak silebiliriz.
docker rm $(docker ps -aq) -f
Aynı şekilde imajları da silebiliriz:
docker rmi $(docker images -q) -f
Bir imajı çalıştırmak ve interaktif mod
İmaj çalıştırıldığında bir container oluşur. Bu containerın içindeki komutlara göre sürekli çalışır veya bir süre çalıştıktan sonra durur. Durduktan sonra da container pasif modda kalır ve silinmez. Manuel olarak silmek gerekir. Şimdi bir imaj çalıştıralım:
docker run centos
Centos imajını çalıştırdık. Bu imaj içerisinde süreklı açık kalmasını sağlayan bir komut başlatılmadığı için bu container hemen kapanacaktır. Şimdi docker ps komutunu çalıştırdığımızda aşağıdaki gibi bir çıktı alırız:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12ece5e8bead centos "/bin/bash" 2 seconds ago Exited (0) 1 second ago stupefied_cray
8559ca26d988 centos "/bin/bash" 3 seconds ago Exited (0) 3 seconds ago modest_lehmann
407e16923099 centos "/bin/bash" 11 seconds ago Exited (0) 10 seconds ago crazy_merkle
Görüldüğü üzere status kısmında Exited yazıyor. Şimdi yeni bir terminal açarak şu komutu yazalım:
docker run -it centos bash
Bu komutla yeni bir container oluştururuz ve interaktif modda bash komutunu çalıştırırız. Böylece container’ın kabuğuna girmiş olmaktayız. Şimdi tekrar docker ps -a komutunu yazdığımızda şöyle bir çıktı alırız:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12ece5e8bead centos "/bin/bash" 2 seconds ago Exited (0) 15 minutes ago stupefied_cray
8559ca26d988 centos "/bin/bash" 3 seconds ago Exited (0) 20 minutes ago modest_lehmann
407e16923099 centos "/bin/bash" 11 seconds ago Exited (0) 25 minutes ago crazy_merkle
93d8b1cf6bfb centos "bash" 30 minutes ago Up 30 minutes charming_morse
Görüldüğü üzere en son çalıştırdığımız container Up durumunda yani hala çalışıyor.
Aslında container’ların amacı böyle komut satırına girip komutlar yazmak değildir. Containerlar arkaplanda sürekli çalışan servisler oluşturabilmek için ve bu servisler arasındaki izolasyonu sağlamak için kullanılır.
Ayrıca çalışmakta olan bir container’ın içine de girmek mümkündür. Bunun için container’ın adını veya id’sini bilmemiz gerekiyor. Örnek komutlar aşağıdaki gibidir:
# önce çalışan containerlarımızı görelim
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad7f9fadb3e8 nginx "/docker-entrypoint.…" About an hour ago Up About an hour nginx_1
# NAME'e göre
docker exec -it nginx_1 /bin/bash
root@docker-desktop:/# _
# ID'ye göre
docker exec -it ad7f9fadb3e8 /bin/bash
root@docker-desktop:/# _
Görüldüğü üzere hem ID hem de NAME değerleriyle /bin/bash komutunu interaktif modda çalıştırdık ve böylece çalışmakta olan containerın içerisine girebildik.
Port Açmak
Örneğin nginx imajımızı çalıştırmak istiyoruz. Bu imajda nginx yazılımı çalışır ve 80 portunu dinler. Fakat bu port docker içerisinde açılmaktadır ve host makinada açılmaz. Bu yüzden -p parametresiyle port yönlendirme yapmamız gerekmektedir. Komut formatı şu şekildedir:
docker run -p [host-port]:[container-port] [imaj-adi]
Şimdi nginx komutunu çalıştıralım ve bu porta tarayıcıdan açalım:
docker run -p 8081:80 nginx
Şimdi tarayıcıdan şu adrese girebiliriz ve aşağıdaki çıktıyı alırız: http://localhost:8081/
Bu komut terminale attach olur ve çıktıyı konsoldan almaya başlarız. Fakat genelde container’ların arkaplanda çalışmasını isteriz bu yüzden konsole attach olmasını istemeyiz. Bunu da -d yani detach diyerek yapabiliriz. Komutumuzun son hali şu şekilde olacaktır:
docker run -d -p 8081:80 nginx
Containerlara isim vermek
Bir containerı çalıştırdığımızda eğer kendimiz isim vermezsek docker tarafından rastgele bir isim verilmektedir. Karışıklığa ve anlamsızlığa sebebiyet vermemek için containerlara isim vermek faydalı olacaktır.
docker run -d --name deneme1 -p 8081:80 nginx
Şimdi tüm containerları listelediğimizde şöyle bir çıktı alırız:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d1e2a598f6e nginx "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:8081->80/tcp deneme1
e60cb38871aa nginx "/docker-entrypoint.…" 14 minutes ago Exited (0) 11 seconds ago silly_wing
12ece5e8bead centos "/bin/bash" 39 minutes ago Exited (0) 39 minutes ago stupefied_cray
8559ca26d988 centos "/bin/bash" 39 minutes ago Exited (0) 39 minutes ago modest_lehmann
407e16923099 centos "/bin/bash" 39 minutes ago Exited (0) 39 minutes ago crazy_merkle
93d8b1cf6bfb centos "bash" About an hour ago Exited (127) 16 minutes ago charming_morse
Görüldüğü üzere en üstteki container’ın port yönlendirilmesi ve ismini görebilmekteyiz. Diğer containerlara isim belirtmediğimiz için docker tarafından otomatik bir isim verilmektedir.
Containerları listelemek
Containerları çalıştırdık ama bunlar nerede tutuluyor, durumları nedir, nasıl ulaşırız bunları yapabilmek için listeleme komutlarını kullanırız. Bu komutları yukarıda da kullandığımız için ve çıktılarını gördüğümüz için tekrar çıktıları yazmayacağım. Sadece isimlerini yazacağım.
docker ps -a
docker container ls -a
Containerları durdurmak ve başlatmak
Containerları durdurmak ve sonra tekrar başlatmak isteyebiliriz. Bu işlemleri containerların isimleriyle yaparız. Her containerın unique bir ismi olmak zorunda olduğu için karışıklık çıkmayacaktır. Durdurmak, başlatmak ve yeniden başlatmak için ihtiyacımız olan komut formatı şu şekildedir: docker [stop|start|restart] [container_adi]
Buradan da anlaşılacağı üzere örneğin deneme1 isimli bir containerımız varsa ve bunu durdurmak istiyorsak docker stop deneme1 dememiz yeterlidir. Aynı şekilde başlatmak için de stop yerine start diyoruz.
Containerları silmek
Bir containerla işimiz bittiğinde harddiskte yer kaplamaması için silmemiz gerekmektedir. Containerları silmediğimiz taktirde çok fazla alan işgal edeceklerdir. Bir containerı silmek için durdurulmuş olması gerekmektedir yani çalışan bir containerı silemeyiz. Container silmek için ihtiyacımız olan komut: docker container rm container_adi veya docker rm container_adi
Eğer çalışan bir containerı silmek istersek şu şekilde bir hata alırız:
Error response from daemon: You cannot remove a running container 0d1e2a598f6e49814382a78cae1e1e09213c3ea1aff51125923d30f35a86624f. Stop the container before attempting removal or force remove
Burada da belirtildiği üzere eğer çalışan bir containerı gerçekten silmek istiyorsak -f parametresiyle zorlayarak silebiliriz:
docker rm deneme1 -f
docker rm deneme2 -f
Devamı: Docker Komutları – 2
0 yorum