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.
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.
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 .
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.
Đâ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 – dplyrvà gapminderđể 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ả
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.
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:
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.
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
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
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
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
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
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ộ
Và đây là những gì nó chứa:
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.