Asagidaki notlari “John Willis” tarafindan hazirlanmis YouTube videolarini izlerken aldim.
Asagidaki notlar hazirlandigi sirada bilgisayarimda kurulu Docker versiyonu 1.9.1, build a34a1d5
seklindeydi.
ps
Calisan calismayan tum container’lari listelemek icin:
$ docker ps -a
$ docker ps -aq
Sadece calisan docker container’larini listelemek icin:
$ docker ps
$ docker ps -q
Calisan en son container’i gormek icin:
$ docker ps -l
$ docker ps -lq
run
Bir docker image’ini kullarak bir container olusturmak icin asagidaki komut
kullanilir. Eger image henuz inidirilmemisse, yani docker images
ila
baktigimizda listede gozukmuyorsa, oncelikle o image Docker Hub’dan
indirilir.
$ docker run busybox
run -i
run
komutunu -i
parametresi ile calistirdigimizda, eger container
olusturuldugunda calisacak olan default komut(Dockerfile’de bu CMD
ile
belirlenmistir) bizden input alacak bir komut ise(ornegin sh
), container’in
icinde shell komutlarini calistirabiliriz. busybox
image’ini kullanarak bir
container olusturudugumuzda default olarak sh
komutu calisir, ve bu bizim
komut girmemizi saglar.
$ docker run -i busybox
Eger busybox
image’indeki komutu asagidaki gibi override edersek, bu
durumda container bir input icin beklemeden calisip hemen sonlanacaktir.
$ docker run -i busybox echo hello
$ docker run -i busybox touch file.txt
Yukaridaki komutlari calistirdiktan sonra docker ps -a
ile kontrol edersek, durmus olan container’lari gorururuz.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f63efc5ad449 busybox "touch file.txt" 7 seconds ago Exited (0) 7 seconds ago prickly_poitras
902c6abd891d busybox "echo hello" 12 seconds ago Exited (0) 11 seconds ago sharp_tesla
76d675c8ca65 busybox "sh" 25 seconds ago Exited (0) 17 seconds ago tender_morse
run -t
Container’a bir pseudo terminal araciligiyla baglanmamizi saglar.
t
parametresi ile ilgili detayli bilgi
bu linkte
bulunabilir.
$ docker run -t busybox
Yukaridaki komuttan sonra CTRL+C
ile tty(pseudo termnial)’dan cikilir. Cikmis
olmamiza ragmen docker ps
komutu ile calisan container’lara baktigimizda hala
busybox
conainter’ini goruruz. docker stop
komutu ile container’in calismasini durdurabiliriz.
run -it
Intercative shell istiyorsak -it
parametersini kullaniriz. Asagidaki komut
ile olusturdugumuz container’in icine girip komutlarimizi calistirmaya baslayabiliriz.
$ docker run -it busybox
Container’in icindeyken exit
komutu ile cikarsak container calismayi
durdurur, docker ps
komutu ile calisan container’i gormeyiz.
run -itd
ve attach
Asagidaki komut ile “busybox” image’ini kullanarak bir container olusturulur ve bu container arka planda(detached mode) calismaya devam eder.
$ docker run -itd busybox
Yukaridaki komut ile calistirilan container’a baglanmak icin once docker ps
komutu ile calisan container’lara bakip container ID’sini ogreniriz.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0599d3a63f8 busybox "sh" 4 seconds ago Up 4 seconds berserk_hawking
Yukaridaki ciktidan gorulecegi uzere “busybox” image’inden olusturulan
container calisir calismaz biz herhangi bir parametre gecmedigimiz icin
busybox’un Dockerfile’inda tanimlanan sh
komutunu calistirmis.
Container’a baglanmak icin ise asagidaki komutu kullaniriz. Asagidaki komuttan sonra, komut satirina dusmek icin Enter’a basilir.
$ docker attach b0599d3a63f8
Eger container’i calistirirken “busybox” image’i icin tanimlanmas default komut yerine kendi istedigimiz bir komutun calistirmasini istiyorsak:
$ docker run -itd busybox /bin/dmesg
Yukaridaki komutu calistirdiktan sonra docker ps
komutu ile calisan
container’lara baktigimizda bu son container’i goremeyiz. Cunku /bin/dmesg
komutu kullanicidan bir input beklemedigi icin calisip sonlanir ve bu da
container’in calismasini durdurur. Duran container’a ait bilgileri gormek icin
docker ps -a
komutunu kullandigimizda asagidaki bir cikti aliriz:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b42f93e1da2 busybox "/bin/dmesg" 10 seconds ago Exited (0) 9 seconds ago evil_snyder
Yukaridaki ciktidaki STATUS
sutunu bize container’in sonlandigini gosterir.
/bin/dmesg
yerine /bin/cat
gibi kullanicidan bir input
bekleyen bir komut calistirsaydik, o zaman container arka planda calismaya devam
edecekti ve docker ps
ile baktigimizda calisan container’lar arasinda gorebilecektik.
$ docker run -itd busybox /bin/cat
$ docker ps
Yukaridaki komutlarin ciktisi:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c62b281274d busybox "/bin/cat" 2 seconds ago Up 1 seconds big_saha
--name
Bir docker image’ini calistirirken isim vermek icin kullanilir.
$ docker run --name john1 -itd busybox
stop
Calisan container’lari durdurmak icin once docker ps
ile calisan
container’lari buluruz sonra stop
komutu ile durduruz.
$ docker stop 6e41ef36fdc7
stop
komutu biraz yavas calisir.
Eger docker container’ini calistirirken --name
parametresi ile bir isim
vermissek, stop
komutunu o verdigimiz isimle birlikte de calistirabiliriz.
$ docker stop john1
kill
kill
komutu stop
komutuna gore daha hizli calisir.
Sadece bir tane container’i durdurumak icin:
$ docker stop 6e41ef36fdc7
kill
komutu ile tum calisan docker container’larini durdurmak icin:
$ docker kill $(docker ps -q)
En son calistirdigimiz container’i durdurmak icin:
$ docker kill $(docker ps -ql)
rm
Docker container’larinin container ID’si kullanilarak veya isimleri kullanilarak silinmesi.
$ docker ps -a
$ docker rm a759cdfefc9d
$ docker rm john1
Durmus olan tum container’larin silinmesi icin asagidaki komut kullanilir:
$ docker rm $(docker ps -aq)
restart
Calisan bir docker container’ini durdurup baslatmak icin restart
komutu kullanilir.
$ docker run -itd busybox
$ docker restart ebf3e3609c56
exec
Bir docker container’inda bir process calistirmak icin exec
komutu kullanilir.
$ docker run -itd busybox
$ docker exec ebf3e3609c56 ls
logs
Container’in output’a bastigi log’lari gormek icin kullanilir.
$ docker run -itd busybox cat /etc/hosts
$ docker logs $(docker ps -alq)
Yukaridaki komutlarin ciktisi asagidaki gibi olur:
172.17.0.2 7c9d96519bdc
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
inspect
Bir container hakkinda detayli bilgi almak icin inspect
komutu kullanilir.
$ cid=$(docker run -itd busybox)
$ echo $cid
$ docker inspect $cid
stats
Calisan bir container’in ne kadar kaynak tukettiginin, disk IO, ve network trafiginin gorulmesi.
$ docker run -itd --name job1 busybox
$ docker stats job1
top
Calisan bir container’daki process’lerin ne kadar kaynak tukettiginin gorulmesi.
$ docker run -itd --name job2 busybox
$ watch docker top job2 -ef
Sistemimizde kurulu Docker image’lerini listelemek icin:
$ docker images
Bir image hakkinda detayli bilgi almak icin:
$ docker inspect busybox
history
“busybox” image’ini kullarak bir container olusturulma asamasinda “busybox” image’inin nasil bir surecten gectigini gormek icin asagidaki komutu kullaniriz.
$ docker history busybox
Yukaridaki komutun ciktisi su sekilde:
IMAGE CREATED CREATED BY SIZE COMMENT
ac6a7980c6c2 4 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0 B
c00ef186408b 4 weeks ago /bin/sh -c #(nop) ADD file:c295b0748bf05d4527 1.113 MB
search
Docker hub’da image aramasi yapmak:
$ docker search ubuntu
En az 10 star almis docker image’leri arasindan arama yapmak:
$ docker search -s 10 ubuntu
pull
En son “ubuntu” docker image’ini Docker Hub’dan indirmek icin:
$ docker pull ubuntu
“14.04” ile tag’lenmis “ubuntu” docker image’ini indirmek icin ise:
$ docker pull ubuntu:14.04
Bir docker container’inde bir data volume olusturmak icin -v
parametresi
kullanilir. Asagidaki komut ile bir volume olusturulur ve bu volume /john1
seklinde container’in icinde mount edilir. Olusturulan volume host sistemde
/var/lib/docker/volumes
klasorunde tutulur. Bu volume’e yazilan veri docker
image’i silinse dahi silinmez. Ayrica bu volume diger docker container’larinda
ortak kullanilabilir.
$ docker run -it -v /john1 busybox
#inside-container> cd /john1
#inside-container> touch file1
Host sistemdeki bir path’i, calistirdigimiz bir docker container’ina mount etmek:
$ mkdir /tmp/john1
$ docker run -it -v /tmp/john1:/john1 busybox
Sadece klasorler degil dosyalari da ayni sekilde mount edebiliriz:
$ docker run -it -v ~/.bash_history:/.bash_history busybox
Bazi durumlarda host’taki dosya veya klasorlerin containerin icinden
degistirilmemesi icin readonly mount etmek isteyebilirz. Ornegin host’taki
~/.vimrc
dosyasini container’a mount readonly mount edelim.
$ docker run -it -v ~/.vimrc:/.vimrc:ro busybox
Asagidaki ornekte, once “john1” adinda bir container olusturuluyor, ve bu
container’da /john1
volume’u olusturuluyor. Bu container hala calisir
durumdayken, “john2” adinda yeni bir container olusturuluyor bu container
olusturulurken “john1” container’indaki volume “john2” containerina mount
ediliyor:
$ docker run -it --name john1 -v /john1 busybox
$ docker run -it --name john2 --volumes-from john1 busybox
Calisan bir docker container’inin IP adresini ogrenmek. cid = container ID, nid = IP Address of Container
$ cid=$(docker run -itd busybox)
$ echo $cid
$ nid=$(docker inspect --format '' $cid)
$ echo $nid