About Docker
================
sudo usermod -aG docker
docker istifade edende her defe sudo yazmamaq uchun komanda
================
docker run -p 8080:8080 -d /path/to/image
burada gosterilen image docker container-de 8080 portunda run olacaq (2ci 8080), ve bizim localimizin 8080 portuna bind olacaq. bu zaman bu image i 8080 portunda istifade ede bilerik.
-d ise detached modda ishlediyini gosterir. yeni terminla baglansa bele container run olunmush veziyyetde qalacaq.
================
docker container in loglarina baxmaq uchun
docker logs (-f) <container_id>
-f option loglari davamli olaraq izlemek uchun istifade olunur. bu option olmadan loglara baxsaq sadece hazirki veziyyeti gosterib bitirecek. davamli olaraq loglara baxa bilmeyeceyik.
================
docker image <image_id> history - image haqqinda butun history ni gosterir. (dockerfile daki komandalar)
docker image <image_id> inspect - image haqqinda butun melumatlari verir.
================
docker inspect <container_id> - container haqqinda melumatlari verir
================
-m 512m --cpu-quota 5000 parameterleri ile container run eledikde, memory 512mb, cpu ise 5% ishledeceyiini deyirik.
================
docker exec -it <container_id> bash
================
meselen docker da mysql run etmishik. hemin container in terminalina qoshulmaq uchun
docker exec -it <container_id>
daha sonra standart qaydada,
mysql -u root -p
yazib mysql e qoshula bilerik
================
commit command i vasitesile hal hazirki container den image yaratmaq mumkundur.
meselen bir container duzeltmishik, base-image olaraq ubuntu qurmushuq. bu container de girib java install elemishik. bu container den image duzeltmek uchun
docker container commit <container_id> <image_name>
docker container commit <container_id> <image_name>
---------------------------
Dockerfile vasitesile image yaratmaq
docker image build -t <image_name> .
-t tag i gosterir
. ise folderi gosterir. yeni docker hazirda oldugumuz folderden bashlayaraq image i yaratmaga bashlayacaq. burada olan her bir file ve subfolder docker e gorunen olacaq.
---------------------------
COPY - localda olan bir file i image e elave edir.
COPY test-program.jar /usr/local/bin
ve ya
WORKDIR /usr/local/bin (working directory olaraq bu foldere kechirik, bundan asagidaki komandalar artiq bu folder daxilinde bash verecek)
COPY test-program.jar
---------------------------
Qeyd : jar file-lari 2 yere atmaq secimimiz var. 1. /opt/ folderine. 2. /usr/local/bin
---------------------------
COPY vs ADD
eyni ishi gorurler, sadece ADD elave ozelliklere sahibdir. meselen unarchive elemek. remote url den add elemek ve s.
---------------------------
CMD vs ENTRYPOINT
CMD ile yazilan komandani image run ederken override etmek olar.
docker container run -it <image_name> <cmd_command>
amma ENTRYPOINT ise her zaman run olacaq. onu deyishemk mumkun deyil.
================
containerler arasinda network qurmaq uchun ilk once network yaratmaq lazimdir
docker network create <network_name>
daha sonra container i run ederek uygun networka elave etmek lazimdir
docker run --network <network_name> --name <container_name> -p 8080:8080 <image_name>
---------------------------
burada container name default olaraq yox ozumuz vermeyimiz meslehetdir. chunki bir container den digerine connect olduqda bu container_name -ler vasitesile oluruq.
meselen biziim app postgres le ishleyir. ve postgres in ishlediyi containerin adi postgres_server kimi verilib.. app de url hissesinde
spring.datasource.url=jdbc:postgresql://postgres_server/user_db
kimi gosterilir. (normal halda localhost:5432)
---------------------------
eger var olan container i network a elave etmek lazimdirsa
docker network connect <network_name> <container_name>
================
meselen mysql container run eledikden sonra data containerin ozunde /var/lib/mysql saxlanilir. Bu folder host system de /var/lib/docker/volumes/<volume_name>/_data saxlanilir.
<volume_name> default olaraq random adlar generasiya olur. bunu deyishmek uchun
docker run -v my_data:/var/lib/mysql -e * -e * mysql
bu image a uygun container run olan zaman, artiq
/var/lib/docker/volumes/my_data/_data folderi altinda saxlanacaq. burada elediyimzi shey sadece volume in adini deyishmekdir. normalda bu da istifade olunmur.
mount istifade edilir. bu zaman volume adi deyishemk yox konkret olaraq folder verib datalari ora yonlendire bilerik. meselen
docker run -v /usr/hamid/mysql/my_data:/var/lib/mysql -e * -e * mysql
istifade etdyimiz komandalar eynidir, sadece verdiyimiz deyerler ferqlidir. docker burada / -lari basha dusherek uygun olaraq volume change name ve mounting proseslerini yerine yetirir
================
Docker Compose - normalda hər bir container i bir-bir run etməliyik. docker-compose faylları bu container-ləri bir komanda işlətməklə start etmə imkanı verir.
run => docker-compose -f <file_name> -d up
Docker-compose -da container-lər start olarkən, bir birini gözləsin option-u var. Sadəcə işləmə prinsipi fərqlidir. Məsələn bizə lazımdır ki, database run olsun, daha sonra app run olsun. Bunu docker-compose-la təmin edə bilərik. Sadəcə həmin option container-də olan app-in run olmağına yox container vəziyyətinə görə ardıcıllıq qurur. Yəni app database-in run olmağını gözləyir kimi görsənsə də, əslində database in container-nin run olmağını gözləyir. Container run olması o demək deyil ki, içindəki database service run olub.
================
Docker Swarm - node - larla işləyir. Node deyərkən, fiziki və ya virtual kompüter nəzərdə tutulur.
docker swarm init , swarm - ı active edirik.
manager və worker - manager, workerdən fərqli olaraq swarm -ı idarə edə bilir.
service haqqında - swarm-da service yaradıb container-i manage olunmasını təmin edə bilərik. məsələn container hər hansısa səbəbdən kill olarsa, service özü bunu görərək yenidən container i yaradacaq.
burada network default olaraq driver overlay olur. localda bu driver default olaraq bridge olurdu.
stack haqqında - docker-compose istifadə edərək stack yığıb bir başa service halında run edə bilərik. docker-compose da göstərilən bir service üçün swarmda service yaradılacaq.
replica haqqında - hər bir service default olaraq 1 replicası olur. replica dedik de, bu image ın neçə container i olacaq onu nəzərdə tuturuq.
routing mesh - tutaq 4 node var və bu nodeların iksində database birində bizim app run olub. Bu app-ın publish portu 8080-dı. Node-ların ipləri fərqli olsalar belə, məsələn
node 1 -> 100.0.0.1 (db)
node 2 -> 100.0.0.2 (app)
node 3 -> 100.0.0.3
node 4 -> 100.0.0.4 (db)
browser de {ip}:8080/ yazsaq bizə yenə də həmin app göstərəcək. ip dən asılı olmayaraq hamsı bir swarm içində olduğuna görə docker sorğuları route eləyə bilir və gələn sorğunu düzgün node a yönləndirir.
100.0.0.4:8080 sorğu göndərsək, sorğumuz yenə də 100.0.0.2 ə yönləndiriləcək.
====old_course====
====short_info====
docker-compose -f file_name up -d
docker ps (-a) (-l)
docker stop $(docker ps -aq)
docker stats
docker ps (-a) (-l)
docker stop $(docker ps -aq)
docker stats
docker rm <container_id>
docker images
=============================
VM den ferqleri
=============================
=============================
Host OS Linux olmasa, Linux kernel qurulur sisteme
=============================