Docker Temel Komutlar¶
Dockeri sisteme indirmek¶
curl -sSL https://get.docker.com/ | sh
- DOCKERİ GÜVENLİ BİR ŞEKİLDE TEST ETMEK İÇİN YENİ BİR KULLANICI ÜZERİNDEN BU İŞLEM YAPILIR.
useradd docker
- KULLANICIMIZI DOCKER GRUBUNA ATIYORUZ. (ROOTKEN YAPILIR)
usermod -aG docker kullanıcı_adı
Docker aktif edilir¶
systemctl start docker
- DOCKERİN ÇALIŞABİLİRLİĞİNİ KONTROL EDİNİZ.
systemctl status docker
Docker version kontrol¶
docker version
- tüm detaylar o an çalışan konteynerler, bulunan imajlar vs
docker info
Docker bileşenlerini yüklemek (Brew ile yapacağımız kurulumlar yalnızca docker engine kurulumu gerçekleştirilir. Docker compose ve docker machine ayrı ayrı kurulur¶
brew install docker
- OLUŞTURDUĞUMUZ YENİ KULLANICIDA SUDO İŞLEMİ YAPARKEN SUDOERS HATASINI ALABİLİRİZ. PROBLEM ÇÖZÜMÜ
sudo usermod -aG sudo,adm kullanıcı_adı
DOCKER COMPOSE VE DOCKER MACHİNE KURULUMU¶
apt-get install docker-machine
apt-get install docker-compose
- DOCKER-MACHİNE KURULUMUNDA PAKET BULUNAMADI HATASI ALIYORSAN DOĞRUDAN KURULUM YAPABİLİRSİN
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
- KONTROL;
docker-machine version
Dockerin yerel imaj deposu nerede?¶
/var/lib/docker/storage-driver
Docker imajlarını listeleyin¶
docker images
- DOCKER CONTAİNER PRUNE İLE TÜM İMAJLAR SİLİNİR
docker container prune
- DOCKER HUB ÜZERİNDE YER ALAN İMAJLAR "PULL" İLE SİSTEME ÇEKİLİR.
docker image pull tomcat
docker image pull mariadb
docker image pull nginx
- BU KOMUTTA "ALPİNE" BÖLÜMÜ REPOSİTORY ADINI, : KARAKTERİNDEN SONRA GELEN TAG BÖLÜMÜDE İMAJA AİT VERSİYONU BELİRLER.
docker image pull alpine:latest
- ÖRNEK CENTOS REPOSU ÜZERİNDEN LATEST ETİKETLİ İMAJ SİSTEME ÇEKİLİR.
docker image pull centos:latest
DEPO ADINDAN SONRA TAG VERİLMEZSE VARSAYILAN OLARAK LATEST KABUL EDİLECEK. YANİ GÜNCEL OLAN İMAJ KULLANILICAKTIR.
**BİR İMAJIN BÜTÜN VERSİYONLARI -a PARAMETRESİ İLE İNDİRİLEBİLİR. **
Konteyner hakkında detaylı bilgi¶
docker image inspect nginx
**BÜTÜN İMAJLAR BİR TEMEL KATMAN İLE BAŞLAR İMAJ ÜZERİNDE DEĞİŞİKLİKLER YAPILDIKÇA YENİ KATMANLAR, BU BAZ ALINAN KATMAN ÜZERİNDEN ZİNCİRLEME BİR ŞEKİLDE DEVAM EDER. BU DURUMU ÖRNEKLEYELİM; UBUNTU TABANLI YENİ BİR İMAJ OLUŞTURDUĞUMUZU DÜŞÜNELİM; BU İMAJINIZIN İLK KATMANI OLDU. İMAJA YENİ BİR NGİNX PAKETİ KURDUNUZ, İKİNCİ KATMAN OLUŞTU. ARDINDAN PYTHON PAKETİNİ KURDUNUZ VE SON OLARAK BİR FİREWALL KURALI OLUŞTURDUNUZ, SON DURUMDA İMAJINIZ DÖRT KATMANA SAHİP OLDU. **
İmaj silinmesi¶
docker rm (konteyner)
docker rmi (imaj)
ÇALIŞAN BİR KOYTEYNERE AİT İMAJ SİLİNEMEZ. İLK ÖNCE KONTEYNER DURDURULUR.
Sistemdeki imajların ID numaraları¶
docker image ls -q
Sistemdeki bütün imajların silinmesi¶
docker image rm $(docker image ls -q) -f
Tag eklenmemiş imajları silmek¶
docker images --filter "dangling=true"
Tag eklenmemiş bütün imajları silmek¶
docker rmi $(docker images -f "dangling=true" -q)
İmajlara etiket eklenmesi¶
-
LABEL version="v2.7" şeklinde tanımlama yaptığımız imajı --filter parametresiyle test edelim.
-
docker images --filter "label=version="v2.7"" girilir. ve bu etikete sahip olan imajlar karşımıza çıkar.
-
imajlara LABEL version="v1" renk="siyah" jim="moriarty" gibi etiketler eklenebilir.
-
docker inspect imaj_ismi komutu ile "Labels" kısmından mevcut etiket bilgilerine ulaşabiliriz.
-
DOCKER İMAGE HİSTORY KOMUTU HEDEF İMAJ ÜZERİNDEKİ DEĞİŞİKLİKLERİ BOYUT BİLGİSİ İLE BİRLİKTE GÖSTERİR.
docker image history imaj_ismi
- DOCKER İMAGE TAG KOMUTU, KAYNAK BİR İMAJI YENİ BİR TAG İLE YEREL DEPODA OLUŞTURUR.
docker image tag varolan_imaj_adı oluşturulacak_imaj (docker image tag nginx:latest nginx:v1)
docker image ls | grep nginx ile sorgulama yapılır.
Docker save komutu iile imajları tar arşivi olarak indirmek, load ile tekrardan yüklenebilir¶
docker save nginx > nginxarsiv.tar
ls -sh nginxarsiv.tar (arsivi sorgulama)
docker load < nginxarsiv.tar
docker load --input nginxarsiv.tar
docker images | grep nginx
- DOCKER İMAGE PRUNE, İMAJLARI KAYNAKLARI İLE BİRLİKTE SİSTEMDEN SİLER. SORUNSUZ KULLANIM İÇİN DOCKER CLİENT VE DOCKER DAEMON > 1.25 VERSİON
docker image prune -a
GENELLİKLE CRONTAB İLE BİRLİKTE GEÇMİŞE YÖNELİK KULLANILMAYAN İMAJLARIN SİLİNEREK DİSKTEN YER AÇILDIĞI SENARYOLARLA KARŞILAŞABİLİRİZ.
- RMİ DE OLDUĞU GİBİ PRUNE İLE --FİLTER PARAMETRESİ BİRLİKTE KULLANILABİLİR.
docker image prune --filter "varl=key1"
- UNTİL PARAMETRESİ, SAAT BAZINDA FİLTRELEME YAPILMASINI SAĞLAR. KOMUTTA 24 SAATTEN DAHA UZUN BİR ZAMAN DİLİMİNDE OLUŞTURULAN İMAJLAR SİLİNMEKTEDİR.
docker image prune -a --filter "until=24h"
Dockeri sunucuya bağlamak¶
-
docker hub sitesine gidilip bir hesap oluşturulur.
-
sunucuya docker login komutu girilir
-
kullanıcı adı ve şifre girilerek bağlantı sağlanır.
-
ekran hatası alınırsa, sudo apt install gnupg2 pass kodu girilir.
BİR KONTEYNERİ EN BASİT HALİYLE TANIMLAMAK GEREKİRSE BİR İMAJIN ÇALIŞIR DURUMDAKİ HALİDİR DİYEBİLİRİZ.
Konteyneri zorla başlatmak¶
docker run -d -ti nginx
Docker konteynırı başlatmak¶
docker container run imaj_ismi
docker run -ti -d centos
BİR KONTEYNER İŞLEMİNİ TAMAMLADIKTAN SONRA SONLANIR.
Konteynırı başlatmak¶
docker container run -it İMAJ_İSMİ /bin/bash
Çalışan konteynerleri görüntüle¶
docker ps
docker ps -a (deaktif konteynerleri de görüntüle)
- YEREL İNPUT, OUTPUT VE HATTA HATA YÖNLENDİRMELERİNİ ÇALIŞAN BİR KONTEYNERE EKLER
docker container attach ID_İLK3_RAKAMI
Mevcut bir konteyneri kopyalamak(imaj oluşturmak)¶
docker container commit ID_İLK3_RAKAM
yeni bir konteyner oluşturmak¶
**imaj yerel sistemde aranır, bulunamazsa docker kütüphaneden çekilir.
docker container create imaj_ismi
docker container create centos
Bir konteynerin dosya sistemi üzerinde yapılan değişiklikleri görmek¶
docker container diff ID_NUMARASI
Çalışan bir konteyner üzerinde komut çalıştırmak¶
- örnek bir komut ıd si girilen konteynerde resolv.conf dosyası görüntüleniyor
docker exec ID_İLK3 cat /etc/resolv.conf
Bir konteynerin dosya sistemini tar arşivi olarak yerel sisteme kaydetmek¶
docker export ID_İLK3 -o /exportContainer
ls -l /exportContainer
Kill ile çalışan konteynerleri durdurmak¶
docker ps
docker kill ID_İLK3
docker ps
Bir konteynerin loglarını göstermek¶
docker run -d -ti nginx (bu komut sonucu ortaya kod çıkar o komutun ik 5 i altta kullanılır.)
docker logs bcb27
Yerel sistemdeki konteynerleri listele¶
docker container ps
Konteyner üzerindeki tüm sistem süreçlerini durdurmak¶
docker container pause
- DOCKER CONTAİNER PORT: PORT VEYA ÖZEL MAPPİNG İŞLEMLERİNİ LİSTELER
docker run -d -ti -p 80:8080 nginx
docker port 2ea
Durdurulmuş olan bütün konteynerleri sistemden silmek¶
docker container prune
Konteynerlerin sistemdeki isimlerini değiştirmek¶
docker ps
docker rename vigilant_wescoff rename_test
docker ps (docker ps yapıldığında en sağ tarafta name diye bölüm var.)
Konteyner restart¶
docker restart d9d
Çalışır durumdaki konteyneri silmek¶
docker rm -f
Docker ağların tümünü silmek¶
docker network rm $(docker network ls -q)
Konteyner anlık kaynak kullanımı kontrol¶
docker container stats
- DOCKER STOP KOMUTU GİRİLDİĞİNDE HEDEF KONTEYNERE -15 SİNYALİ GÖNDERİLİR VE SÜREÇLERİN GÜVENLİ BİR ŞEKİLDE SONLANDIRILDIKTAN SONRA ÇIKILMASI BEKLENİR. OLASI BİR BEKLENMEYEN DURUMDA BU SEFER -9 SİNYALİ GÖNDERİLEREK MEVCUT SÜREÇLERİN BİTMESİ BEKLENMEDEN İŞLEMDEN ÇIKILMASI ZORLANIR.
docker container stop
Konteynerde çalışan süreçleri listelemek¶
docker ps
docker top DOCKER_NAMES
Durdurulmuş konteyneri başlatmak¶
docker ps
docker unpause ID_İLK3
HOST ADI VARSAYILAN OLARAK KONTEYNER ID DIR.
- ARKA PLANA ATILMIŞ BİR KONTEYNERE TEKRAR BAĞLANABİLİRİZ
docker ps
docker attach ID_İLK3
KONTEYNER İÇERİSİNDEYKEN ÇIKIŞ YAPMAK İÇİN EXİT KOMUTUNU KULLANABİLİRİZ. KOMUT GİRİLDİĞİNDE BASH KABUĞU SÜRECİ ÖLDÜRÜLÜR. BU DA KONTEYNERİN DURMASINA NEDEN OLUR.
Konteyner için kaynak kullanımı sınırlandırma¶
docker run -d --name kaynakTest --cpu-shares 256 --memory 128M centos
docker image inspect centos
Konteyner yaşam döngüsü¶
- imaj oluşturuluyor
docker container create imaj_adı
- imaj çalıştırılıyor
docker container run -it ubuntu:latest
konteyneri durdurmadan terminalden çıkmak istiyorsak ctrl-pq kullanılır.
- konteyner durdurulur
docker container stop id
docker container ls
docker container ls -a
- durdurulmuş konteyner çalıştırılır
docker container start
- yeniden başlattığımız konteynere bağlanarak konteyneri durdurmadan önce oluşturduğumuz dosya ve klasörleri kontrol edelim
docker exec -ti ubuntu bash
BİR KONTEYNER STOP PARAMETRESİNİ KULLANIP SONRA YENİDEN BAŞLATILSA DAHİ İÇERİDEKİ VERİLER YEREL DOSYA SİSTEMİNDE HALA TUTULUR. KONTEYNERİ SİSTEMDEN SİLMEK İÇİN KİLL KULLANILIR.
Konteyner üzerindeki değişikliklerin talep edilmesi¶
docker run -ti nginx /bin/bash
mkdir kre33
cd kre33
touch 1 2 3
ls
pwd
- root kullanıcısına dönülüp yapılan işlemler docker conteiner diff ID_NUMARASI ile kontrol edilir.
Konteynerlerin arka planda çalıştırılması¶
docker run -d -ti nginx (bu iş için -d kullanılır)
Docker volume (veri paylaşımı)¶
docker volume create
docker volume create --name baglanti_noktasi
docker volume ls
docker volume inspect baglanti_noktasi
docker volume rm baglanti_noktasi
- KONTEYNER KAYNAKLARININ GÜNCELLENMESİ (EĞER TEK ÇEKİRDEĞİN ATANDIĞI İKİ FARKLI KONTEYNER ARASINDA KAYNAK PAYLAŞIMI YAPILACAKSA;)
docker run --cpu-shares 700 --name app1 nginx
docker run --cpu-shares 324 --name app2 redis
docker run --cpus 1 --name app1 nginx (işlemci kullanımı bir adet olarak ayarlanmıştır.)
docker run --cpus 0.5 --name app1 nginx (tek bir çekirdeği paylaşmak için 0.5 kullanılır.)
docker inspect İD_İLK5 | grep CpuSha (sorgulama)
docker run -d --memory =500m alphine (alphine konteynırının ram kullanımını 500mb olarak sınırlıyoruz.)
docker inspect İD_İLK5 | grep Memory (sorgulama)
Bir konteyneri interaktif modda çalıştırmak¶
docker run -ti centos bash
Dockerde mysql ile ilgili tüm bileşenleri sorgulamak¶
docker search mysql
Docker login ile giriş yapamıyorum¶
sudo apt install gnupg2 pass
Docker wordpress kurulumu¶
docker pull wordpress
docker pull mysql
docker run --name wordpress_database -e MYSQL_ROOT_PASSWORD=test -d mysql
docker run --name wordpress_website --link wordpress_database:mysql -p 80:80 -d wordpress
docker run -d -p 80:80 --name server5 wordpress
**Docker File¶
-
Dockerfile nin temel mantığı şudur;
-
touch ile bir dizin oluşturulur.
-
içerisine komutlar sırasıyla girilir.
-
ve docker build . komutu ile çalıştırılır.
-
bu işlem toplu komutları tek bir komutla çalıştırıyor. bizi büyük bir zahmetten kurtarıyor.
Docker File uygulaması¶
-
bir dizin açtık ve içerisine sadece şu komutu yazın. FROM centos (from centos komutu centos imajını indirir)
-
dizini kaydedip çıkın ve çalıştırın docker build .
-
editör olarak nano kulllanabilirsiniz.
Docker file anlamlar¶
-
MAINTAINER geliştirici_Adı geliştirici_maili (geliştirici hakkında bilgi verir)
-
İMAJ OLUŞTURMAK (MEVCUT İMAJI KOPYALAMAK)
docker commit ID YENİ_AD:VERSİYON
Konteyneri ağa bağlamak¶
docker network connect test_network mycount (mycont adlı konteynere test_network ağını bağlar)
docker network connect --ip 10.172.7.23 test_network mycon2 (istediğimiz ip i atamak)
docker network disconnect test_network mycon1
docker network ls (varolan ağları sıralar)
docker network rm (varolan bir ağı siler)
docker run -d -p 8081:8081 --name server2 nginx (direk nginx kurmak)
Docker ağ oluşturmak¶
docker network create --driver bridge testnetwork
docker network inspect testnetwork (kontrol)
Konteyneri ağa bağlamak¶
docker run --net=AG-ADI centos
Konteynere oluşturduğumuz iki ağı bağlamak¶
docker network create net1
docker network create net2
docker create -ti --net net1 ubuntu /bin/bash
docker network connect net2 ID_iilk3
docker inspect ID_ilk3 | grep netw
docker inspect ID_İLK3 (üstteki komut çalışmazsa)
Docker apache kurulumu¶
sudo docker run -dit --name tecmint-web -p 8080:80 -v /home/user/website/:/usr/local/apache2/htdocs/ httpd:2.4
vi /home/user/website/docker.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Learn Docker at Tecmint.com</title>
</head>
<body>
<h1>Learn Docker With Us</h1>
</body>
</html>
Konteyner içerisinde düzenleme¶
apt-get update
apt-get install -y yum
apt-get install nano
Docker Zabbix¶
docker run --name zabbix-appliance -t \
-p 10051:10051 \
-p 80:80 \
-d zabbix/zabbix-appliance:latest
Docker Grafana¶
docker run -d --name=grafana -p 3000:3000 grafana/grafana:6.6.0-ubuntu
Mkdir dosya oluşturulmasında hata¶
mkdir -p DOSYA_ADI (mkdirin önünde -p kullanıldığında bu sorun çözülecektir)
Konteyner log kaydı¶
docker inspect --format={{.LogPath}} cafcea2242c0
grep error ÇIKAN_DOSYA_YOLUNU_YAPIŞTIR
Ağ kullanımları (port yönlendirmeleri)¶
netstat -tlpu
Docker Prometheus¶
docker search prometheus
docker pull prom/prometheus
docker run -it -d --name prom -v /etc/prometheus:/etc/prometheus -p 9090:9090 prom/prometheus
docker run -d -p 9090:9090 --name server1 prom/prometheus (üsttekine alternatif)
docker ps (konteynerin çalışabilirliğini kontrol ediniz)
PROMETHEUS ÇALIŞIP HEMEN DURUYORSA RAM SORUNU OLABİLİR.
- AĞ ARAYÜZÜ OLUŞTURUP PORT YÖNLENDİRME İLE MYSQL VE PHPMYADMİN BAĞLANTISI KURMAK
docker network create mysql-network
docker run -e MYSQL_ROOT_PASSWORD=test --name mysqltest mysql/mysql-server
docker network connect mysql-network mysqltest
docker run -d --name pmatest -e PMA_HOST=ip_adresiniz -p 8080:80 phpmyadmin/phpmyadmin
docker network connect mysql-network pmatest
Docker compose komutları¶
docker-compose ps (compose ile indirilmiş konteynerleri listele)
docker-compose pull (compose dosyasındaki imajları indir)
docker-compose kill,stop,start (normal docker konteynerlerini kontrol eder gibi composeleride öyle edebilirsiniz)
Docker compose dosyası oluşturmak (nginx kurulum örneği)¶
mkdir DockerComposeFile
cd DockerComposeFile/
touch docker-compose.yml
ls
nano docker-compose.yml
resimdeki gibi yeri yerine yazılmalıdır. yoksa yazım hatası verir. boşluklar dahi aynı olmalıdır.
docker-compose config
docker compose up -d
docker compose ps
Konteynerin hangi porta yönlendiğini gör¶
docker port [CONTAINER]
Konteynerin portunu durdurmak¶
docker stop [CONTAİNER]