Mục lục:

Xây dựng hình ảnh Docker cho Raspberry Pi: 7 bước
Xây dựng hình ảnh Docker cho Raspberry Pi: 7 bước

Video: Xây dựng hình ảnh Docker cho Raspberry Pi: 7 bước

Video: Xây dựng hình ảnh Docker cho Raspberry Pi: 7 bước
Video: Tự học Docker siêu tốc trong 10 phút (Có code mẫu và ví dụ) - Code Dạo Dễ Òm 2024, Tháng mười một
Anonim
Xây dựng hình ảnh Docker cho Raspberry Pi
Xây dựng hình ảnh Docker cho Raspberry Pi

Tài liệu hướng dẫn này chỉ ra cách xây dựng Docker Image cho Raspberry Pi.

Bước 1: Tại sao Docker?

Bạn có thể sử dụng Raspberry Pi (RPi) để làm nhiều việc, máy chủ web nhỏ, trợ lý AI, Robotics … v.v.

Nhiều dự án bạn muốn thử, nhưng điểm khó khăn là:

Thời gian để xây dựng

RPi không quan tâm đến sức mạnh xử lý và ổ SD / USB hạn chế tốc độ IO. Sử dụng gói phụ thuộc cài đặt apt cần một giờ và việc xây dựng nguồn cần nhiều giờ hơn. Đặc biệt đối với các dự án liên quan đến AI, thời gian chờ đợi nhiều hơn thời gian để thử.

Xung đột phiên bản

Mọi người hãy thử nhiều dự án trong một RPi. Khi bạn đã thử một dự án và muốn chuyển sang một dự án khác, bạn có thể thấy một số bản dựng bị lỗi do xung đột phiên bản thư viện phụ thuộc với dự án trước đó. Một số thư viện ngừng phát triển cách đây vài năm và phụ thuộc vào một số thư viện rất cũ. Ngược lại, dự án đang hoạt động phụ thuộc vào các thư viện mới nhất. Cả hai dự án không thể cùng tồn tại trong cùng một ổ đĩa SD / USB ?.

Sao lưu hình ảnh

Vì một số dự án không thể cùng tồn tại, nên chỉ cần mua thêm ổ đĩa SD / USB để giữ cho mỗi hình ảnh dự án phụ thuộc vào nhau là một cách. Nếu tiền không bị giới hạn ?. Nhưng nó làm tăng khó khăn trong việc quản lý tệp / hình ảnh, đôi khi bạn yêu cầu hoán đổi SD / USB và khởi động nhiều lần để tìm ra thứ bạn muốn.

Khó chia sẻ

Khi bạn xây dựng dự án của mình và muốn chia sẻ nguồn cho bạn bè, bạn bè của bạn có thể lấy lại nguồn cấp dữ liệu không thành công trong quá trình xây dựng. Phiên bản phân phối / thư viện quá cũ hoặc quá mới, các thông số xây dựng và một số thủ thuật. Bạn cần sử dụng hết thời gian để giải quyết các vấn đề do người khác xây dựng nhưng không hỗ trợ chính dự án.

Những điểm đau trên là kinh nghiệm của tôi trong vài năm này. Docker có thể giúp hầu hết nó.

Docker bắt đầu xây dựng từ việc chọn một hình ảnh gốc được tạo sẵn. Ví dụ. debian: jessie-slim bắt đầu từ bản phân phối Debian trọng lượng nhẹ ổn định cũ; node: 10-buster-slim bắt đầu từ bản phân phối trọng lượng nhẹ Debian với Node.js 10 được cài đặt. Hình ảnh dựng sẵn có thể tiết kiệm nhiều thời gian để flash hình ảnh, cập nhật và cài đặt các thư viện phụ thuộc. Mỗi dự án có thể bắt đầu từ phiên bản hệ điều hành, phiên bản thời gian chạy và phiên bản thư viện khác nhau. Khi bạn hoàn thành việc phát triển dự án của riêng mình, bạn có thể đẩy hình ảnh Docker đến trung tâm docker và chia sẻ với mọi người. Bạn có thể giữ tất cả dữ liệu dự án trên cùng một SD / USB (dữ liệu nên sao lưu định kỳ sang phương tiện khác). Để tiết kiệm bộ nhớ cục bộ, bạn thậm chí có thể dọn dẹp hình ảnh Docker khi không sử dụng, bất cứ lúc nào bạn có thể kéo lại từ trung tâm Docker.

Bước 2: Docker Overhead

Docker đã thêm một lớp ảo hóa, chi phí là một mối quan tâm. Tôi đã không kiểm tra quá nhiều về chi phí Docker. Hầu hết kết quả trên Google đều khẳng định chi phí rất thấp và tôi đã tìm thấy tài liệu này về một số nghiên cứu liên quan:

domino.research.ibm.com/library/cyberdig.n…

Bước 3: Cài đặt Docker

Đơn giản chỉ cần chạy:

curl -sSL https://get.docker.com | NS

Tham chiếu:

www.raspberrypi.org/blog/docker- results-to-…

docs.docker.com/get-started/

Bước 4: Xây dựng hình ảnh Docker

Vui lòng tìm hướng dẫn chính thức về việc xây dựng hình ảnh docker:

docs.docker.com/get-started/part2/

Tôi có 2 dự án sử dụng Docker, bạn có thể tìm Dockerfile làm tài liệu tham khảo:

BanateCAD yêu cầu thời gian chạy Lua và một số thư viện Lua bổ sung. Chỉ Lua 5.1 có thể tương thích với tất cả các thư viện Lua được yêu cầu nhưng nó là sản phẩm của năm 2006. Bản phân phối Debian mới nhất có thể xây dựng thành công Lua 5.1 là Jessie (Phiên bản trước Debian cũ hiện tại ổn định). Vì vậy, tôi đã xây dựng một Docker Image môi trường Lua 5.1 để chạy nó

github.com/moononournation/BanateCAD/tree/…

OpenCV là một dự án đang phát triển tích cực, mã nguồn phụ thuộc vào các thư viện và trình biên dịch mới nhất. Vì vậy, khả năng rất cao là xây dựng không thành công, chữ ký phương thức thư viện, phiên bản trình biên dịch, xung đột phụ thuộc… Tôi muốn sử dụng opencv4nodejs để tạo một ứng dụng đơn giản và không yêu cầu các tính năng mới nhất. Vì vậy, khi tôi tìm ra cách để xây dựng thành công opencv4nodejs, tôi muốn đóng băng nó thành Hình ảnh Docker và thực hiện mã hóa ứng dụng thực tế của mình

github.com/moononournation/face-aware-phot…

Bước 5: Phát triển Tốc độ xây dựng Vs Kích thước hình ảnh

Phát triển Tốc độ xây dựng Vs Kích thước hình ảnh
Phát triển Tốc độ xây dựng Vs Kích thước hình ảnh
Phát triển Tốc độ xây dựng Vs Kích thước hình ảnh
Phát triển Tốc độ xây dựng Vs Kích thước hình ảnh

Bạn có thể thấy dự án nhận dạng khuôn mặt-photo-osd của tôi có 2 phiên bản Dockfile:

github.com/moononournation/face-aware-phot…

Trong khi phát triển, tôi thích chia lệnh RUN càng nhỏ càng tốt và sắp xếp nhiều khả năng để thay đổi lệnh RUN đến bước cuối cùng. Vì vậy, đối với mỗi thay đổi xây dựng để phát triển, tôi có thể sử dụng lớp đã xây dựng trước đó nhiều nhất có thể và tiết kiệm nhiều tốc độ xây dựng.

Ngược lại, tôi sẽ kết hợp tất cả các lệnh RUN trong một trước khi phát hành. lớp ít hơn có thể làm giảm nhiều kích thước Hình ảnh Docker. Ví dụ như dự án nhận dạng khuôn mặt-photo-osd của tôi, nó có thể giảm kích thước hơn 100 MB.

Bước 6: Hình ảnh nhiều vòm

Hình ảnh nhiều vòm
Hình ảnh nhiều vòm

Như đã đề cập trước đây, RPi không quan tâm đến sức mạnh xử lý. Sử dụng RPi xây dựng hình ảnh Docker có thể không phải là một lựa chọn tốt, đặc biệt là khi RPi duy nhất của bạn đang chạy các dự án khác.

Sử dụng máy tính x86 cũng có thể giúp bạn xây dựng Hình ảnh Docker, vui lòng tìm thêm chi tiết tại đây:

www.docker.com/blog/multi-arch-images/

2 lệnh đơn giản có thể xây dựng hình ảnh x86 và ARM Docker song song:

docker buildx create --use

docker buildx build --platform linux / amd64, linux / arm -t moononournation / debian-imagemagick-lua-meshlab: 1.0.1 --push.

Multi Arch có thể xây dựng hình ảnh đa nền tảng với cùng một thẻ hình ảnh Docker, vì vậy dự án của bạn có thể chạy trên các máy khác nhau một cách liền mạch. ví dụ.

docker run -it moononournation / debian-imagemagick-lua-meshlab: 1.0.1

Bất kể bạn chạy lệnh trên trên RPi hoặc máy tính x86 của mình, bạn đều có thể nhận được môi trường thời gian chạy Lua.

Bước 7: Chúc mừng RPi

Giờ đây, bạn có thể phát triển và chia sẻ dự án RPi của mình dễ dàng hơn!

Đề xuất: