Image, Container, Volume và Network trong Docker là gì? Hiểu rõ 4 khái niệm cốt lõi
G
GnurtLập trình viên full-stack
7 phút đọc
Trong bài này
Khi làm việc với Docker, bạn sẽ thường xuyên gặp bốn khái niệm: Image, Container, Volume và Network. Hiểu đơn giản, Image là bản thiết kế, Container là Image đang chạy. Volume giữ dữ liệu, còn Network kết nối các Container với nhau. Bốn khái niệm này đi theo một thứ tự: có bản thiết kế rồi mới có bản đang chạy, và bản đang chạy sinh ra hai vấn đề, dữ liệu và kết nối, mà Volume với Network giải quyết. Nếu bạn mới bắt đầu, hãy đọc Docker là gì trước.
Image là gì?
Image là một bản thiết kế chỉ đọc: bạn dùng nó để tạo Container, không sửa trực tiếp lên nó. Muốn thay đổi, bạn sửa công thức (Dockerfile) rồi tạo lại Image mới. Dockerfile là một tập tin văn bản ghi lại từng bước làm ra Image.
Bạn có thể hình dung Image như một công thức nấu ăn đã chuẩn bị sẵn. Từ cùng một công thức, bạn có thể tạo ra nhiều món ăn theo cùng một cách chế biến, và các Container được tạo từ cùng một Image cũng có điểm xuất phát giống nhau.
Image được tạo thành từ nhiều lớp (layer), mỗi lớp bổ sung một phần nội dung như thư viện hoặc mã nguồn. Docker có thể tái sử dụng các lớp này để tăng tốc quá trình build Image.
Một Image tạo ra nhiều Container giống nhau.
Container là gì?
Container là một Image đang chạy: ứng dụng của bạn chạy bên trong nó.
Tạo, dừng, xóa Container chỉ mất vài giây, vì Container dùng chung nhân hệ điều hành (kernel) của máy tính bạn đang dùng, không cần khởi động một hệ điều hành riêng hoàn chỉnh như máy ảo. Máy ảo là một chiếc máy tính ảo hoàn chỉnh chạy bên trong máy thật và có hệ điều hành riêng. Từ một Image, bạn có thể tạo và chạy nhiều Container cùng lúc.
Một Container thường ở một trong hai trạng thái chính: đang chạy hoặc đã dừng. Xóa Container thì bản đang chạy biến mất, nhưng Image vẫn còn để tạo Container mới.
Volume là gì?
Container bị xóa thì dữ liệu trong nó cũng mất theo. Đây là lúc Volume phát huy tác dụng. Volume là nơi lưu trữ nằm ngoài Container, do Docker quản lý. Dữ liệu bạn ghi vào Volume không nằm trong Container.
Nhờ vậy, dữ liệu vẫn còn ngay cả khi bạn xóa Container. Khi tạo Container mới và gắn lại Volume cũ, ứng dụng có thể tiếp tục sử dụng dữ liệu trước đó.
Network là gì?
Một ứng dụng đơn giản có thể chỉ cần một Container. Nhưng với các ứng dụng thực tế, nhiều thành phần thường phải kết nối với nhau, chẳng hạn ứng dụng web cần truy vấn cơ sở dữ liệu. Network là một mạng riêng cho các Container, sinh ra cho chuyện đó: các Container trong cùng mạng có thể gọi nhau bằng tên, Docker sẽ tự tìm đúng địa chỉ, nên bạn không cần ghi nhớ địa chỉ IP. Ví dụ, Container web có thể gọi Container cơ sở dữ liệu bằng tên db. Mạng riêng này chỉ tồn tại bên trong Docker, người ngoài internet không truy cập trực tiếp được.
Bốn khái niệm nối với nhau thế nào?
Hãy xem một ví dụ đầy đủ: một ứng dụng web và MySQL (một hệ quản trị cơ sở dữ liệu phổ biến).
Hãy tưởng tượng bạn đang xây dựng một ứng dụng web sử dụng MySQL. Trước tiên, bạn tạo Container web từ Image của ứng dụng và một Container MySQL từ Image của MySQL. Hai Container này kết nối với nhau qua Network, trong khi dữ liệu của MySQL được lưu trong Volume.
Khi người dùng truy cập website, Container web sẽ nhận yêu cầu và truy vấn MySQL qua Network. MySQL đọc dữ liệu từ Volume rồi trả kết quả về cho Container web.
Nếu Container MySQL bị xóa và tạo lại, bạn chỉ cần gắn lại Volume cũ. Dữ liệu vẫn còn và Container web có thể tiếp tục kết nối đến dịch vụ MySQL bằng tên đã dùng trước đó.
Container web nối với Container cơ sở dữ liệu qua Network, còn dữ liệu của cơ sở dữ liệu được giữ trong Volume.
Nhìn nhanh bằng vài lệnh
Bạn có thể mở Terminal và chạy thử 4 lệnh sau để xem máy mình đang có gì. Chúng chỉ để xem, không thay đổi gì:
docker images — Xem danh sách Image đã có trên máy.
docker ps — Xem các Container đang chạy.
docker volume ls — Xem danh sách Volume.
docker network ls — Xem danh sách Network.
Những hiểu nhầm thường gặp
Sai
Đúng
“Image và Container là một thứ.”
“Image là bản thiết kế. Container là Image đang chạy, được tạo ra từ Image đó.”
“Xóa Container là mất hết dữ liệu.”
“Xóa Container chỉ làm mất dữ liệu nằm trong Container. Dữ liệu ghi vào Volume vẫn còn sau khi Container bị xóa, vì Volume nằm ngoài Container.”
“Volume là một thư mục bình thường trong Container.”
“Volume không phải là một thư mục bình thường trong Container. Volume do Docker quản lý và nằm ngoài Container, nên dữ liệu trong đó không mất khi Container bị xóa. Bạn có thể hình dung nó như một ổ đĩa gắn ngoài: Container dừng thì gắn vào, xóa Container thì ổ đĩa vẫn còn.”
“Mạng Docker là internet.”
“Mạng Docker không phải là internet. Đó là mạng riêng để các Container nói chuyện với nhau, chỉ những Container trong cùng mạng mới gọi được nhau.”
Câu hỏi thường gặp
Nhiều Container có thể dùng chung một Image không?
Có. Một Image có thể tạo ra nhiều Container. Mỗi Container chạy riêng. Thay đổi trong một Container không làm thay đổi Image, và không ảnh hưởng Container khác.
Container có cần Network không?
Không phải lúc nào cũng cần. Một Container có thể chạy độc lập, không cần kết nối với Container nào khác. Nhưng khi nó muốn nói chuyện với Container khác thì cần chung một Network.
Điều gì xảy ra với dữ liệu nếu không dùng Volume?
Dữ liệu sẽ chỉ nằm trong lớp ghi tạm thời của Container. Khi bạn xóa Container, lớp này cũng bị xóa theo và dữ liệu trong đó sẽ mất. Nếu muốn giữ dữ liệu lâu dài, bạn phải dùng Volume.
Volume và Image có giống nhau không?
Không. Image chứa mã nguồn của ứng dụng và tất cả những gì ứng dụng cần để chạy (thư viện, cấu hình…), đã được đóng gói sẵn theo hướng dẫn trong Dockerfile. Volume chỉ giữ dữ liệu. Khi dữ liệu trong Volume thay đổi, Image không thay đổi theo.
Kết luận
Quay lại ví dụ lúc nãy: Image của ứng dụng tạo ra Container web, Image MySQL tạo ra Container cơ sở dữ liệu, Volume giữ dữ liệu, Network nối hai Container lại. Đây là bốn thành phần quan trọng giúp bạn hiểu cách một ứng dụng Docker được tạo ra, lưu trữ dữ liệu và kết nối giữa các dịch vụ với nhau.
Chỉ cần nhớ: muốn chạy thứ gì thì tìm Image của nó, muốn giữ dữ liệu thì dùng Volume, muốn hai phần nói chuyện với nhau thì cho chung một Network. Bốn lệnh ở mục trên là đủ để bạn tự xem máy mình đang có gì. Hãy thử chạy docker images và docker ps trên máy của bạn ngay bây giờ để xem bạn đã có gì.
Bài tiếp theo sẽ dùng đúng bốn khái niệm này để viết một Dockerfile và docker compose (công cụ giúp chạy nhiều Container cùng lúc bằng một file cấu hình) cho một ứng dụng web có cơ sở dữ liệu, từ đầu đến cuối trong một dự án thật.
Nguồn tham khảo
Các liên kết dưới đây đã được kiểm tra và xác nhận tải được vào ngày 2/11/2026.
Bạn có thể sử dụng tài khoản Google để bình luận. Google chỉ chia sẻ tên và địa chỉ email đã xác minh để hiển thị tên của bạn. Bạn có thể đăng xuất bất cứ lúc nào.
Docker là gì? Docker là một nền tảng mở giúp bạn đóng gói, vận chuyển và chạy ứng dụng. Ứng dụng chạy trong một môi trường tách biệt gọi là container. Nói ngắn gọn, Docker giúp một ứng dụng chạy giống nhau trên nhiều máy khác nhau. Mọi thứ ứng dụng cần đều được đóng...
Chiều nay, 04/11/2026, GitHub gặp sự cố ảnh hưởng tới Pull Request, Git Operations, Issues, Actions và API Requests. Sự cố bắt đầu lúc 16:49 giờ Việt Nam và đã được giải quyết lúc 18:50 giờ Việt Nam (11:50 UTC) cùng ngày. Chuyện gì đang xảy ra? Theo trang trạng thái chính thức của GitHub,...
Bình luận
Bạn có thể sử dụng tài khoản Google để bình luận. Google chỉ chia sẻ tên và địa chỉ email đã xác minh để hiển thị tên của bạn. Bạn có thể đăng xuất bất cứ lúc nào.
Đăng nhập bằng GoogleChưa có bình luận nào. Hãy là người đầu tiên!