วิธีการตัดสินใจระหว่างที่เก็บปริมาณนักเทียบท่าและปริมาณนักเทียบท่า?


24

หลังจากอ่านเอกสารฉันพบว่าตัวเองค่อนข้างสับสนว่าวิธีที่ดีที่สุดในการจัดการข้อมูลแอปพลิเคชัน / บริการที่มีประสิทธิผล

ดูเหมือนจะมี 3 ตัวเลือก:

  1. เพียงแม็พปริมาณไปยังไดเรกทอรีโฮสต์ (เช่น-vอาร์กิวเมนต์สำหรับdocker run)
  2. สร้างอิมเมจคอนเทนเนอร์ของนักเทียบท่าสำหรับข้อมูล (เช่นคอนเทนเนอร์ที่แยกต่างหากและ--volumes-from)
  3. การสร้างปริมาณนักเทียบท่า (เช่นdocker volume create)

ตอนนี้ดูเหมือนว่าการปฏิบัติที่ยอมรับคือตัวเลือก # 2 แต่ฉันสงสัยว่าอะไรคือจุดประสงค์ของ # 3

โดยเฉพาะอย่างยิ่งคุณจัดการกับสถานการณ์เหล่านี้อย่างถูกต้องอย่างไรdocker volumeและจะดีกว่าถ้าใช้ data container container หรือสิ่งนี้สำหรับแต่ละสถานการณ์?

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


@MichaelHampton ฉันรู้ว่าฉันควรเรียบเรียงคำถามของฉันอีกครั้ง
dukeofgaming

# 1 ไม่ใช่ตัวเลือกที่จริงจังสำหรับการผลิต โดยทั่วไปไม่ควรทำหากมีทางเลือกอื่นอยู่
Michael Hampton

2
@MichaelHampton เพราะเหตุใดข้อมูลอาจไม่ได้รับการเทียบท่า แต่โฮสต์ระบบปฏิบัติการยังคงได้รับการจัดการโดยทีมโครงสร้างพื้นฐานที่ทำหน้าที่ตรวจสอบและสำรองข้อมูล
dukeofgaming

@dukeofgaming ไม่ต้องพูดถึงว่าคุณสามารถเรียกใช้btrfs scrubเพื่อค้นหาและแก้ไขไฟล์ที่เสียหาย ฉันไม่แน่ใจว่าสิ่งที่เก็บข้อมูลทำงานอย่างไร แต่ฉันคิดว่ามันไม่ได้ป้องกันการเน่าของข้อมูลดังนั้นฉันจึงจำเป็นต้องมีการคืนค่าอย่างเต็มรูปแบบเสมอหากมีสิ่งไม่ดีเกิดขึ้นแทนที่จะกู้คืนไฟล์แต่ละไฟล์ อีกคนคิดว่ามันเพิ่มสิ่งที่เป็นนามธรรมอีกชั้นหนึ่งดังนั้นจึงทำให้การอ่านและเขียนไฟล์ช้าลงมากขึ้น ฉันไม่เห็นข้อดีของ # 2 และ # 3 แต่ฉันไม่ได้พบกับนักเทียบท่าดังนั้นสิ่งนี้อาจเปลี่ยนแปลงได้
inf3rno

คำตอบ:


18

ฉันคิดว่า # 2 และ # 3 เหมือนกันมากความแตกต่างที่สำคัญคือไม่มีคอนเทนเนอร์ที่หยุดด้วย # 3 (มันคือตัวอักษรปริมาตรที่กำหนดชื่อ) ตัวอย่างเช่นคุณสามารถสร้างโวลุ่มที่มีชื่อและทำสิ่งที่คุณจะทำกับ # 2 ด้วย-vเช่นกัน

สร้างโวลุ่มที่มีชื่อ:

$ docker volume create --name test

เมานต์และเขียนข้อมูลบางส่วนไปยังไดรฟ์ข้อมูลนั้นจากคอนเทนเนอร์:

$ docker run -v test:/opt/test alpine touch /opt/test/hello

จากนั้นคุณสามารถเมานต์testโวลุ่มนั้นในคอนเทนเนอร์อื่นและอ่านข้อมูล:

$ docker run -v test:/opt/test alpine ls -al /opt/test     
total 8
drwxr-xr-x    2 root     root          4096 Jan 23 22:28 .
drwxr-xr-x    3 root     root          4096 Jan 23 22:29 ..
-rw-r--r--    1 root     root             0 Jan 23 22:28 hello

ข้อได้เปรียบที่นี่คือปริมาณจะไม่หายไปโดยไม่ได้ตั้งใจถ้าคุณลบที่เก็บข้อมูลเท่านั้น ตอนนี้คุณจัดการมันด้วยdocker volumeคำสั่งย่อย

$ d volume ls
DRIVER              VOLUME NAME
local               test

นอกจากนี้ยังเปิดความเป็นไปได้สำหรับโปรแกรมควบคุมระดับเสียงลงที่ถนนดังนั้นคุณอาจสามารถทำโวลุ่มที่ใช้ร่วมกันระหว่างโฮสต์ (เช่นชื่อที่มีปริมาณมากกว่า NFS) ตัวอย่างของเรื่องนี้อาจจะมีFlockerและคุ้มกัน ถึงจุดของคุณโดยเฉพาะเกี่ยวกับการย้ายหรือสำรองข้อมูล Convoy มีคำสั่งย่อยเฉพาะสำหรับการสำรองข้อมูลและอนุญาตให้มีการจัดเก็บใน NFS หรือ EBS ภายนอกไปยังโฮสต์ของคุณ

ด้วยเหตุนี้ฉันจึงคิดว่าวิธีใหม่ในโรงเรียน (Docker 1.9+) คือการใช้วอลลุ่มที่มีชื่อแทนที่จะเป็นที่เก็บข้อมูลอย่างเดียว


ขอบคุณคุณตอบคำถามส่วนใหญ่ของฉัน แต่จุดในการจัดการข้อมูลคอนเทนเนอร์ในระดับชั้นกายภาพที่แตกต่างกันยังคงไม่ได้ตอบและนั่นเป็นสิ่งสำคัญอย่างยิ่ง ... สมมติว่านี่เป็นโซลูชั่นการจัดการ repo git และฉันต้องการส่วนหนึ่งของคอนเทนเนอร์ data (ซึ่งเป็นปริมาณที่กำหนดไว้ใน dockerfile) ในหน่วยเก็บข้อมูล Tier 0 ที่อยู่ในฟิสิคัลโฮสต์โฮสต์อื่น (เช่นพาร์ติชันอื่นดิสก์ทางกายภาพหรืออะไรก็ตาม)
dukeofgaming

ฉันเรียงลำดับจากไดรฟ์ข้อมูลที่กล่าวถึง ในตอนนี้หากต้องการจัดเก็บข้อมูลภายนอกไดรฟ์จัดเก็บข้อมูลจริงคุณต้องใช้ที่ทำสิ่งที่คุณต้องการทำโดยเฉพาะ ปิดด้านบนของหัวของฉันมีgithub.com/rancher/convoyและgithub.com/ClusterHQ/flocker Convoy มีการสนับสนุน NFS และ GlusterFS ในขณะนี้ซึ่งฟังดูใกล้เคียงกับที่คุณเป็น ฉันจะแก้ไขคำตอบเพื่อชี้แจงเรื่องนี้
Andy Shinn

การใช้ไดรเวอร์ devicemapper ดูเหมือนจะตอบคำถามของฉันขอบคุณ! docs.docker.com/engine/userguide/storagedriver/ …
dukeofgaming

the volume won't accidentally disappear if you remove the data-only container. คุณสามารถทำอย่างละเอียด? ขอบคุณ
Stephane

22

ในฐานะของ Docker 1.9 การสร้างVolamed APIด้วยVolumes API ( docker volume create --name mydata) เป็นที่ต้องการมากกว่า Data Volume Container ตั้งแต่เดือนกุมภาพันธ์ 2559 เอกสารประกอบปริมาณของนักเทียบท่านั้นล้าสมัยไปแล้ว ผู้ใช้ Docker เองแนะนำว่า Data Volume Containers“ ไม่ถือว่าเป็นรูปแบบที่แนะนำอีกต่อไป ”“ โวลุ่มที่มีชื่อควรจะสามารถแทนที่โวลุ่มที่มีข้อมูลเท่านั้นในกรณีส่วนใหญ่ (หากไม่ใช่ทั้งหมด) ” และ“ ไม่มีเหตุผลที่ฉันจะเห็นการใช้ ภาชนะบรรจุข้อมูลเท่านั้น

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