Hazel Kavili

Accio data!

github twitter linkedin email rss
Docker ve R - Dockerfile
Apr 17, 2018
3 minutes read

Bir önceki yazımızda, Cansu Kavılı ile birlikte Docker ve R konusuna giriş yapmıştık. Bu yazımızda ise Docker’ın tekrarlanabilir araştırmalar için ne kadar kullanışlı olduğunu anlatacağımız küçük bir örnek hazırladık. Ama öncesinde Dockerfile nedir, kısaca ondan bahsedelim.

Dockerfile

Dockerfile, indirdiğimiz image’ları özelleştirebilmemiz için talimatları ve argümanları yazdığımız bir text dosyası. Biz bu yazımızda içerisinde tidyverse yüklü olan docker image’ı kullanarak birkaç dplyr fonksiyonunu çalıştıracağız.

Bu örnek için ismi Dockerfile olan (tam olarak böyle yazılmalıdır çünkü Docker büyük küçük harf duyarlıdır.) bir text dosyası oluşturduk. Dosyaya hangi image’ı kullanacağımızı ve o konteynerın içine hangi veri dosyasıyla, hangi script dosyasını çalıştıracağımızı ekleyeceğiz.

Dockerfile, FROM talimatıyla hangi image’ı kullanacağınızı belirlemeyerek başlar. Biz burada rocker/tidyverse image’ını kullandık. LABEL yardımıyla image’ı oluşturan kişinin kim olduğunu yazdık. Bu kısım zorunlu olmamakla birlikte image ile ilgili bir soru veya sorun olduğunda size ulaşabilmeleri açısından faydalı olacaktır.

FROM rocker/tidyverse 
LABEL maintainer="cansu@example.com"
COPY movies.csv dockerExample.R /home/docker/
CMD ["Rscript", "/home/docker/dockerExample.R"]

COPY talimatı yardımıyla bahsettiğimiz veri dosyası ve script dosyasını konteynerın içerisindeki /home/docker/ klasörünün altına ekleyeceğiz. Burada movies.csv ve dockerExample.R image’ımıza eklemek istediğimiz dosyalar. CMD ise image’ı çalıştıracak komutu belirlediğimiz talimat. (NOT: Burada GUI (ara yüz) kullanmadığımız için R’ı komut satırından çalıştırmak istediğimizde Rscript yazıp ardından script’in olduğu dosyanın adını yazmalıyız.)
Böylece konteyner dockerExample.R scriptini çalıştırarak açılacaktır.

Pekiyi dockerExample.R dosyamızın içerisinde ne var? movies.csv dosyasını okutup, filmler isimli bir değişkene atadığımız ve çok basit birkaç dplyr fonksiyonu ile 2 tablo oluşturduğumuz örnek bir script dosyası:

library(tidyverse)
filmler <- read.csv(file = "/home/docker/movies.csv" , 
                    header = TRUE, sep = ",") 

filmler_ulkeler <- filmler %>%
select(country, budget, imdb_score) %>% head(n=3)

filmler_ulkeler


filmler_yonetmenler <- filmler %>% group_by(director_name) %>% 
  summarise(ortalama_puan = round(mean(imdb_score), digits = 2)) %>% 
  arrange(desc(ortalama_puan)) %>%  head()

filmler_yonetmenler

Şimdi Dockerfile’ımız hazır. Bu Dockerfile yardımıyla bize özel image’ımızı oluşturacağız (build). Buradaki .(nokta)’nın amacı Dockerfile’ı işaret etmek. build komutunu veri setimiz olan movies.csv, analiz scriptimiz olan dockerExample.R ve Dockerfile ’ın bulunduğu dizindeyken çalıştırıyoruz.

docker build -t movies-analysis .

Şimdi komut satırında yeni image’mızın oluştuğunu görebilirsiniz:

docker images

Bu image’ımızı çalıştıralım ve analizimizin sonuçlarına bakalım. Çıktıda, library fonksiyonunun çalıştığını, ardından 2 tane tablo oluştuğunu ve onların ilk elemanlarını görebiliriz:

docker run --rm movies-analysis

Hızlı bir şekilde, bilgisayarımıza R kurulumu yapmadan tidyverse kullanarak küçük bir analiz yapmış olduk :)

Bu Dockerfile’ı temel alarak konteyner içerisine, analiz etmek istediğiniz dosyaları ve daha kapsamlı analiz scriptlerinizi ekleyerek kendi docker image’ınızı oluşturabilirsiniz.

Dockerfile isminin birleşik yazıldığına ve büyük-küçük harf duyarlı olduğu için bu şekilde dikkat edelim.

Son olarak R’ı, konteyner platformuna taşıyan Docker Containers for the R Environment projesini takip etmek isterseniz diye linki buraya bırakıyoruz.

Gelecek Yazı

Şimdi Dockerfile ile nasıl çalışacağımızı öğrendiğimize göre, sırada yaptığımız analizi paylaşmaya geldi!


Back to posts


comments powered by Disqus