
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!