6 minute read

Dalam beberapa bulan terakhir ini, saya diberi mandat untuk melakukan project web scraping dari salah satu situs publik secara masif, terstruktur, dan terencana. Untuk melakukannya, saya diberikan 6 buah PC Windows.

  • Sebanyak 5 PC memiliki spek yang sama.
  • Sementara 1 PC lainnya memiliki spek dewa.

Algoritma web scraping saya tulis dengan bahasa R di laptop Ubuntu saya.

Untuk mendistribusikannya, saya install R Studio di semua PC tersebut dan menghubungkannya ke Github untuk synchronize semua computing needs.

Namun masalah timbul saat beberapa PC tidak memiliki kompatibilitas yang sama terhadap JAVA. Walaupun saya sudah berusaha meng-_update_ versi JAVA di beberapa PC tersebut, tapi tetap saja RSelenium tidak bisa membuka Google Chrome.

Setelah bersusah payah mengurus JAVA, akhirnya saya menyerah dan mencari alternatif lainnya. Salah satu tutorial RSelenium di web mengarahkan saya untuk menggunakan Docker untuk menghubungkan RSelenium dengan container salah satu browser.

Setelah itu, saya coba install Docker dan melakukan pull container browser Firefox:

docker pull selenium/standalone-firefox

Lalu saya coba run:

docker run -d -p 4445:4444 selenium/standalone-firefox

Setelah berjalan dengan normal, saya kaitkan algoritma web scraping saya ke Docker melalui port 4445. Alhamdulillah semua web scraping berjalan dengan normal kembali.


Setelah googling sana-sini, ternyata ada manfaat lain dari si Dokcer ini. Salah satunya adalah untuk meng-_contain_ aplikasi yang kita buat (atau biasa kita gunakan).

RStudio di laptop Ubuntu saya adalah RStudio dengan setting dan libraries yang terlengkap yang saya punya.

Saat saya beralih ke komputer lainnya (atau server lain), saya seringkali menemukan kendala dalam meng-_install_ beberapa libraries tertentu. Meng-_install_ R dan RStudio sangat mudah, tapi yang lebih memakan waktu adalah meng-_install libraries_-nya.

Oleh karena itu, saya berusaha untuk meng-_contain_ RStudio di Ubuntu saya ke dalam Dockerfile agar saya bisa dengan mudah menggunakannya di berbagai komputer (atau server atau gadget) lainnya.

Untuk versi R dan RStudio yang saya contain, saya gunakan versi terbaru. Credits harus saya berikan ke tim developer Rocker yang telah menyediakan versi R dan RStudio siap pakai.

Berikut adalah Dockerfile yang saya buat:

FROM rocker/rstudio:4.2.2

MAINTAINER ikanx101

RUN apt-get clean all && \
	apt-get update && \
	apt-get upgrade -y && \
	apt-get install -y \
		libhdf5-dev \
		libcurl4-gnutls-dev \
		libssl-dev \
		libxml2-dev \
		libpng-dev \
		libxt-dev \
		zlib1g-dev \
		libbz2-dev \
		liblzma-dev \
		libglpk40 \
		libgit2-dev \
	&& apt-get clean all && \
	apt-get purge && \
	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN Rscript -e "install.packages(c('dplyr','tidyr','readxl','janitor','openxlsx','stringr','knitr','checkmate','htmlwidgets','rvest','ggplot2','txtplot','tidytext','reshape2','readxl','ggpubr','ggrepel','ROI','ompr','ompr.roi','ROI.plugin.glpk','rmarkdown','RSelenium','gganimate','av'));"

WORKDIR /home/rstudio

Untuk meng-_compile_-nya, saya lakukan perintah ini di Ubuntu terminal:

  • Langkah 1: login ke Docker server dengan perintah berikut:
docker login
  • Langkah 2: berikan nama dan tag sehingga kita bisa membuat container-nya dengan perintah berikut:
docker build -t ikanx101/r-custom . 
  • Langkah 3 (opsional): kita akan upload container ini ke Docker server agar orang lain bisa menikmatinya juga.
sudo docker tag ikanx101/r-custom:latest ikanx101/r-custom:latest
sudo docker push ikanx101/r-custom:latest

Cara run container

Setelah ada di Docker server, kita bisa menggunakan container tersebut di komputer mana saja dengan cara install dan buka Docker dan berikan perintah berikut:

# melakukan pull request dari Docker server
docker pull ikanx101/r-custom:latest

# run container
docker run --rm -p 8888:8787 \
           -e USER=ikanx101 \
           -e PASSWORD=ikanx101 \
           -e USERID=1001 \
           -e GROUPID=1001 \
           ikanx101/r-custom:latest

Jangan lupa mengganti username dan password sesuai dengan kebutuhan.


if you find this article helpful, support this blog by clicking the ads.