ฉันจะสร้างอิมเมจพื้นฐานของตัวเองสำหรับ Docker ได้อย่างไร


97

ตามเอกสารของ Dockerในการสร้างอิมเมจของคุณเองคุณต้องระบุอิมเมจพื้นฐานโดยใช้FROMคำสั่งเสมอ

เห็นได้ชัดว่ามีภาพมากมายให้เลือกในดัชนี Dockerแต่ถ้าฉันต้องการสร้างของตัวเองล่ะ? เป็นไปได้หรือไม่

อิมเมจbaseถูกสร้างขึ้นจาก Ubuntu ถ้าฉันเข้าใจถูกต้องและฉันต้องการทดลองกับรูปภาพ Debian นอกจากนี้ฉันต้องการเข้าใจวิธีการทำงานของ Docker อย่างแท้จริงและbaseภาพยังคงเป็นกล่องดำสำหรับฉัน


แก้ไข: เอกสารอย่างเป็นทางการเกี่ยวกับการสร้างภาพฐาน


ไม่สำคัญ :-) คำถามที่นี่ยังคงต้องอยู่ในหัวข้อตามหลักเกณฑ์ของไซต์ ครอบคลุมอยู่ในศูนย์ช่วยเหลือและหน้าทัวร์ชม (ดูเหมือนว่าลิงก์จะเกี่ยวข้องกับผู้พัฒนาคอนเทนเนอร์ Docker ด้วย) หากคุณกำลังถามเกี่ยวกับอิมเมจคอนเทนเนอร์ของคุณเองมีเครื่องมือสำหรับสิ่งนั้นในไซต์ของพวกเขา
Ken White

@KenWhite: คำถามเมตาที่เกี่ยวข้อง: meta.stackexchange.com/questions/179249/…
Flimm

:-) เมตาคำตอบที่เกี่ยวข้องณ เวลานี้ซึ่งเป็นคำตอบที่อยู่เหนือคุณ (ดูโดยเฉพาะความคิดเห็นที่สองในคำตอบที่ฉันเชื่อมโยงเกี่ยวกับความชัดเจนของคำถามของคุณที่ถาม)
Ken White

9
@ เคนไวท์: คำถามคือการ 'สร้าง' อิมเมจพื้นฐานไม่ใช่วิธีปรับใช้ 'อิมเมจ' Flimm พยายามตั้งโปรแกรมบางอย่างที่สามารถนำไปใช้งานได้ในภายหลังโดยเขาหรือคนอื่น ๆ Amazon EC2 เกี่ยวข้องกับการปรับใช้ แต่ฉันคิดว่าพวกเขายังมีโปรแกรมเมอร์สองสามคนที่เขียนโปรแกรมโปรแกรมต่างๆ :) การสร้างอิมเมจพื้นฐานเป็นตัวอย่างของโปรแกรมที่ฉันจะพูด
qkrijger

@qkrijger: กำลังพูดถึงในคำถามเมตาที่เชื่อมโยง เนื่องจากการสนทนานั้นเปิดอยู่โปรดโพสต์การอภิปรายเกี่ยวกับหัวข้อที่นั่น (ซึ่งดูเหมือนว่าฉันทามติจะไม่ใช่หัวข้อ "โปรแกรมของฉัน")
Ken White

คำตอบ:


37

คุณสามารถดูวิธีสร้างอิมเมจพื้นฐานและไปจากที่นั่นได้

คุณสามารถค้นหาได้ที่นี่: https://github.com/dotcloud/docker/tree/master/contrib มี mkimage-busybox.sh, mkimage-unittest.sh, mkimage-debian.sh


1
สคริปต์ mkimage- * ถูกย้ายและเปลี่ยนชื่อ (ตามที่ repo อย่างเป็นทางการ) มาที่นี่
tsalaroth

33

อ้างถึงSolomon Hykes :

คุณสามารถสร้างคอนเทนเนอร์ใหม่จาก tarball ใดก็ได้โดยใช้ "docker import" ตัวอย่างเช่น:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

บางทีอาจโพสต์การแก้ไข / อัปเดตในความคิดเห็นแทนเพื่อให้คนอื่นเห็นและอาจมีคนส่งการแก้ไขอีกครั้ง
Bdoserror

1
@Flimm ทำไมถึงต้องใช้ sudo ในกรณีนี้? เรียกใช้คำสั่งเหล่านี้ในไดเร็กทอรีผู้ใช้ของคุณและคุณไม่ควรมีเหตุผลในการยกระดับสิทธิ์ คุณกำลังสร้างภาพไม่ได้ติดตั้ง
rancidfishbreath

คุณไม่จำเป็นต้องรูทสำหรับการใช้ Docker แบบปกติ เพียงแค่เพิ่มตัวเองเข้าdockerกลุ่ม
tekknolagi

1
แต่ยัติภังค์ในคำสั่งนำเข้าซึ่ง Flimm แนะนำเป็นสิ่งที่จำเป็นdocker import - flimm/mybaseแทนdocker import flimm/mybase
Daniel Alder

การเป็นเจ้าของไฟล์ใน tar จะได้รับผลกระทบไม่ว่าคุณจะใช้งานในฐานะรูทหรือไม่ก็ตาม ถ้าไม่ได้เป็นรากแล้วdebootstrapและอย่างน้อยควรจะทำงานภายใต้tar fakeroot
clacke

21

(ให้เครดิต Fatherlinux) รับข้อมูลจากhttp://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ซึ่งจะอธิบายได้ดีกว่า

  1. สร้างไฟล์ tar สำหรับระบบไฟล์ของคุณอาจเป็นได้

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. โอนไฟล์ tar ไปยังระบบนักเทียบท่าอื่นหากไม่ได้ติดตั้งไว้ในimportเครื่อง

    cat centos6-base.tar | docker import - centos6-base
    
  3. ตอนนี้คุณสามารถตรวจสอบได้โดยเรียกใช้

    docker run -i -t centos6-base cat /etc/redhat-release
    

สคริปต์จาก dotcloud รวมสองขั้นตอนแรกด้วยกันซึ่งทำให้ฉันสับสนและรูปลักษณ์ที่มีความซับซ้อนในการเริ่มต้น

แนวทางอย่างเป็นทางการของนักเทียบท่าที่ใช้debootstrapยังพยายามทำให้ระบบไฟล์สะอาด

คุณสามารถตัดสินด้วยตัวเองว่าจะทำอย่างไรขั้นตอนที่ 1


14

ในการเริ่มสร้างภาพของคุณเองตั้งแต่เริ่มต้นคุณสามารถใช้scratchภาพดังกล่าว

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

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch


1
สิ่งนี้บวกimportจากไฟล์ tar เป็นคำตอบตามรูปแบบบัญญัติสองคำและลิงก์นั้นเป็นแหล่งข้อมูลตามรูปแบบบัญญัติ
clacke

7

หากคุณต้องการสร้างอิมเมจพื้นฐานของคุณเองฉันจะดู Official Imagesก่อนโดยเฉพาะstackbrewใน repo นั้น

มิฉะนั้นจะมีการอ้างอิงที่ยอดเยี่ยมสำหรับอิมเมจระบบปฏิบัติการขั้นต่ำในDocker repoเอง

ยกตัวอย่างเช่นที่นี่เป็นสคริปต์สำหรับการทำภาพซุ้มประตูน้อยที่สุดและมีมากขึ้นที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.