สารบัญ:
- ขั้นตอนที่ 1: ทำไมต้อง Docker
- ขั้นตอนที่ 2: ค่าโสหุ้ยนักเทียบท่า
- ขั้นตอนที่ 3: ติดตั้ง Docker
- ขั้นตอนที่ 4: สร้างอิมเมจ Docker
- ขั้นตอนที่ 5: ความเร็วในการสร้างการพัฒนา Vs ขนาดภาพ
- ขั้นตอนที่ 6: รูปภาพ Multi Arch
- ขั้นตอนที่ 7: มีความสุข RPi
วีดีโอ: สร้างอิมเมจ Docker สำหรับ Raspberry Pi: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
คำแนะนำนี้แสดงวิธีสร้าง 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 ขนาดภาพ
คุณอาจพบว่าโปรเจ็กต์ 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 ของคุณได้ง่ายขึ้น!
แนะนำ:
Raspberry Pi Remote Desktop สำหรับ Mac: 11 ขั้นตอน
Raspberry Pi Remote Desktop สำหรับ Mac: นี่คือบทช่วยสอนเกี่ยวกับวิธีการตั้งค่า tightvnc เพื่อเข้าถึงเดสก์ท็อปของ Raspberry Pi โดยใช้ Mac เมื่อ Pi ทำงานในโหมดหัวขาด
ติดตั้งง่าย IR Remote Control โดยใช้ LIRC สำหรับ Raspberry PI (RPi) - กรกฎาคม 2019 [ตอนที่ 1]: 7 ขั้นตอน
ติดตั้งง่าย IR Remote Control โดยใช้ LIRC สำหรับ Raspberry PI (RPi) - กรกฎาคม 2019 [ตอนที่ 1]: หลังจากค้นหามามาก ฉันรู้สึกประหลาดใจและผิดหวังกับข้อมูลที่ขัดแย้งกันเกี่ยวกับวิธีการตั้งค่ารีโมทคอนโทรล IR สำหรับโครงการ RPi ของฉัน ฉันคิดว่ามันน่าจะง่าย แต่การตั้งค่า Linux InfraRed Control (LIRC) นั้นมีปัญหามาเป็นเวลานาน bu
Flipperkonsole สำหรับ PC Flipper / Pinball Console สำหรับ PC Pinballs: 9 ขั้นตอน
Flipperkonsole สำหรับ PC Flipper / Pinball Console สำหรับ PC Pinballs: ใช้งานได้กับ USB พื้นฐาน เกมสำหรับ PC-Flipperkästen Die Spannungsversorgung erfolgt über das USB Kabel. Implementiert sind die beiden Flipper Buttons และ ein Startbutton Zusätzlich ist ein stossen von unten, von links และ von rechts implem
[Docker Pi Series] วิธีใช้โมดูล IoT Node (A) บน Raspberry Pi: 18 ขั้นตอน
[Docker Pi Series] วิธีใช้โมดูล IoT Node (A) บน Raspberry Pi: โมดูล IoT Node (A) คืออะไร IoT Node (A) เป็นหนึ่งในโมดูล Docker Pi series IOT Node(A) = GPS/BDS + GSM + Lora.I2C ควบคุม Lora ส่งและรับข้อมูลโดยตรง ควบคุมโมดูล GSM/GPS/BDS ผ่าน SC16IS752 เมนบอร์ดต้องการเพียง I2C suppo
3.3V Mod สำหรับ Ultrasonic Sensors (เตรียม HC-SR04 สำหรับ 3.3V Logic บน ESP32/ESP8266, Particle Photon ฯลฯ): 4 ขั้นตอน
3.3V Mod สำหรับ Ultrasonic Sensors (เตรียม HC-SR04 สำหรับ 3.3V Logic บน ESP32/ESP8266, Particle Photon, ฯลฯ.): TL;DR: บนเซนเซอร์ ตัดร่องรอยไปที่ Echo pin จากนั้นเชื่อมต่อใหม่โดยใช้ a ตัวแบ่งแรงดันไฟฟ้า (Echo trace -> 2.7kΩ -> Echo pin -> 4.7kΩ -> GND) แก้ไข: มีการถกเถียงกันว่า ESP8266 นั้นทนทานต่อ GPIO 5V จริงหรือไม่ใน