Home | Back
การขยาย Storage ของ Docker Container
Thursday, 11 September 2014
ในการใช้งาน OS-Level Virtualization อย่าง Docker นั้น เมื่อเราสร้าง Container แล้ว ตัว Container จะมีขนาดของ Storage ตั้งต้นที่ 10G ซึ่งพอเพียงกับการใช้งานปกติ แต่หากมีความต้องการใช้ Storage ที่มากกว่านั้น เราสามารถขยายขนาดของ Container ได้ดังนี้ครับ
1. ตรวจสอบ Mapper Pool ของ Container
ในการทำงานของ Container นั้นจะมีการ Map Storage ของ Container ที่กำลังทำงานเข้าไปที่ /dev/mapper/docker* ให้เราตรวจสอบว่า Container ที่เราต้องการขยายนั้น ใช้ mapper อันไหน โดยให้เข้าไปที่ Container ที่กำลังทำงาน แล้วใช้คำสั่งดังนี้ครับ
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e 9.8G 365M 8.9G 4% / tmpfs 3.9G 0 3.9G 0% /dev shm 64M 0 64M 0% /dev/shm /dev/sda2 443G 93G 328G 23% /etc/hosts
จะเห็นว่าที่ / นั้นจะ mount กับ /dev/mapper/docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e จะเป็นรหัสของ storage ของ Container ที่เราจะขยายครับ
ต่อไปให้เรากลับไปที่ Host เราจะทำการตรวจสอบพารามิเตอร์ของ Mapper ของเราด้วยคำสั่งดังนี้ครับ
$ dmsetup table docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e 0 20971520 thin 254:0 50
เราจะเห็นตัวเลข 20971520 ซึ่งเป็นขนาดของ Storage ของ Container ของเราในหน่วยของ 512 bytes เพราะฉะนั้นจะเห็นว่า Storage นี้จะมีขนาด 20971520 * 512 = 10737418240 bytes ซึ่งก็คือ 10G นั่นเอง
2. ปรับขนาดของ Mapper Pool ของ Container
ขั้นตอนต่อไปเราจะทำการปรับขนาดของ Storage โดยสมมุติว่าเราต้องการขนาด 20G ให้แปลงจำนวน 20G นี้ให้อยู่ในรูปของหน่วย 512 bytes ดังนี้ครับ 20G = 20 * 1024 * 1024 * 1024 / 512 = 41943040 และทำการปรับค่าพารามิเตอร์ของ Mapper โดยให้เปลี่ยนเฉพาะขนาดเท่านั้น ค่าพารามิเตอร์อื่นให้คงเดิมไว้ดังนี้ครับ
$ echo 0 41943040 thin 254:0 50 | dmsetup load docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e $ dmsetup resume docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e
จากนั้นปรับขนาดของ File System ดังนี้ครับ
$ resize2fs /dev/mapper/docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e resize2fs 1.42.11 (09-Jul-2014) Filesystem at /dev/mapper/docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e is mounted on /var/lib/docker/devicemapper/mnt/25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 The filesystem on /dev/mapper/docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e is now 5242880 blocks long.
เท่านี้ขนาดของ Container ก็จะขยายเป็น 20G แล้วครับ เมื่อเราเข้าไปใน Container และตรวจสอบขนาดของ / แล้วจะพบว่าขยายเป็น 20G แล้วครับ ดังนี้
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/docker-8:2-2885995-25bff42b4813b6f3e0f94dc4ec24d5bea3d356d4febaec63aa0d6dd66130421e 20G 370M 19G 2% / tmpfs 3.9G 0 3.9G 0% /dev shm 64M 0 64M 0% /dev/shm /dev/sda2 443G 93G 328G 23% /etc/hosts
เรียบร้อยโรงเรียนไทยครับ :)