ตามค่าเริ่มต้น Docker จะจัดเก็บทุกอย่างไว้ใน “/var/lib/docker” ซึ่งอยู่บนพาร์ติชันรูท (/) เมื่อคอนเทนเนอร์ของคุณเติบโตขึ้น โฟลเดอร์นี้จะเต็มอย่างรวดเร็ว หากคุณสังเกตเห็นว่าเซิร์ฟเวอร์ของคุณทำงานช้า บันทึกข้อมูลไม่ได้ หรือเกิดข้อผิดพลาดแบบสุ่ม อาจเป็นเพราะพาร์ติชันรากมีพื้นที่ไม่เพียงพอ ในคู่มือนี้ เราจะอธิบายวิธีการต่างๆ ในการย้ายโวลุ่ม Docker (หรือข้อมูล) ไปยังพาร์ติชั่นอื่น และเพิ่มพื้นที่ว่างในพาร์ติชั่นรูท
สารบัญ
เหตุใดคุณจึงต้องย้ายไดรฟ์ข้อมูลนักเทียบท่าไปยังพาร์ติชันอื่น
คอนเทนเนอร์นักเทียบท่ามักจะสร้างข้อมูลถาวรจำนวนมาก เมื่อเวลาผ่านไป ข้อมูลนี้อาจใช้พื้นที่จัดเก็บข้อมูลของพาร์ติชันรากของคุณ การย้ายวอลุ่ม Docker ไปยังพาร์ติชันอื่นช่วยให้คุณ:
- พื้นที่ว่างบนระบบไฟล์รูท
- ป้องกันการล่มของระบบเนื่องจากดิสก์หมดแรง
- จัดเก็บข้อมูลแอปพลิเคชันขนาดใหญ่ไว้บนพื้นที่จัดเก็บข้อมูลเฉพาะ
- ปรับปรุงการจัดการพื้นที่เก็บข้อมูลโดยรวม
ตัวอย่างเช่น คอนเทนเนอร์ฐานข้อมูล เช่น MySQL หรือ PostgreSQL อาจจัดเก็บข้อมูลกิกะไบต์ไว้ภายในไดรฟ์ข้อมูล การย้ายวอลุ่มเหล่านั้นไปยังพาร์ติชั่นเฉพาะที่ใหญ่กว่าสามารถช่วยรักษาความเสถียรของระบบได้
ค้นหาไดเร็กทอรี Docker Volume
ก่อนที่จะย้ายไดรฟ์ข้อมูล Docker เราต้องค้นหาตำแหน่งที่ Docker จัดเก็บไว้บนระบบก่อน เรียกใช้คำสั่งต่อไปนี้เพื่อแสดงรายการวอลุ่ม Docker ที่มีอยู่ทั้งหมด:
docker volume ls
หลังจากระบุชื่อวอลุ่มแล้ว ให้รันคำสั่งด้านล่างเพื่อตรวจสอบโวลุ่มนั้น:
docker volume inspect volume_name
คำสั่งนี้จะแสดงข้อมูลโดยละเอียดเกี่ยวกับโวลุ่ม ในผลลัพธ์ ให้มองหา Mountpoint สนาม โดยจะแสดงไดเร็กทอรีที่แน่นอนซึ่ง Docker เก็บข้อมูลโวลุ่ม
ย้ายรากข้อมูล Docker ทั้งหมด
วิธีหนึ่งในการย้ายข้อมูล Docker ไปยังพาร์ติชันอื่นคือการย้ายตำแหน่งไดเร็กทอรีพื้นที่จัดเก็บข้อมูล Docker ทั้งหมด ซึ่งรวมถึงวอลุ่ม รูปภาพ คอนเทนเนอร์ และบันทึก นี่เป็นวิธีที่สะอาดและปลอดภัยที่สุดหาก “/var/lib/docker” เต็ม
เพื่อจุดประสงค์นี้ อันดับแรก คุณต้องหยุดบริการ Docker เพื่อให้แน่ใจว่าไม่มีไฟล์ใดเปลี่ยนแปลงระหว่างการย้าย:
sudo systemctl stop docker จากนั้น คุณสามารถคัดลอกข้อมูล Docker ได้โดยใช้คำสั่ง rsync:
sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/ หมายเหตุ :เปลี่ยน “/path/to/new/partition/” เป็นพาธของพาร์ติชั่นใหม่ที่คุณต้องการย้ายโฟลเดอร์ไป
คำสั่งนี้จะคัดลอกไดเร็กทอรี Docker โดยยังคงรักษาสิทธิ์และแสดงความคืบหน้าระหว่างการถ่ายโอน
หรือคุณสามารถใช้คำสั่งต่อไปนี้ ซึ่งจะรักษาคุณลักษณะ Docker เพิ่มเติม เช่น ฮาร์ดลิงก์ ACL และคุณลักษณะเพิ่มเติม:
sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/ แนะนำให้ใช้เวอร์ชันนี้เมื่อย้ายข้อมูล Docker เนื่องจากจะรักษาข้อมูลเมตาของระบบไฟล์ได้มากกว่าและให้ตัวบ่งชี้ความคืบหน้าโดยรวมที่ชัดเจนยิ่งขึ้น
หลังจากนี้ ให้เปลี่ยนชื่อไดเร็กทอรีข้อมูลเก่าเพื่อสำรองข้อมูลก่อนที่จะลบออก
sudo mv /var/lib/docker /var/lib/docker.old ตอนนี้ อัปเดตการกำหนดค่าของ Docker โดยเปิดไฟล์ daemon ด้วยคำสั่งนี้:
sudo nano /etc/docker/daemon.json เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์นี้:
{
"data-root": "/path/to/new/partition/docker-data"
}
สุดท้ายรีสตาร์ท Docker ด้วย sudo systemctl start docker . หลังจากนี้ คุณสามารถยืนยันไดเร็กทอรีข้อมูล Docker ใหม่ได้ด้วยคำสั่งต่อไปนี้:
docker info | grep "Docker Root Dir"
หากทุกอย่างเรียบร้อยดี ให้ลบข้อมูลสำรองเก่าออก:
sudo rm -rf /var/lib/docker.old ย้ายข้อมูล Docker ทั้งหมดโดยใช้ Docker Desktop (วิธี GUI)
Docker Desktop ช่วยให้คุณย้ายข้อมูล Docker ทั้งหมดไปยังพาร์ติชันอื่นโดยการเปลี่ยนตำแหน่งดิสก์อิมเมจ ตัวเลือกนี้จะถ่ายโอนทุกสิ่งที่ Docker จัดเก็บไว้ รวมถึงรูปภาพ คอนเทนเนอร์ วอลุ่ม และแคชบิลด์ ไปยังตำแหน่งใหม่บนระบบของคุณ
ในการดำเนินการนี้ ให้เปิด Docker Desktop แล้วไปที่ การตั้งค่า ไปที่ทรัพยากร → ขั้นสูง จากนั้นค้นหา ตำแหน่งดิสก์อิมเมจ ตัวเลือก ป>
คลิกเรียกดู แล้วเลือกโฟลเดอร์บนพาร์ติชั่นหรือไดรฟ์ใหม่ที่คุณต้องการให้ Docker จัดเก็บข้อมูล เช่น “/mnt/newdisk/docker-data” หลังจากเลือกตำแหน่งใหม่แล้ว คลิกนำไปใช้และเริ่มต้นใหม่ . จากนั้น Docker Desktop จะรีสตาร์ทและย้ายข้อมูล Docker ที่มีอยู่ทั้งหมดไปยังพาร์ติชันที่เลือก
หมายเหตุ: นี่เป็นการย้ายข้อมูล Docker ทั้งหมด ขณะนี้ไม่มีตัวเลือก GUI ในการย้ายแต่ละวอลุ่ม
ย้ายเฉพาะข้อมูลปริมาณที่ระบุ
คุณสามารถย้ายไดรฟ์ข้อมูล Docker เฉพาะไปยังพาร์ติชันอื่น และใช้กับคอนเทนเนอร์ของคุณผ่านการต่อเชื่อมโฮสต์ได้ วิธีการนี้เรียบง่าย ปลอดภัย และสำรองข้อมูลได้ง่าย ก่อนที่จะย้ายวอลลุ่ม ให้หยุดคอนเทนเนอร์ที่ใช้:
docker stop container_name
หลังจากนี้ ให้ใช้ rsync เพื่อย้ายข้อมูลทั้งหมดอย่างปลอดภัยไปยังไดเร็กทอรีใหม่ของคุณ:
sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/ การดำเนินการนี้จะคัดลอกทุกอย่างตั้งแต่โวลุ่มเก่าไปยัง “/data/docker/my_volume”
แก้ไขไฟล์ “docker-compose.yml” ของคุณเพื่อใช้การต่อเชื่อมแทนโวลุ่มที่จัดการโดย Docker:
services:
my_service:
volumes:
- /data/docker/my_volume:/container/path
แทนที่ /container/path โดยมีเส้นทางภายในคอนเทนเนอร์ซึ่งวอลลุ่มถูกติดตั้งไว้แต่แรก จากนั้นปรับใช้คอนเทนเนอร์อีกครั้งด้วยคำสั่งต่อไปนี้:
docker-compose up -d สรุป
การย้ายวอลุ่ม Docker หรือไดเร็กทอรีข้อมูล Docker ทั้งหมดไปยังพาร์ติชันที่ใหญ่กว่าจะช่วยเพิ่มพื้นที่ว่างบนระบบไฟล์รูทของคุณ และทำให้เซิร์ฟเวอร์ของคุณมีเสถียรภาพ คอนเทนเนอร์ทำงานต่อไปได้อย่างราบรื่นโดยไม่มีความเสี่ยงต่อการสูญเสียข้อมูล และการจัดการพื้นที่เก็บข้อมูลในอนาคตจะง่ายขึ้นมาก
หากไม่สามารถย้ายไดเร็กทอรี Docker ทั้งหมดได้ คุณยังคงสามารถเรียกคืนพื้นที่ได้โดยใช้วิธีอื่น ซึ่งรวมถึงการตัดคอนเทนเนอร์ รูปภาพ เครือข่าย และแคชที่ไม่ได้ใช้ออกด้วยระบบนักเทียบท่าหรือคำสั่งตัดแต่ละคำสั่ง และใช้ Linux mounts เพื่อย้ายไดเร็กทอรีขนาดใหญ่โดยไม่กระทบต่อรันไทม์ของ Docker