Cách sử dụng R Docker để tạo, chạy và chia sẻ ứng dụng R

Tìm hiểu cách sử dụng R Docker để tạo, chạy và chia sẻ các ứng dụng R. Tìm hiểu những lợi ích, thách thức và cách thực hành tốt nhất của R Docker.

Docker là gì và tại sao nó quan trọng trong lập trình R

Hãy coi Docker như một nền tảng để phát triển, vận chuyển và chạy các ứng dụng trong môi trường biệt lập được gọi là “container”. Đây là những đơn vị nhẹ đóng gói các ứng dụng và tất cả các phần phụ thuộc của chúng (ví dụ như phần phụ thuộc hệ thống và gói R).

Trong bối cảnh lập trình R, Docker giải quyết vấn đề về tính nhất quán của môi trường . Không cần phải nói, bạn muốn mã của mình chạy nhất quán trên các môi trường khác nhau, từ máy tính xách tay đến máy chủ sản xuất. Bộ chứa Docker có thể trợ giúp ở đây vì chúng đóng gói môi trường, vì vậy bạn có thể yên tâm rằng mã và các phần phụ thuộc sẽ không thay đổi khi bạn thay đổi môi trường phát triển.

Docker cũng được khen ngợi về khía cạnh khả năng tái tạo . Chúng cho phép bạn không chỉ chỉ định những phần phụ thuộc R nào là cần thiết mà còn cả các phiên bản cụ thể của chính R và các phần phụ thuộc hệ thống khác. Điều này sẽ đảm bảo bạn không gặp phải bất kỳ vấn đề nào khi chia sẻ mã của mình với người khác. Nếu nó hoạt động trên máy tính xách tay của bạn (tất nhiên là trong vùng chứa Docker), thì nó cũng sẽ hoạt động với các nhà phát triển khác.

Hai điểm trước cũng cho bạn ý tưởng rằng các bộ chứa Docker được hưởng lợi từ tính di động . Bạn có thể tạo vùng chứa trên máy tính xách tay của mình rồi chạy nó trên bất kỳ nền tảng nào hỗ trợ Docker, chẳng hạn như máy tính xách tay khác, máy chủ đám mây hoặc thậm chí là hệ thống NAS tại nhà.

Và tất nhiên, Docker giúp việc mở rộng ứng dụng R trở nên dễ dàng. Bạn có thể tạo nhiều vùng chứa có cùng cấu hình và mở rộng quy mô ứng dụng của mình theo chiều ngang khi khối lượng công việc tăng lên.

Có những lợi ích khác khi sử dụng R Docker, nhưng chúng tôi cho rằng một số lợi ích này đủ để thuyết phục bạn Docker là cách chính xác để tạo và mở rộng các tập lệnh và ứng dụng R.

Nhưng làm thế nào bạn có thể cài đặt Docker? Đó là những gì chúng tôi sẽ đề cập tiếp theo.

Cách cài đặt Docker

Nếu bạn đang làm việc trên PC/máy tính xách tay, chúng tôi khuyên bạn nên cài đặt Docker Desktop :

Hình 1 – Trang chủ Docker

Nói một cách đơn giản, đó là một .exetệp duy nhất dành cho Windows, .dmgtệp dành cho Mac và .deb/ .rpmtệp dành cho Linux mà bạn có thể tải xuống tại URL được cung cấp trước đó.

Chỉ cần tải xuống tệp và cài đặt nó bằng cách nhấp đúp (Windows và Mac) hoặc bằng cách chạy các lệnh shell sau trên Linux:

sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb

Việc cài đặt trên Mac và Windows dễ dàng hơn nên chúng tôi cảm thấy không cần phải bàn thêm. Linux có thể yêu cầu một số điều chỉnh bổ sung, vì vậy vui lòng xem qua hướng dẫn cài đặt chính thức .

Cách sử dụng R Docker để chạy tập lệnh R trong vùng chứa

Phần này sẽ hướng dẫn bạn quy trình viết một tập lệnh R đơn giản, sau đó tự động hóa việc thực thi tập lệnh đó trong vùng chứa Docker.

Viết và kiểm tra tập lệnh R

Đây có thể là lần giới thiệu đầu tiên của bạn về Docker, vì vậy đừng phức tạp hóa quá mức những thứ không cần thiết. Chúng ta sẽ giữ phần R khá đơn giản.

Tạo một tệp tập lệnh R mới (tên của chúng tôi là script.R). Nó sử dụng hai phần phụ thuộc bên ngoài – dplyrgapminderđể tải và tóm tắt một tập dữ liệu.

Nói chính xác hơn, kịch bản này cho chúng ta cái nhìn sâu sắc về tuổi thọ trung bình và GDP bình quân đầu người của tất cả các nước châu Âu trong năm 2007.

Kết quả được lưu vào tệp CSV. Lưu ý đường dẫn lưu , đường dẫn này rất quan trọng sau này:

library(dplyr)
library(gapminder)

# Statistics of Europe countries for 2007
eu_stats <- gapminder %>%
  filter(
    continent == "Europe",
    year == 2007
  ) %>%
  group_by(country) %>%
  summarise(
    AvgLifeExp = mean(lifeExp),
    AvgGdpPercap = mean(gdpPercap)
  )

# Save the file as CSV
write.csv(eu_stats, "home/r-environment/eu_stats.csv", row.names = FALSE)

Đây là những gì bạn sẽ thấy khi chạy tập lệnh cục bộ:

Hình 2 - Tệp CSV kết quả

Hình 2 – Tệp CSV kết quả

Không có gì lạ mắt và không có gì để viết về nhà – nhưng nó đã làm được việc. Việc chạy tập lệnh sẽ tạo ra một tệp CSV đầu ra, đây sẽ là một xác minh để đảm bảo mọi thứ hoạt động bình thường khi được thực thi trong vùng chứa Docker.

Hãy xem cách tiếp cận điều này tiếp theo.

Viết Dockerfile

Chúng tôi sẽ tận dụng a Dockerfileđể tạo vùng chứa cho tập lệnh R. Tạo một tệp mới trong cùng thư mục chứa tập lệnh R của bạn và đặt tên cho nó Dockerfile– tất cả chỉ một từ, không có phần mở rộng.

Loại tệp này sử dụng cú pháp cụ thể để tạo vùng chứa Docker. Chúng ta hãy điểm qua một số từ khóa phổ biến:

  • FROM: Một lệnh Dockerfilebắt đầu bằng. Nó được sử dụng để mô tả hình ảnh cơ sở mà chúng ta đang xây dựng hình ảnh của mình. Ví dụ: rocker/r-verđược xây dựng trên Ubuntu LTS và cài đặt phiên bản R cố định từ nguồn. Bạn có thể chỉ định phiên bản chính xác của R bằng cách đặt :<r-version>sau rocker/r-ver. Hãy tự mình khám phá thêm các chi tiết của hình ảnh này .
  • RUN: Lệnh này bắt chước các lệnh dòng lệnh và chúng ta có thể sử dụng chúng để thực hiện những việc như tạo thư mục, cài đặt phụ thuộc, v.v.
  • COPY: Lệnh được sử dụng để sao chép nội dung của máy cục bộ của bạn vào vùng chứa. Sử dụng cú pháp COPY <path-tolocal-file> <path-in-container>hoặc thay thế <path-tolocal-file>bằng .để sao chép mọi thứ từ thư mục.
  • CMD: Đây là lệnh sẽ được sử dụng mỗi khi bạn khởi chạy vùng chứa. Ví dụ: chúng ta có thể sử dụng nó để chạy tập lệnh R của mình.

Có nhiều từ khóa hơn bạn có thể sử dụng, nhưng những từ khóa này sẽ đủ cho ngày hôm nay.

Dưới đây là Dockerfilenội dung, vì vậy hãy thoải mái sao chép-dán chúng:

# Base R image
FROM rocker/r-ver

# Make a directory in the container
RUN mkdir /home/r-environment

# Install R dependencies
RUN R -e "install.packages(c('dplyr', 'gapminder'))"

# Copy our R script to the container
COPY script.R /home/r-environment/script.R

# Run the R script
CMD R -e "source('/home/r-environment/script.R')"

Tóm lại, chúng tôi đang sử dụng phiên bản mới nhất của r-verhình ảnh, tạo thư mục, cài đặt các phần phụ thuộc R, sao chép tập lệnh cục bộ vào vùng chứa và chạy nó.

Đó là nó! Cú pháp cần một chút thời gian để làm quen nhưng rất đơn giản và dễ đọc. Bạn sẽ gặp nhiều khó khăn khi viết hơn là đọc Dockerfilenếu bạn mới bắt đầu.

Tạo Docker Container và chạy tập lệnh

Chúng ta chỉ còn hai lệnh shell nữa là chạy tập lệnh R trong vùng chứa Docker.

Lệnh shell đầu tiên được sử dụng để xây dựng vùng chứa theo Dockerfilehướng dẫn của bạn. Mở một cửa sổ Terminal mới và điều hướng đến vị trí mã của bạn. Sau đó, chạy lệnh sau:

docker build -t r-docker-demo .

Điều này sẽ xây dựng một hình ảnh mới có tên r-docker-demo:

Hình 3 - Xây dựng vùng chứa từ Dockerfile

Hình 3 – Xây dựng vùng chứa từ Dockerfile

Bạn sẽ thấy thông báo này khi quá trình xây dựng kết thúc:

Hình 4 - Xây dựng container đã hoàn thành

Hình 4 – Xây dựng container đã hoàn thành

Và bây giờ, cuối cùng chúng ta cũng có thể tạo một thùng chứa từ hình ảnh mới tạo và chạy nó:

docker run r-docker-demo

Đây là đầu ra shell bạn sẽ thấy:

Hình 5 - Khởi chạy vùng chứa Docker

Hình 5 – Khởi chạy vùng chứa Docker

Bạn có thể xem nhật ký thời gian chạy bằng cách mở Docker Desktop và theo dõi hoạt động của vùng chứa. Bạn sẽ thấy kết quả đầu ra giống hệt như được hiển thị trước đó trong Terminal:

Hình 6 - Đầu ra nhật ký vùng chứa Docker

Hình 6 – Đầu ra nhật ký vùng chứa Docker

Tab Tệp là nơi mọi thứ trở nên thú vị . Tóm lại, tab này cung cấp cho bạn cái nhìn tổng quan về cấu trúc tệp hệ thống.

Nếu tập lệnh R của chúng tôi hoàn tất thành công, chúng tôi sẽ thấy một eu-stats.csvtệp được lưu trữ trong home/r-environment:

Hình 7 - Tệp hệ thống vùng chứa Docker

Hình 7 – Tệp hệ thống vùng chứa Docker

Bạn có thể tải tệp này xuống cục bộ vào hệ thống của mình:

Hình 8 - Lưu file container cục bộ

Hình 8 – Lưu file container cục bộ

Và đây là những gì nó chứa:

Hình 9 - Nội dung file CSV thu được

Hình 9 – Nội dung file CSV thu được

Để kết luận, chúng tôi đã viết và Dockerize thành công một tập lệnh R đơn giản. Bạn có thể chia sẻ tập lệnh và Dockerfile với đồng nghiệp của mình và họ sẽ không gặp khó khăn gì khi tái tạo kết quả của bạn.

#docker  #r 

Cách sử dụng R Docker để tạo, chạy và chia sẻ ứng dụng R
1.05 GEEK