Docker là gì? Container giải thích cho người không lập trình
Docker là công cụ đóng gói một ứng dụng cùng mọi thứ nó cần để chạy, gồm phiên bản ngôn ngữ phù hợp, thư viện, công cụ hệ thống và cài đặt, thành một đơn vị chuẩn gọi là container. Một container chạy giống nhau trên laptop của lập trình viên, máy chủ thử nghiệm hay host đám mây, và nhờ đó vấn đề kinh điển "nhưng trên máy tôi thì chạy được mà" không còn xảy ra nữa. Công thức để build một container là một file văn bản ngắn gọi là Dockerfile.
Vì sao Docker quan trọng khi bạn xây dựng bằng AI
Nếu ứng dụng của bạn có backend (một API viết bằng Python, Node, C# hay Java), nó phải chạy ở một nơi nào đó với đúng phần mềm được cài đặt. Docker là cách phổ biến nhất để làm điều này lặp lại được.
- Triển khai backend. Nhiều host, trong đó có Mythex, triển khai backend bằng cách build một container từ Dockerfile. Trong Mythex, khi yêu cầu "một C# Web API" hoặc "một backend Java", bạn nhận được ứng dụng cùng một Dockerfile, và khi xuất bản, Mythex build image và triển khai nó (backend API).
- Rời khỏi một nền tảng. Nếu bạn xuất một ứng dụng xây bằng AI, Dockerfile giúp việc chạy nó trên host khác dễ hơn nhiều. Xem cách xuất và tự lưu trữ một ứng dụng xây bằng AI.
- Làm việc với lập trình viên. Một lập trình viên tham gia dự án của bạn có thể khởi động toàn bộ ứng dụng chỉ bằng một hai lệnh, thay vì mất cả ngày để cài đặt mọi thứ.
Một ví dụ đời thường: container vận chuyển
Trước khi có container vận chuyển tiêu chuẩn, hàng hóa được xếp từng món một (bao tải, thùng phuy, thùng gỗ), và mỗi cảng xử lý một kiểu. Chiếc container thép tiêu chuẩn đã thay đổi điều đó: đóng gói một lần, và bất kỳ con tàu, cần cẩu, tàu hỏa hay xe tải nào cũng có thể vận chuyển nó mà không cần quan tâm bên trong có gì.
Docker làm điều tương tự với phần mềm:
- Dockerfile là danh sách đóng gói và hướng dẫn.
- Image là container đã được niêm phong và đóng gói.
- Container đang chạy là chiếc hộp đó được đưa vào hoạt động trên tàu — ở đây là một server.
- Docker Engine là cần cẩu và con tàu: phần mềm trên server biết cách chạy bất kỳ container nào.
Docker hoạt động như thế nào
| Thành phần | Đó là gì |
|---|---|
| Dockerfile | File văn bản chứa các bước hướng dẫn để build image. |
| Image | Gói chỉ đọc: nền tảng hệ điều hành, runtime, thư viện và code của bạn. |
| Container | Một thực thể đang chạy của image, được cô lập khỏi các ứng dụng khác trên cùng máy. |
| Registry | Nơi lưu trữ và chia sẻ image, như Docker Hub hoặc registry của một nhà cung cấp đám mây. |
| Docker Engine | Dịch vụ chạy nền, build image và chạy container. Miễn phí và mã nguồn mở. |
| Docker Desktop | Ứng dụng cho Mac, Windows và Linux, đóng gói engine cùng giao diện đồ họa. |
Container so với máy ảo: máy ảo giả làm một máy tính riêng biệt với hệ điều hành riêng, nên nặng và khởi động chậm. Container dùng chung nhân hệ điều hành của host và chỉ cô lập ứng dụng cùng các tệp của nó, nên thường khởi động trong vài giây và dùng ít bộ nhớ hơn nhiều. Nhiều container có thể chạy song song trên cùng một server.
Ví dụ minh họa: một API Python nhỏ
Giả sử công cụ xây dựng bằng AI của bạn đã tạo một backend FastAPI bằng Python cho ứng dụng đặt lịch. Dockerfile có thể trông như sau:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Từng dòng một:
| Dòng | Việc nó làm |
|---|---|
FROM python:3.12-slim | Bắt đầu từ một image chính thức đã cài sẵn Python 3.12. |
WORKDIR /app | Làm việc trong thư mục /app bên trong container. |
COPY requirements.txt . và RUN pip install ... | Sao chép danh sách thư viện và cài đặt chúng. |
COPY . . | Sao chép code của chính ứng dụng vào. |
EXPOSE 8000 | Ghi chú rằng ứng dụng lắng nghe ở cổng 8000. |
CMD [...] | Lệnh khởi động web server khi container chạy. |
Nói đơn giản: "Bắt đầu với Python 3.12. Cài các thư viện liệt kê trong requirements.txt. Sao chép code vào. Khởi động web server ở cổng 8000."
Sau đó, một lập trình viên (hoặc nền tảng hosting) chạy hai lệnh:
docker build -t booking-api .
docker run -p 8000:8000 booking-api
Lệnh đầu tiên build image và đặt tên là booking-api. Lệnh thứ hai khởi động một container và nối cổng 8000 trên máy với cổng 8000 bên trong container. API lúc này đang chạy, theo cách giống hệt như trên bất kỳ server nào có Docker.
Hãy để ý những gì không có trong image: mật khẩu và API key. Chúng được truyền vào khi container khởi động, dưới dạng biến môi trường, nhờ đó cùng một image có thể chạy ở môi trường thử nghiệm và production với các cài đặt khác nhau.
Thuật ngữ quan trọng
| Thuật ngữ | Ý nghĩa |
|---|---|
| Container | Một gói ứng dụng và các phụ thuộc của nó, được cô lập và đang chạy. |
| Image | Khuôn mẫu để khởi động một container. |
| Base image (image nền) | Điểm xuất phát trong dòng FROM của Dockerfile, như python:3.12-slim hoặc node:22. |
| Layer (lớp) | Mỗi bước trong Dockerfile thêm một lớp được cache, giúp build lại nhanh hơn. |
| Port mapping (ánh xạ cổng) | Nối một cổng trên host với một cổng bên trong container. |
| Volume | Nơi lưu trữ vẫn còn khi container bị thay thế. Bản thân container thì có thể bỏ đi. |
| Docker Compose | File mô tả nhiều container chạy cùng nhau, như một API cộng với một cơ sở dữ liệu. |
| Kubernetes | Hệ thống chạy nhiều container trên nhiều server. Hầu hết ứng dụng nhỏ không cần nó. |
Những hiểu lầm thường gặp
- "Docker là máy ảo." Nó nhẹ hơn: các container dùng chung nhân của host.
- "Dữ liệu lưu trong container thì an toàn." Container được thiết kế để bị bỏ đi và thay thế. Bất cứ thứ gì phải tồn tại lâu dài, như dữ liệu người dùng hay tệp tải lên, cần nằm trong cơ sở dữ liệu, lưu trữ tệp hoặc một volume.
- "Đặt bí mật trong Dockerfile không sao vì nó là riêng tư." Image được chia sẻ và đẩy lên registry. Hãy truyền bí mật vào lúc chạy.
- "Docker khiến ứng dụng an toàn." Cô lập có giúp ích, nhưng một container chạy phần mềm lỗi thời với cài đặt yếu vẫn dễ bị tấn công.
- "Ứng dụng nào cũng cần Docker." Một trang tĩnh hay frontend đơn giản thường được host dưới dạng tệp thuần túy, hoàn toàn không cần container.
- "Docker Desktop miễn phí cho mọi người." Engine thì miễn phí; theo điều khoản của Docker, Docker Desktop yêu cầu đăng ký trả phí đối với các công ty lớn hơn.
Nên yêu cầu công cụ xây dựng AI của bạn điều gì
- "Ứng dụng này có cần Dockerfile không? Nếu có, hãy giải thích từng dòng bằng tiếng Việt đơn giản."
- "Dùng một base image nhỏ, chính thức, và ghim phiên bản ngôn ngữ."
- "Giữ bí mật ra khỏi image. Đọc chúng từ biến môi trường khi chạy."
- "Đảm bảo tệp tải lên và dữ liệu được lưu trong cơ sở dữ liệu hoặc lưu trữ tệp, không nằm trong container."
- "Thêm một file Docker Compose để lập trình viên có thể chạy frontend, API và cơ sở dữ liệu ở máy cục bộ chỉ bằng một lệnh."
- "Thêm một endpoint kiểm tra sức khỏe để host biết API có đang hoạt động không."
Docker trong Mythex
Bạn không cần cài đặt hay chạy Docker để dùng Mythex. Dự án của bạn chạy trong một sandbox đám mây riêng, và khi bạn yêu cầu một backend cần container, ví dụ C#, Java hoặc một dịch vụ Node hay Python tùy chỉnh, Mythex sẽ viết ứng dụng cùng một Dockerfile, xem trước trong sandbox và triển khai khi bạn xuất bản, không cần thiết lập hosting nào (cách lựa chọn công nghệ). Với gói Pro, bạn có thể xuất dự án hoặc đồng bộ nó với GitHub và mang Dockerfile theo. Về cách backend và frontend kết hợp với nhau, xem frontend so với backend.
Câu hỏi thường gặp
Docker là gì, nói đơn giản?
Docker là công cụ đóng gói một ứng dụng cùng mọi thứ nó cần để chạy (môi trường ngôn ngữ, thư viện và cài đặt) thành một đơn vị chuẩn gọi là container. Container chạy giống nhau trên laptop, máy chủ thử nghiệm hay host đám mây.
Image Docker khác container như thế nào?
Image là khuôn mẫu đã đóng gói, chỉ đọc: ứng dụng và các phụ thuộc của nó, được build từ một Dockerfile. Container là một bản đang chạy của image đó. Bạn có thể khởi động nhiều container từ cùng một image.
Docker có phải là máy ảo không?
Không. Máy ảo giả lập cả một máy tính với hệ điều hành riêng. Container dùng chung nhân hệ điều hành của máy host và chỉ cô lập ứng dụng, nên khởi động nhanh hơn và tốn ít bộ nhớ hơn.
Docker có miễn phí không?
Docker Engine, phần lõi để chạy container, là miễn phí và mã nguồn mở. Theo điều khoản của Docker tính đến tháng 9 năm 2026, Docker Desktop miễn phí cho các dự án mã nguồn mở phi thương mại và cho các công ty có dưới 250 nhân viên và doanh thu hằng năm dưới 10 triệu USD; các công ty lớn hơn cần đăng ký trả phí.
Tôi có cần học Docker để xây ứng dụng bằng AI không?
Thường là không. Nhiều công cụ xây dựng bằng AI tự xử lý container cho bạn. Nên biết Dockerfile là gì để hiểu cách một backend được đóng gói, và để có thể chạy hoặc đưa ứng dụng lên một nơi khác nếu bạn xuất nó ra.