OverlayFS Docker là gì? Cấu hình và sử dụng OverlayFS driver trong Docker

Đã kiểm duyệt nội dung
Đánh giá
OverlayFS Docker là một công nghệ filesystem hợp nhất trên Linux, cho phép Docker chồng nhiều lớp của một image lên nhau và thêm một lớp ghi ở trên cùng để tạo thành một hệ thống tệp duy nhất cho container. Trong bài viết này với kinh nghiệm nhiều năm làm việc với hệ thống Linux, mình sẽ giúp bạn hiểu rõ hơn về OverlayFS Docker, từ cách thức hoạt động, đến cấu hình và sử dụng OverlayFS driver trong Docker cùng một số lưu ý khi sử dụng.
Những điểm chính
- Quan niệm của mình: Mình luôn nhìn nhận OverlayFS là sự giao thoa hoàn hảo giữa sự đơn giản và hiệu năng cao trên Linux. Nó giúp hiện thực hóa triết lý của Docker: “Chạy mọi nơi, nhẹ mọi lúc”. Tuy nhiên, chuyên gia giỏi không chỉ biết dùng mà phải biết khi nào không nên dùng nó để đảm bảo hệ thống luôn ổn định.
- Khái niệm: Hiểu rõ OverlayFS là một union filesystem, giúp bạn nhận biết vai trò của nó trong việc tiết kiệm dung lượng bằng cách cho phép nhiều container chia sẻ chung các layer image.
- Cách thức hoạt động: Nắm vững cơ chế copy-on-write và cấu trúc các lớp, giúp bạn hiểu rõ cách OverlayFS quản lý thay đổi và tối ưu hóa việc sử dụng tài nguyên.
- Tác động đến database: Nhận biết được các tác động tiêu cực về hiệu suất, giúp bạn tránh sử dụng OverlayFS cho dữ liệu database và lựa chọn giải pháp lưu trữ phù hợp hơn.
- Cách cấu hình: Nắm vững quy trình 6 bước để kiểm tra và cấu hình driver OverlayFS, giúp bạn có thể tự mình triển khai và đảm bảo Docker hoạt động với hiệu suất tối ưu.
- Lưu ý quan trọng: Nắm được các phương pháp hay nhất như ưu tiên dùng volume cho database, giúp bạn vận hành Docker một cách ổn định, hiệu quả và tránh các rủi ro về hiệu suất.
- Giới thiệu Vietnix: Biết đến Vietnix là nhà cung cấp VPS uy tín, giúp bạn có một nền tảng được tối ưu cho hiệu suất Docker và OverlayFS.
- Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến OverlayFS Docker.

OverlayFS Docker là gì?
OverlayFS là một union filesystem trên Linux, cho phép Docker chồng nhiều layer hệ thống file chỉ đọc (read-only) của image với một layer ghi (read-write) của container, tạo thành một view hợp nhất mà tiến trình trong container truy cập. Khi container ghi dữ liệu, cơ chế copy-on-write của OverlayFS sẽ sao chép file cần sửa từ lớp bên dưới lên lớp ghi phía trên, giúp nhiều container chia sẻ chung các layer image phía dưới trong khi mỗi container vẫn có không gian ghi riêng.

Lưu ý quan trọng từ chuyên gia: Trong Docker hiện đại (v25+), Docker không còn sử dụng overlay2 theo cơ chế truyền thống mà chuyển sang OverlayFS thông qua containerd snapshotter, hiển thị là overlayfs. Đây không phải driver overlay cũ, mà là bản tiến hóa của overlay2, với hiệu năng và độ ổn định cao hơn.
Để khai thác tối đa hiệu suất của các công nghệ như OverlayFS, việc lựa chọn hạ tầng là yếu tố quyết định. Vietnix Enterprise Cloud cung cấp một nền tảng IaaS chuyên dụng, trang bị CPU AMD EPYC và 100% ổ cứng NVMe Enterprise. Giải pháp này cho phép doanh nghiệp toàn quyền quản trị tài nguyên, tự động hóa qua API và triển khai các ứng dụng đòi hỏi I/O cao với độ trễ thấp nhất.
Cách thức hoạt động của OverlayFS
OverlayFS trong Docker hoạt động bằng cơ chế “union mount”, ghép nhiều thư mục lại thành một cây thư mục hợp nhất mà container nhìn thấy.
- Cấu trúc lowerdir, upperdir và merged: OverlayFS sử dụng một hoặc nhiều thư mục chỉ đọc gọi là lowerdir (thường tương ứng với các layer image) và một thư mục ghi gọi là upperdir (layer read-write của container). Một thư mục hợp nhất merged được mount từ lowerdir và upperdir, đây là điểm mount mà tiến trình bên trong container làm việc, nhìn thấy toàn bộ hệ thống file như một lớp duy nhất.
- Cơ chế copy-on-write khi ghi dữ liệu: Khi container cần ghi vào một file thuộc lowerdir, OverlayFS không sửa trực tiếp file gốc mà thực hiện thao tác copy_up. Bản sao của file được tạo trong upperdir, sau đó mọi lần ghi tiếp theo được thực hiện trên bản sao này. Nhờ vậy, nhiều container có thể dùng chung các file gốc ở lowerdir, trong khi thay đổi của từng container chỉ tồn tại ở upperdir tương ứng, giúp tiết kiệm dung lượng và tách biệt trạng thái giữa các container.
- Quản lý nhiều layer và tác động đến hiệu năng: Với driver overlay2 truyền thống, OverlayFS từng bị giới hạn số lượng lowerdir (khoảng 128 layer), nghĩa là một image Docker có thể gồm nhiều layer nhưng vẫn được hợp nhất thành một view duy nhất ở merged. Tuy nhiên, trong Docker hiện đại sử dụng containerd snapshotter (hiển thị là overlayfs), giới hạn này về mặt thực tế đã được nới lỏng đáng kể, giúp quản lý image nhiều layer hiệu quả và ổn định hơn. Dù vậy, khi số lượng layer tăng cao, việc tra cứu file trên chuỗi lowerdir + upperdir vẫn có thể ảnh hưởng đến hiệu năng, đặc biệt với workload I/O lớn.

Ảnh hưởng của OverlayFS tới database trong Docker
OverlayFS là lựa chọn phù hợp cho đa số workload container, nhưng với database chạy trong Docker, cơ chế copy-on-write và cách tổ chức layer của nó tạo ra một số đặc thù về hiệu năng và cách lưu trữ dữ liệu.
- Overhead ghi dữ liệu do copy-on-write: Database thường phát sinh nhiều thao tác ghi nhỏ, ngẫu nhiên (random write) vào các file dữ liệu và log, trong khi OverlayFS phải thực hiện bước copy_up khi ghi lên các file nằm ở layer bên dưới. Khi file được sao chép từ lowerdir lên upperdir, mọi ghi tiếp theo diễn ra trên bản sao, nhưng quá trình này làm tăng số lượng thao tác I/O và chi phí quản lý inode, tạo thêm độ trễ cho workload database.
- Tích lũy nhiều layer và vấn đề tìm kiếm file: Với driver overlay2, một image có thể sử dụng tới hàng chục hoặc hơn 100 layer và mỗi lần truy cập file, hệ thống file phải duyệt qua chuỗi lowerdir cùng upperdir để xác định vị trí thực của file đó. Khi database đọc/ghi với tần suất cao, việc tra cứu file trên cấu trúc nhiều lớp và metadata phức tạp của OverlayFS có thể làm tăng latency so với việc truy cập trực tiếp trên một filesystem phẳng.
- Tác động tới độ bền và quản lý dữ liệu database: Nếu dữ liệu database được lưu trong writable layer của container (trên OverlayFS) thay vì volume/bind mount, dữ liệu đó gắn chặt với vòng đời container và phụ thuộc vào cơ chế lưu layer của Docker. Khi xóa container hoặc thay đổi storage driver, các layer chứa dữ liệu có thể bị loại bỏ, khiến việc sao lưu, phục hồi và di chuyển dữ liệu trở nên phức tạp, đặc biệt trong môi trường sản xuất.
Kinh nghiệm từ chuyên gia: Lời khuyên của mình là bạn nên tách biệt hoàn toàn giữa ứng dụng và dữ liệu. Đối với Database, hãy sử dụng Docker Volumes hoặc Bind Mounts thay vì ghi trực tiếp lên OverlayFS. Điều này giúp dữ liệu ghi thẳng xuống hệ thống tệp vật lý, loại bỏ chi phí copy-on-write và rủi ro mất dữ liệu khi xóa container. Đây là tiêu chuẩn bắt buộc để tối ưu hiệu suất I/O và đảm bảo an toàn cho hệ thống sản xuất.
Cấu hình và sử dụng OverlayFS driver trong Docker
- Bước 1: Kiểm tra hệ điều hành và kernel có hỗ trợ OverlayFS
- Bước 2: Kiểm tra filesystem nền của Docker host
- Bước 3: Dọn dẹp hoặc sao lưu dữ liệu Docker trước khi chuyển driver
- Bước 4: Cấu hình Docker daemon sử dụng overlay2
- Bước 5: Khởi động lại Docker và xác nhận driver
- Bước 6: Khởi tạo lại image/container và theo dõi hoạt động với OverlayFS
Để cấu hình và sử dụng OverlayFS driver trong Docker, bạn cần kiểm tra điều kiện hệ thống, chọn driver phù hợp và thiết lập trong cấu hình Docker daemon.
Bước 1: Kiểm tra hệ điều hành và kernel có hỗ trợ OverlayFS
OverlayFS là công nghệ dành riêng cho Linux. Để đảm bảo hiệu suất tốt nhất (đặc biệt là với driver overlay2), hệ thống của bạn cần đáp ứng các yêu cầu về Kernel:
- Yêu cầu tối thiểu: Kernel phiên bản 3.18 (cho driver overlay) hoặc 4.0 trở lên (cho overlay2).
- Cách kiểm tra: Chạy lệnh sau trên Terminal:
uname -rNếu kernel của bạn quá cũ (ví dụ < 3.10 trên các bản Linux đời thấp), hãy thực hiện nâng cấp hệ điều hành hoặc Kernel trước khi tiếp tục để tránh các lỗi xung đột hệ thống tệp.
Bước 2: Kiểm tra filesystem nền của Docker host
Thư mục lưu trữ mặc định của Docker là /var/lib/docker. Filesystem tại đây phải hỗ trợ tính năng d_type để OverlayFS hoạt động ổn định.
- Với Docker phiên bản cũ: Kiểm tra bằng lệnh
docker info. Các dòng thông số cần đạt là:Backing Filesystem: extfs hoặc xfs.Supports d_type: true.
- Với Docker phiên bản mới (v25.x trở lên): Docker có thể chỉ hiển thị
Storage Driver: overlayfs. Bạn nên kiểm tra trực tiếp định dạng ổ cứng bằng lệnh:
df -Th /var/lib/docker
Lưu ý quan trọng từ chuyên gia cho XFS: Nếu kết quả trả về là XFS, hãy chạy lệnh xfs_info /var/lib/docker | grep ftype. Nếu thấy ftype=0, bạn bắt buộc phải format lại phân vùng với tùy chọn ftype=1 hoặc chuyển sang ext4 để tránh lỗi không thể khởi động container.
Bước 3: Dọn dẹp hoặc sao lưu dữ liệu Docker trước khi chuyển driver
Trước khi đổi storage driver, bạn cần đánh giá dữ liệu hiện có trong Docker: image, container, volume,… Trường hợp môi trường phát triển/test, bạn có thể chấp nhận xóa toàn bộ dữ liệu bằng cách dừng Docker và xoá thư mục /var/lib/docker, sau đó Docker sẽ khởi tạo lại dữ liệu với driver mới. Nếu môi trường đang có container/image quan trọng, bạn nên commit container thành image, docker save ra file .tar hoặc sử dụng registry nội bộ để đẩy image lên, nhằm có thể import lại sau khi đổi driver.
Bước 4: Cấu hình Docker daemon sử dụng overlay2
Bạn dừng dịch vụ Docker bằng lệnh sudo systemctl stop docker (hoặc lệnh tương đương trên distro đang dùng). Tiếp theo, bạn chỉnh sửa hoặc tạo file /etc/docker/daemon.json với nội dung tối thiểu như sau:{ "storage-driver": "overlay2" }. Nếu file đã tồn tại, bạn chỉ cần bổ sung hoặc cập nhật key “storage-driver” cho phù hợp, đồng thời đảm bảo JSON hợp lệ (có dấu phẩy, ngoặc đúng chuẩn).

Lưu ý
Ngay cả khi bạn cấu hình là overlay2, các phiên bản Docker mới có thể tự động chuyển đổi sang cơ chế overlayfs snapshotter để tối ưu hiệu năng.
Bước 5: Khởi động lại Docker và xác nhận driver
Sau khi lưu file cấu hình, bạn khởi động lại Docker bằng lệnh sudo systemctl start docker. Bạn sử dụng lệnh docker info để kiểm tra phần Storage Driver, nếu hiển thị overlay2 (hoặc overlay tùy cấu hình) và các dòng Backing Filesystem, Supports d_type: true, Native Overlay Diff: true hiển thị như mong muốn là cấu hình đã áp dụng thành công. Trong trường hợp Docker không khởi động được hoặc báo lỗi liên quan đến storage driver, bạn cần xem log dịch vụ (journalctl -u docker) để kiểm tra lỗi mount OverlayFS hoặc lỗi filesystem nền.

Nếu bạn sử dụng Docker phiên bản mới (v25+) trên các hệ điều hành như Ubuntu 24.04, dòng Storage Driver có thể hiển thị là overlayfs đi kèm với driver-type: io.containerd.snapshotter.v1. Đây thực chất là bản nâng cấp của overlay2, mang lại hiệu năng cao và ổn định hơn. Bạn hoàn toàn có thể yên tâm sử dụng.
Bước 6: Khởi tạo lại image/container và theo dõi hoạt động với OverlayFS
Khi driver mới đã sẵn sàng, bạn tiến hành pull lại các image cần dùng (docker pull) hoặc import lại image đã lưu bằng docker load. Bạn chạy lại container như bình thường, sau đó dùng docker inspect và kiểm tra cấu trúc layer trong /var/lib/docker/overlay2 để xác nhận container đang sử dụng các lowerdir, upperdir, merged tương ứng với OverlayFS. Trong quá trình vận hành, bạn theo dõi log, hiệu năng và số lượng inode để đảm bảo OverlayFS hoạt động ổn định, kết hợp thực hiện định kỳ dọn dẹp image/container không dùng để tránh cây layer quá sâu.
Lưu ý khi vận hành Docker với OverlayFS
Khi vận hành Docker với OverlayFS, bạn cần lưu ý cả khía cạnh hiệu năng lẫn cách bố trí dữ liệu để tránh các vấn đề về tốc độ và tài nguyên.
- Ưu tiên dùng overlay2 hoặc overlayfs (snapshotter) tùy theo phiên bản Docker: Với các hệ thống mới như Ubuntu 24.04, việc Docker tự động chọn
overlayfssnapshotter là lựa chọn tối ưu nhất hiện nay .Vì đây là biến thể được khuyến nghị với khả năng quản lý nhiều layer hiệu quả hơn và sử dụng inode tiết kiệm hơn so với overlay - Dùng volume cho workload ghi nhiều (đặc biệt là database): Với các ứng dụng ghi dữ liệu thường xuyên như database, bạn nên lưu dữ liệu trên Docker volume hoặc storage bên ngoài thay vì writable layer trên OverlayFS, nhằm tránh overhead copy-on-write và hạn chế suy giảm hiệu năng.
- Sử dụng storage nhanh cho thư mục Docker data: Bạn nên đặt /var/lib/docker trên ổ SSD hoặc storage có IOPS cao, vì OverlayFS tạo và quản lý nhiều file layer, thao tác đọc/ghi trên storage chậm sẽ ảnh hưởng rõ rệt đến tốc độ build, pull image và khởi chạy container.
- Hạn chế số lượng layer bằng cách tối ưu Dockerfile: Khi viết Dockerfile, bạn nên gộp các lệnh RUN, hạn chế tạo layer không cần thiết, vì mỗi layer bổ sung thêm một lowerdir, làm tăng chi phí tra cứu file và quản lý metadata trên OverlayFS.
- Theo dõi inode và dung lượng trên filesystem nền: Bạn cần thường xuyên kiểm tra số lượng inode còn trống và dung lượng trên filesystem chứa
/var/lib/docker, dọn dẹp image/container không sử dụng (docker system prune) để tránh tình trạng hết inode hoặc đĩa đầy do quá nhiều layer. - Kiểm tra log khi gặp lỗi mount hoặc hiệu năng bất thường: Khi xuất hiện lỗi liên quan đến storage driver (mount overlay thất bại, lỗi I/O, hiệu năng giảm mạnh), bạn nên xem log Docker daemon và kernel (dmesg) để xác định nguyên nhân cụ thể, thay vì chỉ thay đổi driver hoặc cấu hình một cách cảm tính.

Vietnix – Nền tảng VPS tối ưu cho hiệu suất Docker và OverlayFS
Để đảm bảo các ứng dụng container của bạn hoạt động với hiệu suất cao nhất trên nền tảng OverlayFS Docker, việc lựa chọn một hạ tầng máy chủ ảo mạnh mẽ với tốc độ lưu trữ vượt trội là yếu tố then chốt. Bên cạnh Enterprise Cloud, Vietnix cung cấp dịch vụ VPS uy tín mang đến giải pháp lý tưởng cho mọi nhu cầu Docker của bạn. Với công nghệ ổ cứng NVMe tiên tiến, VPS của Vietnix đảm bảo tốc độ đọc/ghi dữ liệu cực nhanh, giúp giảm thiểu độ trễ từ các thao tác copy-on-write của OverlayFS, tăng tốc quá trình build/pull image và khởi chạy container.
Thông tin liên hệ:
- Website: https://vietnix.vn/
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh
Câu hỏi thường gặp
Sự khác biệt chính giữa driver overlay và overlay2 trong Docker là gì?
Sự khác biệt chính là overlay2 hiệu quả hơn trong việc sử dụng inode và hỗ trợ nhiều layer hơn (lên đến 128) so với overlay. overlay2 là driver được khuyến nghị và sử dụng mặc định trên hầu hết các bản phân phối Linux hiện đại.
Làm thế nào để tối ưu hóa Dockerfile nhằm hạn chế số lượng layer?
Để hạn chế số lượng layer, bạn nên gộp các lệnh RUN có liên quan lại với nhau bằng cách sử dụng toán tử &&. Ví dụ, thay vì viết nhiều lệnh RUN riêng lẻ để cài đặt các gói, bạn nên viết RUN apt-get update && apt-get install -y package1 package2 && rm -rf /var/lib/apt/lists/*.
Nếu tôi chuyển storage driver từ aufs sang overlay2, các image và container hiện có của tôi sẽ như thế nào?
Khi bạn chuyển storage driver, tất cả các image và container hiện có được tạo bởi driver cũ sẽ không còn truy cập được nữa. Đó là lý do tại sao việc sao lưu (ví dụ: đẩy image lên registry, dùng docker save) trước khi thay đổi là cực kỳ quan trọng.
OverlayFS Docker là một storage driver mạnh mẽ và hiệu quả, đóng vai trò nền tảng cho cách Docker quản lý các lớp image và container. Tuy nhiên, cần lưu ý những tác động của OverlayFS đối với các workload ghi nhiều như database và áp dụng các thực hành tốt nhất như sử dụng volume và tối ưu Dockerfile để đảm bảo hệ thống hoạt động ổn định và đáng tin cậy.
THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM
Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày














