สารบัญ:

สร้างอิมเมจ Docker สำหรับ Raspberry Pi: 7 ขั้นตอน
สร้างอิมเมจ Docker สำหรับ Raspberry Pi: 7 ขั้นตอน

วีดีโอ: สร้างอิมเมจ Docker สำหรับ Raspberry Pi: 7 ขั้นตอน

วีดีโอ: สร้างอิมเมจ Docker สำหรับ Raspberry Pi: 7 ขั้นตอน
วีดีโอ: Multi-arch docker image: ทำ Docker อิมเมจใข้ได้ หลาย CPU 2024, พฤศจิกายน
Anonim
สร้างอิมเมจ Docker สำหรับ Raspberry Pi
สร้างอิมเมจ Docker สำหรับ Raspberry Pi

คำแนะนำนี้แสดงวิธีสร้าง Docker Image สำหรับ Raspberry Pi

ขั้นตอนที่ 1: ทำไมต้อง Docker

คุณสามารถใช้ Raspberry Pi (RPi) ทำสิ่งต่างๆ ได้มากมาย เว็บเซิร์ฟเวอร์ขนาดเล็ก ผู้ช่วย AI วิทยาการหุ่นยนต์ … เป็นต้น

หลายโครงการที่คุณต้องการลอง แต่ประเด็นปัญหาคือ:

ถึงเวลาสร้าง

RPi ไม่กระตือรือร้นในการประมวลผล และไดรฟ์ SD/USB จำกัดความเร็ว IO ใช้ apt ติดตั้งแพ็คเกจการพึ่งพาทั้งหมดต้องใช้เวลาหนึ่งชั่วโมงและการสร้างแหล่งที่มาต้องใช้เวลาหลายชั่วโมงมากขึ้น โดยเฉพาะโครงการที่เกี่ยวข้องกับ AI ต้องรอนานกว่าจะได้ลอง

เวอร์ชันความขัดแย้ง

ทุกคนลองหลายโครงการใน RPi เดียว เมื่อคุณได้ลองใช้โปรเจ็กต์แล้วและต้องการเปลี่ยนไปใช้โปรเจ็กต์อื่น คุณอาจพบว่าบิลด์บางตัวล้มเหลวซึ่งเกิดจากเวอร์ชันไลบรารีการขึ้นต่อกันขัดแย้งกับโปรเจ็กต์ก่อนหน้า ห้องสมุดบางแห่งหยุดพัฒนาเมื่อไม่กี่ปีที่ผ่านมาและต้องพึ่งพาห้องสมุดเก่าบางแห่ง ในทางตรงกันข้าม โครงการที่ใช้งานอยู่จะขึ้นอยู่กับไลบรารีล่าสุด ทั้งสองโปรเจ็กต์ไม่สามารถอยู่ร่วมกันในไดรฟ์ SD/USB เดียวกันได้

สำรองรูปภาพ

เนื่องจากบางโปรเจ็กต์ไม่สามารถอยู่ร่วมกันได้ เพียงซื้อไดรฟ์ SD/USB เพิ่มเพื่อให้แต่ละอิมเมจของโปรเจ็กต์ขึ้นอยู่กับแต่ละอิมเมจก็เป็นอีกวิธีหนึ่ง ถ้าเงินไม่จำกัด?. แต่มันเพิ่มความยากในการจัดการไฟล์/รูปภาพ บางครั้งคุณจำเป็นต้องสลับ SD/USB และบูตหลายครั้งเพื่อค้นหาสิ่งที่คุณต้องการ

ยากที่จะแบ่งปัน

เมื่อคุณสร้างโปรเจ็กต์และต้องการแชร์แหล่งที่มาให้เพื่อน เพื่อนของคุณอาจได้รับฟีดแบ็คที่ล้มเหลวในการสร้าง เวอร์ชันการแจกจ่าย/ไลบรารีเก่าหรือใหม่เกินไป พารามิเตอร์การสร้างและลูกเล่นบางอย่าง คุณต้องใช้เวลาในการแก้ปัญหาอื่นๆ ในการสร้างปัญหา แต่ไม่สนับสนุนโครงการเอง

จุดปวดข้างต้นเป็นประสบการณ์ของฉันในช่วงไม่กี่ปีที่ผ่านมานี้ นักเทียบท่าสามารถช่วยได้มากที่สุด

นักเทียบท่าเริ่มบิลด์จากการเลือกอิมเมจพาเรนต์ที่สร้างไว้ล่วงหน้า เช่น. debian:jessie-slim เริ่มต้นจากการกระจายน้ำหนักแบบ Debian ที่เสถียรแบบเก่า node:10-buster-slim เริ่มต้นจากการกระจายน้ำหนักเบาของ Debian โดยติดตั้ง Node.js 10 แล้ว อิมเมจที่สร้างไว้ล่วงหน้าสามารถประหยัดเวลาได้มากในการแฟลชอิมเมจ รับการอัปเดต และติดตั้งไลบรารีที่เกี่ยวข้อง แต่ละโปรเจ็กต์สามารถเริ่มต้นจากเวอร์ชันระบบปฏิบัติการ เวอร์ชันรันไทม์ และเวอร์ชันไลบรารีที่แตกต่างกัน เมื่อคุณพัฒนาโปรเจ็กต์ของคุณเองเสร็จแล้ว คุณสามารถพุชอิมเมจ Docker ไปยัง Docker Hub และแชร์กับทุกคนได้ คุณสามารถเก็บข้อมูลโครงการทั้งหมดไว้ที่ SD/USB เดียวกันได้ (ข้อมูลควรสำรองข้อมูลเป็นประจำไปยังสื่ออื่นๆ) สำหรับการบันทึกที่จัดเก็บในตัวเครื่อง คุณสามารถล้างข้อมูลอิมเมจ Docker เมื่อไม่ได้ใช้งาน เมื่อใดก็ตามที่คุณสามารถดึงจากฮับ Docker ได้อีกครั้ง

ขั้นตอนที่ 2: ค่าโสหุ้ยนักเทียบท่า

นักเทียบท่าได้เพิ่มเลเยอร์เสมือนจริงหนึ่งเลเยอร์ โอเวอร์เฮดเป็นสิ่งที่น่ากังวล ฉันไม่ได้ทดสอบมากเกินไปเกี่ยวกับค่าใช้จ่ายของ Docker ผลลัพธ์ของ Googled ส่วนใหญ่เรียกร้องค่าใช้จ่ายที่ต่ำมาก และฉันพบเอกสารนี้เกี่ยวกับงานวิจัยที่เกี่ยวข้อง:

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

ขั้นตอนที่ 3: ติดตั้ง Docker

เพียงแค่เรียกใช้:

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

อ้างอิง:

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

docs.docker.com/get-started/

ขั้นตอนที่ 4: สร้างอิมเมจ Docker

โปรดดูคำแนะนำอย่างเป็นทางการเกี่ยวกับการสร้างภาพนักเทียบท่า:

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

ฉันมี 2 โครงการที่ใช้ Docker คุณอาจพบ Dockerfile เป็นข้อมูลอ้างอิง:

BanateCAD ต้องการรันไทม์ Lua และไลบรารี Lua เพิ่มเติมบางส่วน มีเพียง Lua 5.1 เท่านั้นที่สามารถเข้ากันได้กับไลบรารี Lua ที่จำเป็นทั้งหมด แต่เป็นผลิตภัณฑ์ของปี 2006 การแจกจ่าย Debian ล่าสุดที่สามารถสร้างความสำเร็จ Lua 5.1 ได้คือ Jessie (เวอร์ชันก่อน Debian เก่าที่เสถียรในปัจจุบัน) ดังนั้นฉันจึงสร้าง Docker Image ของสภาพแวดล้อม Lua 5.1 เพื่อเรียกใช้

github.com/moononournation/BanateCAD/tree/…

OpenCV เป็นโครงการที่กำลังพัฒนาอย่างแข็งขัน ซอร์สโค้ดขึ้นอยู่กับไลบรารีและคอมไพเลอร์ล่าสุด ดังนั้นจึงมีโอกาสสูงมากที่จะสร้างล้มเหลว ลายเซ็นวิธีไลบรารี เวอร์ชันคอมไพเลอร์ ความขัดแย้งในการพึ่งพา… ฉันต้องการใช้ opencv4nodejs เพื่อสร้างแอปอย่างง่าย และไม่ต้องการคุณสมบัติล่าสุด ดังนั้นเมื่อฉันพบวิธีสร้างความสำเร็จของ opencv4nodejs ฉันอยากจะตรึงมันไว้ที่ Docker Image และทำการเข้ารหัสแอปพลิเคชันจริงของฉัน

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

ขั้นตอนที่ 5: ความเร็วในการสร้างการพัฒนา Vs ขนาดภาพ

การพัฒนาความเร็วของบิวด์ Vs ขนาดภาพ
การพัฒนาความเร็วของบิวด์ Vs ขนาดภาพ
การพัฒนาความเร็วของบิวด์ Vs ขนาดภาพ
การพัฒนาความเร็วของบิวด์ Vs ขนาดภาพ

คุณอาจพบว่าโปรเจ็กต์ face-aware-photo-osd ของฉันมี Dockfile 2 เวอร์ชัน:

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

ในขณะที่กำลังพัฒนา ฉันชอบแยกคำสั่ง RUN ให้เล็กที่สุดเท่าที่จะทำได้ และจัดเรียงที่มีแนวโน้มมากที่สุดที่จะเปลี่ยนคำสั่ง RUN เป็นขั้นตอนสุดท้าย ดังนั้นสำหรับทุกบิลด์สำหรับการเปลี่ยนแปลงการพัฒนา ฉันสามารถใช้เลเยอร์ที่สร้างก่อนหน้าได้มากที่สุดและประหยัดความเร็วของบิลด์ได้มาก

ในทางตรงกันข้าม ฉันจะรวมคำสั่ง RUN ทั้งหมดไว้ในคำสั่งเดียวก่อนปล่อย เลเยอร์ที่น้อยกว่าสามารถลดขนาด Docker Image ได้มาก โครงการ face-aware-photo-osd ของฉันเป็นตัวอย่างที่สามารถลดขนาดได้มากกว่า 100 MB

ขั้นตอนที่ 6: รูปภาพ Multi Arch

รูปภาพหลายซุ้ม
รูปภาพหลายซุ้ม

ดังที่ได้กล่าวไว้ก่อนหน้านี้ RPi ไม่กระตือรือร้นในการประมวลผล ใช้อิมเมจ RPi build Docker อาจไม่ใช่ตัวเลือกที่ดี โดยเฉพาะอย่างยิ่งเมื่อ RPi เดียวของคุณกำลังเรียกใช้โปรเจ็กต์อื่น

การใช้คอมพิวเตอร์ x86 สามารถช่วยคุณสร้าง Docker Image ได้ โปรดดูรายละเอียดเพิ่มเติมที่นี่:

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

คำสั่งง่ายๆ 2 คำสั่งสามารถสร้าง x86 และ ARM Docker Image แบบขนาน:

นักเทียบท่า buildx สร้าง --use

นักเทียบท่า buildx build --platform linux/amd64, linux/arm -t moononournation/debian-imagemagick-lua-meshlab:1.0.1 --push

Multi Arch สามารถสร้างอิมเมจหลายแพลตฟอร์มด้วยแท็กอิมเมจ Docker เดียวกันได้ ดังนั้นโปรเจ็กต์ของคุณสามารถทำงานในเครื่องต่างๆ ได้อย่างราบรื่น เช่น.

นักเทียบท่า run -it moononournation/debian-imagemagick-lua-meshlab:1.0.1

ไม่ว่าคุณจะเรียกใช้คำสั่งด้านบนบน RPi หรือคอมพิวเตอร์ x86 ของคุณ คุณก็จะได้รับสภาพแวดล้อมรันไทม์ของ Lua

ขั้นตอนที่ 7: มีความสุข RPi

ตอนนี้คุณสามารถพัฒนาและแบ่งปันโครงการ RPi ของคุณได้ง่ายขึ้น!

แนะนำ: