Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

Aşağıdaki listede sıklıkla kullanılan docker ve docker compose komutları var ama daha fazlasını görmek isterseniz Docker safyasına bakabilirsiniz.


Genel


Containerı çalışır vaziyette tutar.


CMD tail -f /dev/null

Docker containerlerin çalıştığı ve erişebildiği ana işletim sisteminin IP adresini alma.


$ ip addr show docker0 | grep -Po 'inet \K[\d.]+'

Imaj, container, network, cache vs gibi kullanılmayan verileri siler.


$ docker system prune --volumes

Image


Tüm imajların listeler.


$ docker images

Tüm imajları siler.


$ docker rmi $(docker images -q)

Tek bir imajı siler.


$ docker rmi {image-id}
$ docker rmi {image-name}

Komutun çalıştığı yerdeki Dockerfile ile yeni bir imaj yaratır.


$ docker build -t {new-image-name} .

İmaj commit geçmişini verir.


$ docker history {image-name}
$ docker history {image-name:image-tag}

Mevcut olan bir container üzerinden yeni bir imaj yaratır. İmaj container içinde yapılan tüm değişiklikleri kapsar.


$ docker commit {existing-container-name} {existing-image-name:new-image-tag}

Mevcut imajı etitekleyerek yeni bir imaj yaratır.


$ docker tag {existing-image-{id/name/name:existing-tag-id}} {new-image-name:new-tag-id}}

Container


Aktif olan containerleri listeler.


$ docker ps
$ docker container ls

Aktif olan ve olmayan containerleri listeler.


$ docker ps -a
$ docker ps --all
$ docker container ls --all

Durmuş olan containerı çalıştırır.


$ docker start {container-name/id}

Çalışan containerı durdurur.


$ docker stop {container-name/id}

Çalışan containerların terminaline girer.


$ docker attach {container-id}
$ docker attach {container-name}
$ docker exec -it {container-id} /bin/bash
$ docker exec -it {container-name} /bin/bash

Çalışan tüm containerları durdurur.


$ docker stop $(docker ps -a -q)

Çalışmayan containerı siler.


$ docker rm {container-id}
$ docker rm {container-name}

Yerel klasörü container içine kopyalar. Bu genelde production alanındaki kodu izole etmek için kullanılır.


$ docker cp {local_dir} {container_name/id}:{container_dir}

Çalışmayan tüm containerları siler.


$ docker rm $(docker ps -a -q)

Mevcut olan imaj ile yeni bir container yaratır. /bin/bash mecburi değildir.


$ docker run -i -t -d --name {new-container-name} {existing-image-id}
$ docker run -i -t -d --name {new-container-name} {existing-image-name}
$ docker run -i -t -d --name {new-container-name} {existing-image-id} /bin/bash
$ docker run -i -t -d --name {new-container-name} {existing-image-name} /bin/bash
$ docker run -i -t -d --name {new-container-name} {existing-image-name:existing-image-tag}
$ docker run -i -t -d --name {new-container-name} {existing-image-name:existing-image-tag} /bin/bash

Ana işletim sisteminden container bağlanır.


$ docker run -d -p 5000:80 --name {new-container-name} {existing-image-name/id}
$ curl 127.0.0.1:5000

Linux komutlarını container içinde çalıştırır.


$ docker exec -it {container-name} {linux-command}

Container klasörünü ana işletim sistemiyle paylaşır.


$ docker run -i -t -d -v {host-folder-path}:{container-folder-path} --name {container-name} {image-name/id}

Container detaylarını verir.


$ docker inspect {container-name/id}

Container kütük listesi.


$ docker logs -t {container-name/id}

Container kütük listesinin takibi.


$ docker logs -t -f {container-name/id}

Network


Tüm ağların listesi.


$ docker network ls

Bir ağı kaldırır.


$ docker network rm {network-name/id}

Mevcut olan "bridge" ağ üzerinden yeni bir ağ yaratır.


$ docker network create --driver bridge {network-name}

Mevcut olan "bridge" ağ üzerinden IP adresi belirleyerek yeni bir ağ yaratır. 24 "subnet-mask" bize 255.255.255.0 subnet mask, 8 ise 255.0.0.0 subnet mask verir.


$ docker network create --subnet {ip-address}/{subnet-mask} --driver bridge {network-name}

İsmi api_default olan ağın IP addresini almak.


$ echo $(docker network inspect api_default | grep Gateway | grep -o -E '[0-9\.]+')

Volume


Tüm volume listesi.


$ docker volume ls

Kullanılmayan tüm volumelerin silinmesi.


$ docker volume rm $(docker volume ls -q)

Soruşturma


Docker komutlarının çıktılarını verir.


$ docker events&

Docker komutlarının çıktılarını durdurur.


$ ps aux | grep docker events
$ kill -9 {docker-events-pid}

Container kütük listesi.


$ docker logs -t {container-name/id}

Container yaratmadan imaj ile çalışma. Container içine girdikten sonra Dockerfile ile çalıştırılması gereken komutları çalıştırıp hataları görebilirsiniz.


$ docker run -i -t {image-name/id} /bin/bash

Compose


Buradaki açıklamalar "docker-compose.yml" içinde tanımlanan servisler için geçerlidir.


"docker-compose.yml" dosyasının ilişki yapısını verir.


$ docker-compose config

Çıktı vererek tüm imajları yaratır ve containerları çalıştırır.


$ docker-compose up

Tüm imajları yaratır ve containerları arka planda çalıştırır.


$ docker-compose up -d

Çalışan tüm containerları durdurur.


$ docker-compose stop

Tüm imaj, container ve ağları siler.


$ docker-compose down

Tüm imaj, container, ağ ve volumeleri siler.


$ docker-compose down --volumes

Verilen servis ile ilişkili olan containerı yaratıp, içindeki ENV değişkenlerini listeler.


$ docker-compose run {service_name} env

Tüm servis imajlarını yeniden yaratır.


$ docker-compose build

Tüm servis imajlarını yeniden yaratır ve sadece değişenlerin containerlarını yeniden yaratır. Genelde deployment için kullanılır.


$ docker-compose up -d --build

Sadece bir tane imaj ve onun containerını yeniden yaratır. Diğerlerinin hepsini gözardı eder.


$ docker-compose up -d --no-deps --build {service_name}

Sadece bir tane imajı yeniden yaratır. Genelde iki işlemin parçası olarak docker-compose up --no-deps -d {service_name} komutundan hemen önce çalıştırılır.


$ docker-compose build {service_name}

Sadece bir tane containerı yeniden yaratır. Genelde iki işlemin parçası olarak docker-compose build {service_name} komutundan hemen sonra çalıştırılır.


$ docker-compose up --no-deps -d {service_name}

Tüm containerları docker-compose.yml dosyasının yolunu belirterek yeniden yaratır.


$ docker-compose -f path/to/docker-compose.yml up -d

Bir kereye mahsus olmak üzere docker-compose.yml dosyasında belirtilen bir servis ile komut çalıştırır.


$ docker-compose -f path/to/docker-compose.yml run {service_name} {command_to_run} 

Tüm servis imajlarını ve containerlarını yeniden yaratır. Genelde deployment için kullanılır.


$ docker-compose build
$ docker-compose up -d

İstisnaen "docker-compose.yml" içinde yapılan değişleri gözardı ederek yine "docker-compose.yml" dosyasında tanımlı olan tüm servisleri yeniden başlatır.


$ docker-compose restart