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 


hemin container de bash terminalini bize acir

================

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>
---------------------------
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 rm <container_id>

docker images

=============================
VM den ferqleri
=============================


=============================
Host OS Linux olmasa, Linux kernel qurulur sisteme
=============================




Popular posts from this blog

Validation for AZ phone numbers with RegEx in Java

Java necə işləyir, kod nədir ?

@Transactional annotation haqqinda. Cascade istifade olunmasi