Raspberry Pi ile çalışmak eğlenceli ve kolay olsa da, bazen hızlı açıp kapatabildiğimiz, imaj yazmak/microSD kart hazırlamak zorunda kalmadan hızlıca test edebildiğimiz ve yanımızda taşıyıp kablolarla uğraşmadan işlerimizi deneyimlediğimiz bir kolaylığa ihtiyacımız oluyor. Yazılım dünyasında benzer alanda birçok ihtiyaca cevap veren container teknolojisini, özellikle de Docker’ı bu amaçla nasıl kullanacağımızı bu yazıda inceliyoruz.

Docker Üzerinde Raspberry Pi’nin Mimari Etkisi

Raspberry Pi, ARM mimarisinde mikrodenetleyici kullanan bir SBC. Burda SBC dediğimiz, İngilizce açılımıyla single board computer, yani tek kart üzerinde çalışan bir bilgisayar. Muhtemelen birçok eğitim, IoT, hobi başta olmak üzere envai çeşit projede karşınıza çıkmıştır.

Günümüzdeki masaüstü bilgisayar/laptop ve sunucuların çok büyük bir kısmının işlemcilerinin x86 çalıştığını düşününce, Raspberry Pi ile aralarında ortak bir uygulama (binary olanların) çalışması da mümkün olmuyor. Bu da özellikle uygulama testlerinin zorlaşmasına sebep olurken aynı zamanda elimizde donanım olmadığında veya seyahat gibi durumlarda geçici olarak erişemediğimizde başka bir mimaride yaptığımız testleri yeterince güvenilir kılmayabiliyor. Üzerine bir de gömülü sistem mühendislerinin kernel odaklı yaptıkları geliştirmelerin test edilmesi eklenince, hızlı ve izole deneyebilme ihtiyacı oldukça artıyor.

Docker’da Sanal ARM Çalıştırmak

Sanal ARM makinesi demişken, yukarıda bahsettiğimiz konulara çözüm olarak QEMU, Linux çekirdekli sistemlerde yıllardır gömülü sistem mühendisleri tarafından aktif olarak kullanılarak bu sorunlara çözüm buluyor. Hazır QEMU işin içine girmişken, kendi bilgisayarınızda QEMU var ve Raspberry Pi’yi emule etmek istiyorsanız, Docker’ı daha işin içine katmadan önce kullanabileceğiniz bir projeden bahsedeceğiz: qemu-virt-kernel{.rank-math-link}.

Qemu-virt-kernel’i geliştirenler, Raspberry Pi’nin kernel kaynaklarını alıp QEMU’ya göre düzenliyor. Siz de Raspberry Pi’nin internet sitesinden indirebileceğiniz herhangi bir imajı onun üzerinde çalıştırabiliyorsunuz. Bu bilgiyi aklımızda tutup esas konuya geçebiliriz. Bu işi nasıl Docker üzerinde yapabiliriz?

Docker üzerine QEMU kurmayı başarırsak, yukarıdaki bilgiyi kullanarak Docker üzerinde Raspberry Pi’yi emule etmeyi başarırız. Bunun için normalde QEMU kurulumu ile ilgilenmemiz ve bunu Dockerlaştırmamız, sonra da yukarıda bahsettiğimiz qemu-virt-kernel reposundakileri uygulamamız gerekirdi. Bu sırada da container açılırken otomatik olarak QEMU’nun başlamasını, Raspberry Pi imajı vermediysek gidip indirmesini, zip formatındaki arşivi açıp sıkıştırılmamış imaj dosyasını elde etmesini, …. sağlamamız gerekirdi.

Raspberry Pi Emulasyonunu Çalıştırmak

Bahsettiğimiz aşamalar aslında yazıldığı kadar yorucu değil. Yine de, bunu yapılı halde veren MIT lisanslı bir proje GitHub üzerinde mevcut: dockerpi{.rank-math-link}. Bu imajı kullanarak Docker üzerinde bir Raspberry Pi emulasyonu başlatmak için şu komutu yazmamız yeterli:

docker run -it --name dockerpi lukechilds/dockerpi

İsterseniz dockerpi reposunu klonlayarak imajı kendiniz de build edebilirsiniz. Bu yazıda, repoda da kullanılan imaj ile ilerleyeceğiz. Bu komutu yazdığımızda imajı indirecek, container oluşturacak, container içerisine Raspbian imajı indirecek, indirdiği imajla QEMU’yu başlatacak ve çalışır halde bir Raspberry Pi emulasyonu elde etmemizi sağlayacaktır.

Eğer kalıcı veri saklamak isterseniz, Docker’ın bind volume özelliğini kullanabilirsiniz:

mkdir HOME/dockerpi-data
docker run -it --name dockerpi -v $HOME/dockerpi-data:/sdcard lukechilds/dockerpi

Komutta verdiğimiz dockerpi-data isimli dizin, o an çalıştığınız kullanıcının ev dizininde oluşturulacaktır. Logları incelediğimizde:

</figure>

Süreç tamamlandığında ise, SSH dahi yapabileceğimiz, direkt terminale de karşımıza çıkan ekrandan ulaşabileceğimiz bir uygulama bizi bekliyor. CPU bilgisini kontrol etmek için ise:

</figure>