27 คะแนน โดย GN⁺ 2024-03-08 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • เครื่องมือสำหรับคอมไพล์อิมเมจ Docker ให้เป็นไบนารีแบบสแตนด์อโลนที่พกพาได้และรันได้เอง
  • สามารถแจกจ่ายไบนารีที่รันได้ให้ผู้ใช้ โดยไม่ต้องใช้คำสั่งอย่าง docker run, pip install, npm i

คุณสมบัติ

  • คอมไพล์อิมเมจ Docker ให้เป็นไบนารีที่พกพาได้
  • คอนเทนเนอร์ที่ไม่ต้องใช้สิทธิ์ root
  • รองรับ MacOS และ Windows (ใช้ QEMU) : เร็ว ๆ นี้
  • รองรับ x86_64 (arm64 จะรองรับในอนาคต)
  • รองรับอาร์กิวเมนต์
  • รองรับการกำหนดตัวแปรสภาพแวดล้อมด้วย -e
  • รองรับการกำหนดวอลุ่มด้วย -v

วิธีใช้งาน

  • ติดตั้ง dockerc จากรีลีสล่าสุด
  • สร้างไบนารีผลลัพธ์โดยใช้อิมเมจจาก Docker Hub หรืออิมเมจในคลังของ Docker daemon ภายในเครื่อง
  • ไบนารีที่สร้างขึ้นสามารถเรียกใช้งานได้เหมือนไบนารีทั่วไป
  • สามารถระบุตัวเลือก -e และ -v ได้ในลักษณะเดียวกับตอนใช้ docker run
  • เข้าถึงบริการเครือข่ายที่ทำงานอยู่ภายในคอนเทนเนอร์ได้โดยตรง โดยไม่ต้องระบุ -p
  • ใช้ Skopeo สำหรับโหลดอิมเมจ สำหรับตำแหน่งอื่น ๆ โปรดดูเอกสารที่เกี่ยวข้อง

ความเห็นของ GN⁺

  • dockerc เป็นเครื่องมือที่อาจยกระดับการใช้งาน Docker ได้อย่างมาก โดยช่วยให้ผู้ใช้สามารถรันแอปพลิเคชันได้โดยไม่ต้องผ่านขั้นตอนติดตั้งที่ซับซ้อน ซึ่งมีประโยชน์มากโดยเฉพาะกับผู้ใช้ที่ไม่ใช่สายเทคนิค
  • ความสามารถในการคอมไพล์อิมเมจ Docker เป็นไบนารีช่วยให้การแจกจ่ายและการดีพลอยง่ายขึ้น ซึ่งช่วยประหยัดเวลาและเพิ่มประสิทธิภาพให้กับนักพัฒนาและผู้ดูแลระบบ
  • อย่างไรก็ตาม หากเทคโนโลยีนี้จะได้รับการยอมรับอย่างแพร่หลาย ประเด็นด้านความปลอดภัย ประสิทธิภาพ และความเข้ากันได้จำเป็นต้องได้รับการแก้ไขอย่างเพียงพอ ตัวอย่างเช่น ต้องมีการตรวจสอบว่าไบนารีที่คอมไพล์แล้วปลอดภัยเทียบเท่ากับอิมเมจ Docker ต้นฉบับหรือไม่ และสามารถทำงานได้ราบรื่นในทุกระบบหรือไม่
  • อีกหนึ่งโปรเจ็กต์ที่มีความสามารถคล้าย Docker คือ Podman ซึ่งรองรับการรันคอนเทนเนอร์โดยไม่ต้องใช้สิทธิ์ root
  • เมื่อนำ dockerc มาใช้ ควรพิจารณาการผสานเข้ากับเวิร์กโฟลว์ Docker เดิม วิธีอัปเดตและจัดการอิมเมจ ตลอดจนขนาดและประสิทธิภาพของไบนารีที่คอมไพล์แล้ว ประโยชน์ของเทคโนโลยีนี้คือความเรียบง่ายในการแจกจ่ายและความสะดวกในการใช้งาน แต่ในทางกลับกันก็ควรพิจารณาอย่างรอบคอบถึงโอเวอร์เฮดที่อาจเกิดขึ้นในกระบวนการคอมไพล์และปัญหาความเข้ากันได้ที่อาจเกิดขึ้น

2 ความคิดเห็น

 
cosine20 2024-03-11

โอ้ น่าสนใจทีเดียวครับ

 
GN⁺ 2024-03-08

ความคิดเห็นจาก Hacker News

  • นี่เจ๋งมากจริงๆ

    • ผู้ใช้กำลังพยายามทำให้ Docker ของตัวเองพร้อมแจกจ่ายมากขึ้น ตอนนี้มันคือสคริปต์ Python ง่ายๆ ที่อยู่ในสภาพแวดล้อม Python ภายในคอนเทนเนอร์ Docker ภายในคอนเทนเนอร์ QEMU เพื่อทำงานคลิกอัตโนมัติและใช้ netcat ขนาดไฟล์ 20GB ซึ่งตามมาตรฐานปัจจุบันก็ค่อนข้างเบา
  • ในอดีตฉันเคยใช้และแนะนำ nix-bundle¹ หรือทางการที่เทียบเท่ากันคือ nix bundle²

    • เครื่องมือเหล่านี้ช่วยให้ข้ามขั้นตอนการจัดการ Docker image โดยตรงได้ สะดวกมากโดยเฉพาะเมื่อการสร้าง Docker image ทำได้ยาก หรือกระบวนการนั้นกลายเป็นศาสตร์เร้นลับที่ถูกลืมไปแล้ว
    • nix bundle สามารถสร้างได้ไม่ใช่แค่ executable แบบอ้วนๆ แต่ยังรวมถึง Docker image, AppImages และ image/executable รูปแบบอื่นอีกบางแบบ
  • การกลับไปใช้ executable แบบพกพาพร้อม OS ในตัวเป็นเรื่องที่ดีจริงๆ

    • มันยกระดับคำว่า "มันทำงานบนเครื่องฉัน" ไปสู่นรกแห่งการแก้ปัญหาระดับใหม่ ถึงอย่างนั้นโปรเจกต์นี้ก็ยังเจ๋งอยู่
  • ผู้ใช้กำลังรอให้ผู้คนเริ่มส่ง Dockerfile ที่สร้างคอนเทนเนอร์ Docker สำหรับรันสิ่งพวกนี้มา

  • มีความประชดประชันเชิงจักรวาลอันยิ่งใหญ่อยู่ตรงนี้

    • ถัดจากส่วนที่บอกว่าแค่อยากได้ executable มารันเลยโดยไม่ต้อง build หรือติดตั้ง ก็มีคาถา zig สำหรับ build โปรเจกต์นี้ตามมาติดๆ
  • นี่เป็นความคืบหน้าที่เจ๋งมากนะ Nils! ดีใจที่ได้เห็นความก้าวหน้าของโปรเจกต์หลังจากที่คุยกันที่ AGI House

    • dockerc ใช้ Zig + crun + squashfs/overlayfs และ Nils (ผู้เขียน) ได้แชร์ข้อมูลเพิ่มเติมไว้ในเธรดนี้
  • ยังไงก็ยังต้องมีของคนละชุดสำหรับสถาปัตยกรรมอื่นอยู่ดี

    • ณ จุดนี้ ฉันคิดว่าคอมไพล์แบบสแตติกและฝัง virtual filesystem เข้าไปน่าจะดีกว่า ซึ่งจริงๆ แล้วก็แทบจะเหมือนสิ่งที่ Sun เคยทำไว้ตั้งแต่ยุค 90
  • ไอเดียดี! แล้วมันทำงานจริงๆ อย่างไร?

    • ผู้ใช้เดาว่านี่คือ custom loader + Docker + image ที่ถูกห่อเป็น executable binary
  • ใช้ภาพวาดของ Lant ได้เท่มาก

    • ภาพวาด Lant รูปถัดไปน่าจะเป็นเรื่อง "เมื่อรัน executable แล้ว มันควรเปิดหน้าต่างที่มีแอปนั้นขึ้นมา"
  • นี่หมายความว่าอะไร? ผู้ใช้จะสามารถแจกจ่าย executable ของ Ruby แบบพกพาได้โดยไม่ต้องติดตั้ง Ruby ใช่ไหม?