• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Rapid Dashboard üzerinde Docker Remote API kullanımı

  • Posted by Hakan Özler
  • Categories Docker, Yazılar, Yazılım
  • Date 17 Mayıs 2017

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.

rapid container oluşturalım:
$ 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"
}
  1. 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

  • Share:
author avatar
Hakan Özler

Previous post

YARN Paket Yöneticisi Nedir? Neden Kullanılır?
17 Mayıs 2017

Next post

React.js ile Çok dilli uygulamalar geliştirmek
27 Mayıs 2017

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
javaee8-roadmap
Java EE 8 için yeni plan yolda!
13 Ekim, 2016
jdk
Java 9 Workshop Slayt ve Uygulama Örnekleri
30 Ağustos, 2016

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Java Mimarisiyle Kurumsal Çözümler : Kurumsal Java Kitabı
16Eyl2012
Java API for JSON Processing – Stream bazlı JSON Üretmek ve Tüketmek
06Ağu2013
AsciidocFX projesi Duke’s Choice Award 2015 ödülünü kazandı
28Eki2015
Knockout.js – Hesap Makinesi Örneği
02Şub2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.