Docker Sık Kullanılan Komutlar-2
Merhabalar serinin 2. yazısında sık kullandığım docker komutlarını eklemeye devam ediyorum. İlk yazıya buradan erişebilirsiniz.
- Docker Network Kavramı
- Docker Container IP Adresini Öğrenmek
- Docker Network (Sanal Ağ) Oluşturmak
- Docker Network Listeleme
- Docker Network Bilgilerini İnceleme
- Çalışan Bir Docker Container’ı Bir Network’e Bağlamak
- Docker Container Adını Değiştirmek
- Askıda Kalan Imajları Silmek
- Docker’ı sudo ile çalıştırmaktan kurtulmak – docker without sudo
- Alpine container sürekli çalışsın
- Alpine container paket yükleme
- Container’dan ana makine servislerine ulaşmak
1. Docker Network Kavramı
Her docker container doğduğunda otomatik olarak bir sanal ağa bağlanır. Bu sanal ağ türü “bridge network”tür. Aynı sanal ağda bulunan tüm container’lar port numarası bildirmeksizin birbirleri ile görüşürler. Benim tarzım bir uygulamaya ait tüm container’ları aynı ağa bağlamak.
2. Docker Container IP Adresini Öğrenmek
sudo docker container inspect --format '{{ .NetworkSettings.IPAddress }}' f1ae
3. Docker Network (Sanal Ağ) Oluşturmak
sudo docker network create erkan_vn Çıktı: bcec51e1e0aba7092d359944898a08bc5cb621900bf830d8b1c3ff4fddb5679c
4. Docker Network Listeleme
sudo docker network ls Örnek çıktı: NETWORK ID NAME DRIVER SCOPE 756b8bea1d7e bridge bridge local 2019947744f4 dude bridge local bcec51e1e0ab erkan_vn bridge local 2955cb5bab0c host host local 6c3283b3f616 my_app_net bridge local 36691f70dc54 none null local
5. Docker Network Bilgilerini İnceleme
sudo docker network inspect erkan_vn Çıktı: [ { "Name": "erkan_vn", "Id": "bcec51e1e0aba7092d359944898a08bc5cb621900bf830d8b1c3ff4fddb5679c", "Created": "2019-05-01T15:08:39.358563898+03:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.20.0.0/16", "Gateway": "172.20.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ]
6. Çalışan Bir Docker Container’ı Bir Network’e Bağlamak
sudo docker network connect erkan_vn webhost
Önce network adı sonra container adı veya ip numarası
7. Docker Container Adını Değiştirmek
docker rename <container_id> <yeni_isim> Örnek: sudo docker rename ad0 elasticsearch
8. Askıda Kalan Imajları Silmek
Bazı imajlar tam olarak oluşmaz ve bir id isim alamadan havada kalır. Normalde bir imajı sudo docker image rm <image_id> ile silebilirken image_id alamayan bu tür imajları temizlemek için özel bir komut gerekir.
sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE erkan/simpleweb latest f058d31296a5 15 minutes ago 118MB <none> <none> 885492019721 About an hour ago 878MB erkan/redis latest 127a6d63841b 4 hours ago 108MB <none> <none> d4d6c3d0352d 5 hours ago 8.55MB redis latest 7eed8df88d3b 3 days ago 98.2MB node alpine b7dc3fe8d4f8 9 days ago 115MB alpine latest e7d92cdc71fe 6 weeks ago 5.59MB busybox latest 6d5fcfe5ff17 2 months ago 1.22MB hello-world latest fce289e99eb9 14 months ago 1.84kB node 6.14 5cf367ab9117 15 months ago 878MB
Yukarıda gördüğümüz gibi <none> olan imajlar var bunları nasıl kadırırız?
sudo docker rmi $(sudo docker images --filter "dangling=true" -q --no-trunc) Sonuç: Deleted: sha256:885492019721e918cffdade4963a73036b42174f793ddb20f54ed611aa047b81 Deleted: sha256:996806714a84be0d98bd684b17e73015e15c73eb674923e8f53279f3e0d3ea2a Deleted: sha256:3b33784c5fad1fc4a19034cce166e4767b6c86f7a5160a7417729e38ccc45ab0 Deleted: sha256:d4d6c3d0352d840218f727bbaf84c11891838638fac868c592f4ea5d90bfd978
Sonucu kontrol edelim:
sudo docker image ls [sudo] password for murat: REPOSITORY TAG IMAGE ID CREATED SIZE erkan/simpleweb latest f058d31296a5 26 minutes ago 118MB erkan/redis latest 127a6d63841b 4 hours ago 108MB redis latest 7eed8df88d3b 3 days ago 98.2MB node alpine b7dc3fe8d4f8 9 days ago 115MB alpine latest e7d92cdc71fe 6 weeks ago 5.59MB busybox latest 6d5fcfe5ff17 2 months ago 1.22MB hello-world latest fce289e99eb9 14 months ago 1.84kB node 6.14 5cf367ab9117 15 months ago 878MB
9. Docker’ı sudo ile çalıştırmaktan kurtulmak
Eğer docker’ı sudo ile çalıştıracak şekilde kurmuşsanız ve python sanal ortamında bunu denerseniz sudo komutunun orada çalışmadığını fark edeceksiniz. Bunun çözümü kullanıcıyı docker grubuna eklemek (Docker kurulurken oluşuyor). Dikkat edin docker grubuna eklediğiniz kullanıcı sudo yetkisine sahip olacaktır.
# erkan kullanıcısını docker grubuna ekle erkan@ubuntu-desktop:~$ usermod -aG docker erkan
Eğer sanal makine kullanıyorsanız makinenizi yeniden başlatın.
10. Alpine Container paket yükleme
Alpine çok sık kullanılan bir imaj. Bu imaja zaman zaman ilave paketler yüklememiz gerekebilir. Aşağıda curl örneği verilmiştir.
apk add curl
11. Alpine container sürekli çalışsın
Alpine imajı çok yaygın bir baz imajdır. Tek başına bir alpine yaratayım küçük bir işletim sistemi olarak biraz oynayım derseniz yaratmanızla konteynerın kapanması bir olur. Aşağıdaki örnek gibi:
docker run -d alpine docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77ecc16ac07d alpine "/bin/sh" 10 seconds ago Exited (0) 8 seconds ago mystifying_ellis
Eğer alpine yaratınca sürekli çalışsın istiyorsak komuta bir kaç option girerek bunu sağlayabiliriz.
docker container run -it -d alpine /bin/sh docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0c2c7a3b07a4 alpine "/bin/sh" 4 seconds ago Up 3 seconds strange_albattani
12. Alpine container paket yüklemek
apk add curl
13. Container’dan ana makine servislerine ulaşmak
Bir konteyner yarattınız ancak ana makinenizde bir servis ile görüşemiyorsunuz. Konteyner’ın ana makine servisleri ile görüşmesini istiyorsak host network’e bağlamak yeterli olacaktır. Aşağıda curl ile ana makinede çalışan bir gitea reposuna netcat ve curl ile erişim örneği verilmiştir.
# Create alpine container attached to host network docker container run --network host -it -d alpine /bin/sh # Connect to container docker exec -it a7a sh # Install curl and netcat apk add netcat-openbsd curl # Check IP addresses ip a # netcat test nc -vt 10.0.2.15 3000 Connection to 10.0.2.15 3000 port [tcp/*] succeeded! # curl test / # curl 10.0.2.15:3000 | grep VBO % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 10289 0 10289 0 0 1150k 0 --:--:-- --:--:-- --:--:-- 1255k <title> Gitea: VBO </title> <link rel="fluid-icon" href="/img/gitea-lg.png" title="Gitea: VBO"> <meta property="og:title" content="Gitea: VBO"> <meta property="og:site_name" content="Gitea: VBO" /> Gitea: VBO