การสำรองข้อมูลและเรียกคืนข้อมูลนักเทียบท่า


23

ฉันใช้นักเทียบท่าเพื่อปรับใช้บริการบางอย่างบนเซิร์ฟเวอร์ CentOS 6.4 และฉันพยายามหาวิธีการสำรองข้อมูลที่ถูกต้องที่พวกเขาสร้างขึ้น

ตัวอย่างเช่นบริการหนึ่งเป็นเว็บแอปพลิเคชันที่ผู้ใช้สามารถอัปโหลดไฟล์ สำหรับคอนเทนเนอร์นี้ฉันมี/filesโวลุ่มที่ฉันต้องการสำรองข้อมูล รูปลักษณ์ที่โฮสต์ม้าเหมือนพวกเขาจะขมวดคิ้วบ้างเมื่อเพราะภูเขาดังกล่าวเป็นในทางที่ไม่พกพา - ตามที่กล่าวในการโพสต์บล็อกและเอกสารนักเทียบท่าสำหรับไดรฟ์

ฉันรู้จากโพสต์บล็อกเดียวกันว่าฉันไม่จำเป็นต้องใช้โฮสต์เมาท์เพื่อเข้าถึงไฟล์ในโวลุ่มฉันสามารถใช้docker inspectเพื่อค้นหาว่าไฟล์อยู่ที่ไหน

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

คำตอบ:


24

คุณถูก. เนื่องจากคุณสามารถมีหลายคอนเทนเนอร์ที่มีวอลุ่มด้วยตนเองคุณต้องติดตามว่าวอลุ่มใดสอดคล้องกับคอนเทนเนอร์ใด วิธีการทำขึ้นอยู่กับการตั้งค่าของคุณ: ฉันใช้ชื่อ - ข้อมูลสำหรับที่เก็บข้อมูลดังนั้นจึงเป็นที่ชัดเจนว่าภาพนั้นเป็นของคอนเทนเนอร์ วิธีนี้จะสามารถสำรองข้อมูลเช่นนี้:

VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz

ตอนนี้คุณเพียงแค่สร้างภาพของคุณใหม่และสร้างที่เก็บข้อมูลของคุณใหม่:

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
                              -i busybox tar -C /path/int/container -xzf -

ดังนั้นนี่หมายความว่าคุณต้องสำรองข้อมูล:

  • Dockerfile
  • ปริมาณ
  • เส้นทางปริมาณในภาชนะ
  • ชื่อของภาชนะบรรจุปริมาณเป็นของ

อัปเดต:ในขณะเดียวกันฉันสร้างเครื่องมือเพื่อสำรองข้อมูลคอนเทนเนอร์และปริมาณ (s) (s) (s): https://github.com/discordianfish/docker-backupและภาพสำรองที่สามารถสร้างการสำรองข้อมูลและผลักดันไปยัง s3: https://github.com/discordianfish/docker-lloyd


นั่นคือการประนีประนอมอย่างเป็นธรรมขอบคุณ มีข้อได้เปรียบที่ชัดเจนในการใช้ที่เก็บข้อมูลแยกต่างหากหรือไม่?
fcoelho

สิ่งนี้ขึ้นอยู่กับการตั้งค่าของคุณอีกครั้ง มันสมเหตุสมผลที่จะใช้ data container เพราะคุณสามารถอ้างถึงมันได้ง่าย ๆ โดยใช้ 'volume-from' และทำให้ internals ทั้งหมดถูกแยกออกไป: คุณเพียงแค่แนบวอลุ่มจาก container ไปยัง container อื่นแทนที่จะคิดในแง่ของ path และ mount points
Ziemke 'ปลา' ของโยฮันเนสเมื่อ

ฉันมีข้อผิดพลาดตัวเลือกที่ไม่ถูกต้อง - z ดูเหมือนว่าค่าเริ่มต้น tar ใน busybox ไม่รองรับสิ่งนี้
Dzung Nguyen

6
jq เจ๋งมาก แต่แทนที่จะแนะนำการพึ่งพาทำไมไม่ใช้docker inspectเทมเพลตในตัวแบบนี้: VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" ). อาจเป็นการดีที่เตือนผู้ใช้ไม่ให้คาดหวังว่าจะสำรองไฟล์ด้วยวิธีนี้ขณะที่ใช้งานอยู่ (เช่นฐานข้อมูล)
mc0e

2
ใน Docker 1.8 รูปแบบมีการเปลี่ยนแปลง - VolumesหายไปและมีMountsโครงสร้างที่แตกต่างกันแทน เราต้องทำงานเพิ่มอีกนิดrangeเพื่อหาจุดเมานท์ที่เราสนใจVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
Jarek Przygódzki

5

ในรุ่นใหม่เทียบท่า (ทดสอบ1.9.1, build 9894698) คุณสามารถใช้คำสั่งcp

นี่คือตัวอย่างวิธีการคัดลอกไดเรกทอรีจากคอนเทนเนอร์ไปยังโฮสต์:

docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/

นี่คือตัวอย่างวิธีการคัดลอกไดเรกทอรีจากคอนเทนเนอร์ไปยังtarไฟล์:

docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar

สุดท้าย แต่ไม่ท้ายสุดตัวอย่างวิธีคัดลอกไดเรกทอรีจากคอนเทนเนอร์ไปยังtar.gzไฟล์:

docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz

2
docker cpส่งทุกอย่างผ่านเครือข่าย เป็นสิ่งที่คุณต้องการหลีกเลี่ยงโดยเฉพาะอย่างยิ่งหากปริมาณนักเทียบท่าของคุณเป็นปริมาณ btrfs
Jarek Przygódzki

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