Rapid Dashboard üzerinde Docker Remote API kullanımı
Docker aracı sisteminize yüklendiğinde, docker engine/daemon varsayılan olarak ağ iletişimi olmadan var/run/docker.sock
unix socketi üzerinden dinlemeye başlar. -H
özelliğini birden fazla kullanarak docker deamon’a tcp host:port
ya da başka unix socket’ler ekleyebiliriz. Docker daemon beraberinde docker client harici noktalarda kullanıma açık olan deamon’a direkt iletişim halinde olmamızı sağlayan Restful Remote API ile gelmektedir. Restful Remote API (Docker Remote API) bizlere daha detaylı bilgiler sunduğu gibi, image indirme, network, volume, node, plug-in gibi servislerin yönetimlerini sağlama ve container ünitelerini yönetme imkanı vermektedir. Kısacası Docker Remote API sorgularıyla docker client terminal aracının sağladığı yetenekleri gerçekleştirebiliyoruz.
Docker daemon varsayılan olarak başlatıldığındaki dockerd
varsayılan ayarı:
$ dockerd -H unix:///var/run/docker.sock …
cURL
aracı Docker Remote API kullanımında bize yardımcı olmaktadır. Aracın versiyonu 7.40
ile birlikte kullanılabilen --unix-socket
seçeneği yardımıyla Unix Docker socket dosyasına bağlanarak docker daemon’a isteklerimizi etkileşimli olarak gerçekleştirebiliyoruz.
Birlikte bir container oluşturalım ve sonrasında bu oluşturulan container’ı çalıştıralım:
$ curl --unix-socket /var/run/docker.sock \ -H "Content-Type: application/json" \ -X POST http:/v1.27/containers/create \ -d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' {"Id":"b6e9933464d55d1c3173798f84b7f462595c7c678d6fb211478fe298b7d24252","Warnings":null} $ curl -XPOST --unix-socket /var/run/docker.sock http://1.27/containers/b6e9933464d55d1c3173798f84b7f462595c7c678d6fb211478fe298b7d24252/start
Rapid Dashboard
Peki o zaman, “Rapid Dashboard bize ne sağlıyor?” diyebilirsiniz. Rapid, Docker Remote API kullanımını daha verimli hale getirerek, tek bir yerden Rapid üzerinde desteklenen sorguları uygulamanızı sağlamaktadır. Göksel Pırnal ile geliştirdiğim bu projede sorgulara rahat ulaşım ve sorguları editörün beraberinde getirdiği kısayollarla birlikte daha kolay test etme, pratik yapma ve kullanma imkanına sahip olursunuz. Docker Developer Interface olarakta adlandırdığımız Rapid ile sunulan Docker Remote API sorgu kalıplarını ve sorgu örneklerini soldaki ağaç yapısından servislere göre seçerek komut editörüne ekleyip üzerinde değişiklikler yapabiliyoruz.
Container’lar içerisinde çalışan bir Docker deamon ile konuşmak için bind mount volume özelliğinden yararlanarak host dizinindeki socket yolunu container dosya sisteminde aynı dizinde olacak şekilde düzenlememiz gerekir. Böylelikle, docker daemon ile container icerisinde de (yani uygulamamızdan) iletişimi sağlamış oluyoruz. Rapid uygulaması da bind mount volume yaklaşımını kullanarak docker.sock
üzerinden docker daemon ile konuşuyor ve talepleri onun üzerinden yolluyor.
$ docker run --name rapid -d -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 ozlerhakan/rapid
Terminalde çalıştırılan yukarıdaki cURL komutularını Rapid üzerinde komut editöründe daha yalın ve anlaşılır olarak çalıştırarak aynı amacı sağlayabiliyoruz.
Komut editöründe bazı isteklerimizi gerçekleştirelim sırasıyla. Komut editörü tarayıcıda ortadaki bölüm olmaktadır. İsimlendirilmiş docker yönetimli bir volume noktası oluşturalım Rapid komut satırında. Sağ taraftaki sadece okumaya açık olan dönüş verisinden bu talebin gerçekleştiğini görebiliriz.
POST volumes/create { "Name": "myvolume", "Labels": { "com.example.some-label": "some-value", "com.example.some-other-label": "some-other-value" }, "Driver": "local" }
Sonrasında docker host’umuzdaki tüm volume noktalarını sorgulayalım bakalım, gerçekten oluşturduğumuz eklenmiş mi listeye. GET volumes
diyerek sağ tarafta ona ait cevabı görüyoruz.
GET volumes { "Volumes": [ { "Driver": "local", "Labels": { "com.example.some-label": "some-value", "com.example.some-other-label": "some-other-value" }, "Mountpoint": "/var/lib/docker/volumes/myvolume/_data", "Name": "myvolume", "Options": {}, "Scope": "local" } ], "Warnings": null }
Çalışan bir container’ımızı var ve ondan bir snapshot almak istiyoruz. Bunun için Rapid tarafında ilgili container’dan bir image yapmak için gereken adımları atmamız gerekiyor:
POST images/commit?container=myawsomeapp&tag=1.26&repo=mysnapofawesomeapp { "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "ExposedPorts": { "8080": {} }, "Cmd": [ "/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0" ], "Tty": false, "StopSignal": "SIGTERM", "StopTimeout": 10 }
Image havuzumuzu listelediğimizde mysnapofawesomeapp
var mı bakalım:
GET images/json [ ... ... { "Containers": -1, "Created": 1491496101, "Id": "sha256:5766334bdaa0bc37f1f0d02cb94c351f9b076bcffa042d6ce811b0fd9fc11f3b", "Labels": {}, "ParentId": "", "RepoDigests": [ "mysnapofawesomeapp@sha256:e6693c20686f137fc393390135d8a598v96a833917917789d63766cab6c59582" ], "RepoTags": [ "mysnapofawesomeapp:1.26" ], "SharedSize": -1, "Size": 182526651, "VirtualSize": 182526651 } ]
cURL Desteği
Rapid Dashboard ayrıca cURL desteği sunmaktatır. cURL komutlarını kopyalayıp direkt komut editörüne yapıştırmanızla Rapid’in anlayacağı söz dizimi yapısına bürünür sorgu kalıbı. Aynı şekilde Windows platformunda Ctrl+Shift+C
, macOs ortamlarında
Command+Shift+C
kısayollunu kullanarak komut editöründe seçilen sorgu kalıbını cURL biçiminde kopyalanmasını sağlayabiliyoruz. Volume oluşturma sorgumuzu editörden cURL formatında kopyalamak istediğimizde, clipboard üzerinde bu isteğimizin gerçekleştiğini görmekteyiz:
POST volumes/create (1) { "Name": "tardis", "Labels": { "com.example.some-label": "some-value", "com.example.some-other-label": "some-other-value" }, "Driver": "local" }
- Kopyalanmak üzere seçilen sorgunun tamamı
Kısayol uygulanıp, clipboard üzerinden başka bir yere yapıştırılan cURL formatındaki karşılığı:
curl --unix-socket /var/run/docker.sock -XPOST "http:/v1.27/volumes/create" -H "Content-Type: application/json" -d' { "Name": "tardis", "Labels": { "com.example.some-label": "some-value", "com.example.some-other-label": "some-other-value" }, "Driver": "local" }'
Rapid Dashboard hakkında görüş, öneri ve katkılarınız için depoyu inceleyebilirsiniz.
Bir sonraki yazımızda görüşmek üzere.
Tag:api, docker, docker remote api, rapid, socket