MinIO Docker: Hướng dẫn thiết lập bộ nhớ đối tượng tương thích S3
Chạy MinIO với Docker để có bộ nhớ đối tượng tương thích S3 cho phát triển cục bộ, bao gồm thiết lập, volumes bền vững, khắc phục sự cố và khi nào nên dùng chế độ phân tán.
Bạn cần bộ nhớ đối tượng cho phát triển nhưng không muốn thiết lập và trả tiền cho AWS S3?
MinIO cung cấp bộ nhớ tương thích S3 chạy ở bất cứ đâu - trên laptop, máy ảo, hoặc cụm Kubernetes. Nó là mã nguồn mở, nghĩa là độc lập nhà cung cấp, và bạn sẽ không nhận hóa đơn bất ngờ vào cuối tháng. Kết hợp với Docker, chạy MinIO còn dễ hơn vì bạn có thể khởi tạo máy chủ lưu trữ trong vài giây mà không cần cài trực tiếp gì lên máy.
Container Docker giữ MinIO tách biệt với hệ thống của bạn đồng thời cho phép bạn kiểm soát hoàn toàn cấu hình và độ bền dữ liệu. Bạn có thể kiểm thử API S3 cục bộ, mô phỏng thiết lập lưu trữ production, hoặc chạy lưu trữ đối tượng gọn nhẹ cho các dự án nhỏ.
Trong bài viết này, tôi sẽ hướng dẫn bạn chạy MinIO với Docker, xác minh hoạt động và cấu hình các tùy chọn thiết lập phổ biến nhất.
Nếu bạn hoàn toàn mới với Docker, hãy dành một buổi chiều thứ Bảy để nắm vững nền tảng - khóa học Introduction to Docker của DataCamp sẽ giúp bạn bắt đầu.
Yêu cầu tiên quyết
Bạn cần ba thứ để chạy MinIO với Docker.
Cài đặt và chạy Docker trên máy của bạn. Bạn có thể xác minh bằng cách chạy docker --version trong terminal. Nếu trả về số phiên bản, bạn đã sẵn sàng.
Nắm cơ bản về các lệnh Docker. Bạn nên biết cách khởi động/dừng container, xem logs và làm việc với images Docker. Nếu bạn từng chạy docker run hoặc dùng Docker Compose, là ổn.
Một thư mục cục bộ cho lưu trữ bền vững. MinIO cần nơi lưu dữ liệu bên ngoài container. Tạo một thư mục trống trên máy host - ví dụ ~/minio/data là phù hợp.
Vậy là xong. Danh sách ngắn gọn, nhưng hãy chắc chắn bạn đáp ứng hết trước khi tiếp tục.
Cách chạy MinIO với Docker (Thiết lập single-node)
Thiết lập MinIO single-node chạy một phiên bản MinIO trong container Docker và lưu toàn bộ dữ liệu ở một nơi.
Thiết lập này phù hợp cho phát triển, thử nghiệm, và các khối lượng công việc production quy mô nhỏ nơi bạn không cần tính sẵn sàng cao hay lưu trữ phân tán. Bạn có đầy đủ khả năng tương thích API S3 mà không cần phức tạp hóa với nhiều node.
Chạy MinIO với Docker Run
Lệnh docker run khởi động MinIO trong container mới với mọi thứ cấu hình trong một dòng.
Đây là lệnh cơ bản:
docker run -p9000:9000 -p9001:9001 \--name minio \-v ~/minio/data:/data \-e"MINIO_ROOT_USER=admin"\-e"MINIO_ROOT_PASSWORD=password123"\
quay.io/minio/minio server /data --console-address ":9001"Được hỗ trợ bởi
Chạy MinIO với docker run
Hãy cùng phân tích từng phần làm gì.
Cổng 9000 là endpoint API nơi ứng dụng của bạn kết nối để tải lên và tải xuống tệp. Đây là nơi các client tương thích S3 gửi yêu cầu.
Cổng 9001 là nơi đặt web console để bạn quản lý buckets, thiết lập quyền và giám sát lưu trữ. Bạn sẽ dùng cổng này để xác minh MinIO chạy đúng.
Tham số -v ~/minio/data:/data ánh xạ thư mục cục bộ của bạn tới vị trí lưu trữ trong container. Mọi thứ MinIO lưu sẽ nằm trong ~/minio/data trên máy host. Khi bạn dừng hoặc xóa container, dữ liệu vẫn an toàn trong thư mục này.
Biến môi trường đặt thông tin xác thực truy cập. MINIO_ROOT_USER là tên người dùng admin và MINIO_ROOT_PASSWORD là mật khẩu. Đây là thông tin bạn dùng để đăng nhập web console và cấu hình truy cập API.
Đối số server /data yêu cầu MinIO chạy ở chế độ server và dùng /data làm thư mục lưu trữ. Tham số --console-address ":9001" chỉ định cổng lắng nghe của web console.
Có một cách khác để chạy MinIO rất phù hợp nếu bạn không thích các lệnh terminal dài nhiều dòng.
Lưu ý: MinIO không còn cập nhật hình ảnh Docker Hub và Quay của họ (kể từ tháng 10/2025). Mã trong bài viết này vẫn hoạt động cho phát triển cục bộ, nhưng cho môi trường production, hãy cân nhắc các lựa chọn được duy trì như image MinIO của Chainguard (cgr.dev/chainguard/minio:latest).
Chạy MinIO với Docker Compose
Docker Compose cho phép bạn định nghĩa thiết lập MinIO trong tệp YAML thay vì gõ các lệnh dài.
Điều này giúp cấu hình của bạn có thể lặp lại và kiểm soát phiên bản. Bạn có thể chia sẻ tệp với nhóm, commit vào git, và khởi động lại MinIO với cùng thiết lập mỗi lần.
Tạo tệp docker-compose.yml:
services:minio:image: quay.io/minio/minio
container_name: minio
ports:-"9000:9000"-"9001:9001"environment:MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
volumes:- ./minio/data:/data
command: server /data --console-address ":9001"Được hỗ trợ bởi
Cấu trúc phản chiếu lệnh docker run nhưng sắp xếp mọi thứ thành các khối có tên. Cổng, biến môi trường và volumes đều có khối riêng.
Ánh xạ volume hoạt động tương tự - ./minio/data:/data tạo thư mục trong thư mục hiện tại của bạn và mount vào container. ./ nghĩa là tương đối với nơi tệp docker-compose.yml này nằm.
Compose phù hợp hơn cho phát triển vì bạn có thể thêm healthcheck, chính sách khởi động lại và nhiều dịch vụ trong cùng tệp. Nếu sau này cần thêm cơ sở dữ liệu hay dịch vụ khác cạnh MinIO, bạn chỉ cần thêm mục dưới services:.
Cách truy cập và xác minh MinIO đang chạy
Giờ MinIO đã chạy, bạn nên xác nhận nó khởi động đúng trước khi dùng cho lưu trữ.
Có hai cách xác minh: web console để kiểm tra trực quan và MinIO client cho xác minh qua dòng lệnh.
Dùng web console của MinIO
Mở trình duyệt và truy cập http://localhost:9001.
Bạn sẽ thấy màn hình đăng nhập yêu cầu thông tin xác thực:
Giao diện web MinIO
Bạn có thể đăng nhập bằng thông tin đã cung cấp qua biến môi trường - admin/password123 trong ví dụ của tôi.
Sau khi đăng nhập, bạn sẽ vào bảng điều khiển MinIO. Trang chính hiển thị mức sử dụng lưu trữ, số lượng bucket và tình trạng hệ thống. Thanh bên trái có các tùy chọn tạo bucket, quản lý người dùng và xem số liệu.
Tạo bucket qua giao diện web MinIO
Tạo một bucket thử để xác minh mọi thứ hoạt động. Nhấp "Buckets" ở thanh bên, sau đó "Create Bucket." Đặt tên, chẳng hạn test-bucket rồi nhấp tạo. Nếu bucket xuất hiện trong danh sách, MinIO đang chạy đúng và lưu dữ liệu.
Tạo bucket qua giao diện web MinIO
Dùng MinIO client (mc)
MinIO client là công cụ dòng lệnh cho phép bạn tương tác với MinIO tương tự AWS CLI.
Nếu bạn thấy test.txt trong kết quả, bạn đã thiết lập chính xác.
Liệt kê tệp trong bucket
Dưới đây là một số gợi ý khắc phục sự cố nhanh nếu mọi thứ không hoạt động:
Kiểm tra container có đang chạy với docker ps. Nếu bạn không thấy container tên minio thì nó chưa khởi động hoặc đã crash.
Xem logs với docker logs minio. Tìm lỗi về cổng đã dùng hoặc vấn đề quyền trên thư mục dữ liệu.
Nếu bạn không truy cập được web console, xác minh các cổng không bị chặn bằng cách kiểm tra docker port minio. Bạn nên thấy cả 9000 và 9001 được ánh xạ đúng.
Nếu gặp lỗi quyền trên thư mục dữ liệu, chạy chmod -R 755 ~/minio/data để khắc phục vấn đề truy cập.
Lưu trữ bền vững và Data Volumes
Mặc định container là tạm thời - khi bạn xóa container, mọi thứ bên trong sẽ biến mất.
MinIO lưu trữ đối tượng, metadata và tệp cấu hình. Nếu bạn không thiết lập lưu trữ bền vững đúng cách, bạn sẽ mất toàn bộ dữ liệu ngay khi khởi động lại hoặc xóa container.
Dùng volumes cục bộ với Docker
Docker volumes và bind mounts giữ dữ liệu của bạn an toàn bên ngoài container.
Khi bạn dùng -v ~/minio/data:/data hoặc ánh xạ volume trong Docker Compose, MinIO ghi mọi thứ vào máy host. Container đọc/ghi tệp tới /data, nhưng các tệp thực sự nằm ở ~/minio/data trên host.
Khi bạn dừng, xóa container, thậm chí xóa image - dữ liệu vẫn ở ~/minio/data. Khởi động container MinIO mới trỏ tới cùng thư mục và toàn bộ buckets, đối tượng, thiết lập sẽ trở lại như cũ.
Nếu bạn không ánh xạ volume, MinIO dùng hệ thống tệp nội bộ của container. Mọi thứ vẫn hoạt động cho tới khi bạn dừng container. Khi khởi động lại, MinIO bắt đầu như mới: không có bucket, không đối tượng, không cấu hình.
Ví dụ compose tôi đã trình bày trước đó tạo thư mục minio/data ngay tại nơi đặt tệp compose:
Thư mục dữ liệu MinIO
Lỗi lưu trữ thường gặp
Chạy mà không có volume là lỗi phổ biến nhất.
Bạn khởi động MinIO, tải lên tệp, tạo bucket và mọi thứ có vẻ ổn. Rồi bạn khởi động lại container để cập nhật hoặc đổi cấu hình. Tất cả dữ liệu biến mất vì được lưu trong container, không phải trên host.
Luôn kiểm tra lệnh Docker hoặc tệp Compose có ánh xạ volume trước khi đưa dữ liệu thật vào MinIO.
Vấn đề quyền xảy ra khi Docker không thể ghi vào thư mục mount.
Tiến trình MinIO trong container chạy dưới một người dùng cụ thể. Nếu người dùng đó không có quyền ghi trên thư mục host, MinIO sẽ crash khi khởi động hoặc thất bại âm thầm khi lưu đối tượng.
Bạn có thể khắc phục bằng cách đảm bảo thư mục dữ liệu có thể ghi:
Tóm lại, thiết lập volumes đúng ngay từ đầu và bạn sẽ không phải lo mất dữ liệu.
Biến môi trường và cấu hình cơ bản
MinIO đọc cấu hình từ các biến môi trường khi khởi động.
Điều này nghĩa là bạn có thể thay đổi hành vi của MinIO mà không cần chỉnh sửa tệp cấu hình hay rebuild container. Bạn đặt các biến này trong lệnh docker run hoặc trong tệp Docker Compose.
Access key và thông tin xác thực
MinIO yêu cầu hai biến môi trường để xác thực: MINIO_ROOT_USER và MINIO_ROOT_PASSWORD.
Chúng tạo tài khoản quản trị gốc có toàn quyền trên phiên bản MinIO của bạn. Người dùng root có thể tạo bucket, quản lý người dùng khác, đặt chính sách và truy cập mọi đối tượng được lưu.
Đặt chúng như sau khi docker run:
-e"MINIO_ROOT_USER=admin"\-e"MINIO_ROOT_PASSWORD=your-secure-password"Được hỗ trợ bởi
Hoặc trong Docker Compose:
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: your-secure-passwordĐược hỗ trợ bởi
Đừng dùng thông tin mặc định trong production. Ví dụ trong bài dùng admin và password123 cho đơn giản, nhưng đây là lựa chọn tệ cho triển khai thực tế.
Hãy chọn mật khẩu mạnh với tối thiểu 8 ký tự. Tốt hơn, dùng thông tin được tạo ngẫu nhiên và lưu trong trình quản lý mật khẩu hoặc hệ thống quản lý secrets.
Đừng hardcode thông tin xác thực trong tệp Docker Compose mà bạn commit vào kiểm soát phiên bản. Hãy dùng tệp môi trường:
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}Được hỗ trợ bởi
Sau đó tạo tệp .env với thông tin thực và thêm vào .gitignore.
Cấu hình cổng và mạng
MinIO cần hai cổng để hoạt động đúng.
Cổng 9000 xử lý API S3. Ứng dụng của bạn gửi yêu cầu lưu và truy xuất đối tượng tới cổng này. Tất cả client tương thích S3 kết nối qua đây.
Cổng 9001 phục vụ web console. Đây là giao diện trình duyệt để bạn quản lý MinIO qua GUI.
Giờ API của MinIO ở http://localhost:9090 và console ở http://localhost:9091. Container vẫn dùng 9000 và 9001 bên trong, nhưng bên ngoài bạn truy cập qua cổng khác.
Các lệnh này giúp bạn kiểm tra cổng nào đang được dùng trước khi khởi động MinIO:
Nếu bạn chạy nhiều phiên bản MinIO trên cùng máy, hãy gán mỗi phiên bản ánh xạ cổng riêng để không xung đột.
Chạy MinIO ở chế độ phân tán với Docker
Chế độ phân tán chạy MinIO trên nhiều máy chủ với nhiều ổ đĩa để có tính sẵn sàng cao và dư thừa dữ liệu.
Bạn không cần điều này cho phát triển hoặc thử nghiệm. Chế độ single-node xử lý tốt hầu hết trường hợp. Bỏ qua phần này trừ khi bạn lên kế hoạch triển khai production cần trực tuyến ngay cả khi máy chủ gặp sự cố.
Khi nào nên dùng MinIO phân tán
Dùng chế độ phân tán khi bạn cần khả năng chịu lỗi.
Nếu một máy chủ gặp sự cố trong thiết lập phân tán, MinIO vẫn chạy và dữ liệu vẫn truy cập được. Hệ thống dùng erasure coding để chia nhỏ đối tượng lên nhiều ổ và máy chủ, nên bạn có thể mất ổ hoặc node mà không mất dữ liệu.
Bạn cũng cần chế độ phân tán cho lưu trữ quy mô lớn. Nếu bạn lưu trữ hàng terabyte hoặc petabyte dữ liệu, phân tán lên nhiều máy sẽ cho hiệu năng và dung lượng tốt hơn một máy đơn lẻ.
Phát triển cục bộ không cần những điều này. Chế độ phân tán làm mọi thứ phức tạp - bạn cần nhiều máy/VM, mạng phối hợp và cấu hình ổ đĩa cẩn thận. Để kiểm thử API S3 hoặc chạy lưu trữ đối tượng trên laptop, chế độ single-node là đủ.
Môi trường production dùng chế độ phân tán khi thời gian chết không thể chấp nhận và mất dữ liệu là thảm họa. Hãy nghĩ tới hệ thống sao lưu, data lake, hoặc ứng dụng nơi người dùng phụ thuộc vào khả năng sẵn sàng lưu trữ liên tục.
Tổng quan thiết lập cấp cao
MinIO phân tán yêu cầu tối thiểu bốn ổ đĩa trên nhiều node.
Mỗi node chạy một container MinIO, và tất cả node phải thấy cấu hình ổ giống nhau. Bạn không thể trộn node một ổ với node nhiều ổ hoặc thay đổi số ổ sau khi thiết lập.
Một thiết lập phân tán cơ bản như sau:
Bốn máy chủ (hoặc VM) cài MinIO
Nhiều ổ đĩa trên mỗi máy chủ dành riêng cho MinIO
Kết nối mạng giữa tất cả node
Đường dẫn ổ giống hệt nhau trên mọi node
Bạn có thể điều phối trong một tệp Compose, nhưng tôi cảnh báo - nó sẽ rất dài. Bạn cần định nghĩa tất cả node, đặt đường dẫn ổ và khởi động cùng nhau.
Đây là ví dụ đầy đủ cho bốn node với hai ổ mỗi node:
Cú pháp {1...4} báo MinIO kết nối bốn node (minio1 đến minio4) với hai ổ mỗi node (data1 và data2). Mỗi node có ánh xạ cổng riêng để bạn truy cập từng node - node 1 dùng 9001/9091, node 2 dùng 9002/9092, v.v.
Mạng minio-distributed cho phép các container truy cập nhau qua hostname. Tất cả node phải dùng cùng thông tin xác thực và thấy cùng bố cục ổ đĩa.
Để khởi động cụm, trước tiên tạo thư mục dữ liệu rồi chạy tệp compose
mkdir-p data/minio{1..4}/data{1..2}docker compose up -dĐược hỗ trợ bởi
Chạy MinIO ở chế độ phân tán
Vậy là xong! Giờ bạn có thể truy cập web UI qua một trong các URL sau:
Nhưng một lần nữa, đừng xây dựng điều này trừ khi bạn thực sự cần - chế độ phân tán dành cho khối lượng production nơi thời gian hoạt động và dư thừa dữ liệu xứng đáng với độ phức tạp tăng thêm.
Ngoài ra, bạn có thể sẽ muốn các yếu tố như TLS, endpoint console duy nhất, volumes/ổ đĩa ngoài cho môi trường production đầy đủ.
Các vấn đề thường gặp khi chạy MinIO trong Docker
Đa số vấn đề với MinIO trên Docker xuất phát từ cấu hình sai volumes, cổng hoặc thông tin xác thực.
Dưới đây là các vấn đề bạn có thể gặp và cách khắc phục nhanh.
Container khởi động nhưng không truy cập được web UI
Bạn chạy docker ps thấy container đang chạy, nhưng http://localhost:9001 không phản hồi hoặc timeout.
Để giải quyết, trước tiên kiểm tra console port có được ánh xạ đúng không:
Tìm dòng "Console: http://..." - dòng này cho biết MinIO thực sự lắng nghe ở đâu. Nếu thấy cổng khác so với mong đợi, tham số --console-address có thể đang sai.
Lỗi quyền trên volumes được mount
MinIO crash khi khởi động hoặc bạn thấy lỗi "permission denied" trong logs khi nó cố ghi vào /data.
Tiến trình MinIO chạy dưới người dùng cụ thể trong container, và người dùng này cần quyền ghi vào thư mục mount. Khắc phục bằng:
Tìm MINIO_ROOT_USER và MINIO_ROOT_PASSWORD trong kết quả. Nếu thiếu, bạn đã quên cờ -e hoặc mục environment: trong tệp Compose.
MinIO cũng yêu cầu mật khẩu tối thiểu 8 ký tự. Nếu ngắn hơn, container có thể từ chối hoặc dùng giá trị mặc định.
Nếu bạn đổi thông tin trên thiết lập hiện có, hãy dừng và xóa container hoàn toàn, rồi khởi động mới:
docker stop minio
dockerrm minio
docker run ... # với thông tin mớiĐược hỗ trợ bởi
Các tệp thông tin cũ có thể còn trong thư mục dữ liệu và gây xung đột.
Thực tiễn tốt nhất khi chạy MinIO với Docker
Hãy làm theo các thực tiễn sau để tránh lỗi thường gặp và giữ thiết lập MinIO dễ bảo trì.
Dùng Docker Compose để có tính lặp lại. Một tệp Compose ghi lại chính xác cấu hình của bạn - cổng, volumes, biến môi trường và lệnh. Bạn có thể kiểm soát phiên bản, chia sẻ với nhóm và tái tạo thiết lập giống hệt trên nhiều máy. Chạy các lệnh docker run dài từ lịch sử shell dễ dẫn tới lệch cấu hình và lỗi.
Luôn cấu hình lưu trữ bền vững. Ánh xạ volume hoặc bind mount trước khi lưu dữ liệu thật. Container là tạm thời - nếu bỏ qua bước này, bạn sẽ mất mọi thứ khi container khởi động lại. Kiểm tra thiết lập với docker inspect minio và xác minh ánh xạ volume đúng.
Giữ thông tin xác thực ngoài lịch sử lệnh. Đừng đặt mật khẩu trực tiếp trong lệnh docker run hoặc commit vào git trong tệp Compose. Dùng tệp môi trường (.env) với Docker Compose, hoặc truyền qua biến môi trường khi chạy. Thêm .env vào .gitignore ngay lập tức.
Chỉ dùng chế độ single-node cho phát triển. Chế độ phân tán phức tạp và tốn thời gian thiết lập. Bạn không cần HA hay erasure coding trên laptop. Dành triển khai phân tán cho production nơi thời gian chết thật sự quan trọng.
Theo dõi logs khi khởi động. Chạy docker logs -f minio khi khởi động MinIO lần đầu. Logs hiển thị endpoint API, URL console và mọi lỗi cấu hình. Nếu có vấn đề, bạn sẽ thấy ngay thay vì đoán mò.
Làm theo các thực tiễn này, thiết lập MinIO của bạn sẽ vững ngay từ ngày đầu.
Kết luận
Chạy MinIO với Docker nghĩa là bạn có thể có bộ nhớ đối tượng tương thích S3 chạy trên máy của mình trong chưa đầy một phút.
Đối với phát triển, thử nghiệm và dự án nhỏ, MinIO single-node trong Docker cung cấp mọi thứ bạn cần. Bạn có đầy đủ tương thích API S3, web console để quản lý và toàn quyền kiểm soát dữ liệu mà không phụ thuộc dịch vụ đám mây hoặc trả tiền cho dung lượng không dùng.
Bắt đầu với những điều cơ bản: một lệnh docker run đơn giản hoặc một tệp Docker Compose với volumes bền vững và thông tin xác thực an toàn (ưu tiên cách sau). Kiểm thử thiết lập, xác minh hoạt động và chỉ thêm độ phức tạp khi thực sự cần.
Chế độ phân tán, độ sẵn sàng cao và cấu hình đạt chuẩn production tồn tại vì một lý do - nhưng không phải cho phát triển cục bộ. Hãy chuyển sang các thiết lập đó khi bạn triển khai production, khi thời gian chết khiến bạn tốn tiền, hoặc khi bạn lưu dữ liệu không thể để mất. Trước đó, hãy giữ mọi thứ đơn giản và tập trung xây dựng ứng dụng thay vì quản trị hạ tầng.
Chuyên gia Khoa học Dữ liệu Cấp cao, làm việc tại Croatia. Tác giả Công nghệ Hàng đầu với hơn 700 bài viết đã xuất bản, đạt trên 10 triệu lượt xem. Tác giả cuốn sách Tự động hóa Machine Learning với TPOT.
Câu hỏi thường gặp
Làm thế nào tối ưu hiệu năng MinIO cho tải lên đồng thời cao?⌄
Tăng số kết nối đồng thời mà máy chủ MinIO của bạn có thể xử lý bằng cách điều chỉnh biến môi trường MINIO_API_REQUESTS_MAX. Với khối lượng tải đồng thời cao, cũng cân nhắc dùng nhiều ổ đĩa trong thiết lập vì MinIO tự động phân phối tải qua các ổ sẵn có. Nếu bạn chạy chế độ phân tán, đảm bảo băng thông mạng giữa các node đủ để xử lý lưu lượng và dùng giao diện mạng riêng cho lưu thông của MinIO.
Thực tiễn tốt nhất để thiết lập MinIO với Docker Compose là gì?⌄
Luôn dùng Docker Compose thay vì các lệnh docker run cho thiết lập gần với production vì nó giúp cấu hình có thể lặp lại và kiểm soát phiên bản. Lưu thông tin xác thực trong tệp .env riêng và thêm vào .gitignore để giữ secrets ngoài kho mã. Ánh xạ volumes bền vững tới thư mục chuyên dụng trên host, đặt chính sách khởi động lại là unless-stopped hoặc always, và thêm cấu hình healthcheck để theo dõi trạng thái container.
Làm sao cấu hình MinIO để truy cập an toàn bằng TLS?⌄
Tạo chứng chỉ TLS và đặt vào một thư mục trên host, sau đó mount thư mục đó vào /root/.minio/certs bên trong container MinIO. MinIO tự động phát hiện chứng chỉ ở vị trí này và bật HTTPS khi khởi động. Bạn cần tệp public.crt cho chứng chỉ và private.key cho khóa riêng, và chứng chỉ phải khớp hostname hoặc địa chỉ IP của máy chủ MinIO.
Khác biệt chính giữa MinIO và các lựa chọn tương thích S3 khác là gì?⌄
MinIO hoàn toàn mã nguồn mở và được thiết kế riêng cho lưu trữ đối tượng hiệu năng cao, trong khi nhiều lựa chọn tương thích S3 khác là dịch vụ đám mây hoặc có tập tính năng hạn chế. MinIO hỗ trợ các tính năng như erasure coding phân tán, versioning, mã hóa và lifecycle policies sánh với khả năng của AWS S3. Không như một số lựa chọn khác, MinIO chạy ở bất cứ đâu - trên bare metal, VM, container, hoặc Kubernetes - và không khóa bạn vào một nhà cung cấp đám mây cụ thể.
Làm thế nào tự động hóa backup và khôi phục MinIO?⌄
Dùng MinIO client (mc) để tạo script mirror buckets sang một phiên bản MinIO khác hoặc lưu trữ tương thích S3 với mc mirror source/ destination/. Lên lịch các script này bằng cron hoặc dùng tính năng replication tích hợp của MinIO để tự động đồng bộ dữ liệu giữa các phiên bản MinIO. Để khôi phục, dùng mc mirror theo hướng ngược lại để copy dữ liệu về từ vị trí backup, hoặc dùng mc cp với cờ --recursive để khôi phục các bucket hoặc đối tượng cụ thể.
Tìm hiểu về Docker và khám phá tầm quan trọng của nó trong bộ công cụ của chuyên gia dữ liệu. Tìm hiểu về Docker container, Docker image và nhiều nội dung khác.
Bạn cần bộ nhớ đối tượng cho phát triển nhưng không muốn thiết lập và trả tiền cho AWS S3?
MinIO cung cấp bộ nhớ tương thích S3 chạy ở bất cứ đâu - trên laptop, máy ảo, hoặc cụm Kubernetes. Nó là mã nguồn mở, nghĩa là độc lập nhà cung cấp, và bạn sẽ không nhận hóa đơn bất ngờ vào cuối tháng. Kết hợp với Docker, chạy MinIO còn dễ hơn vì bạn có thể khởi tạo máy chủ lưu trữ trong vài giây mà không cần cài trực tiếp gì lên máy.
Container Docker giữ MinIO tách biệt với hệ thống của bạn đồng thời cho phép bạn kiểm soát hoàn toàn cấu hình và độ bền dữ liệu. Bạn có thể kiểm thử API S3 cục bộ, mô phỏng thiết lập lưu trữ production, hoặc chạy lưu trữ đối tượng gọn nhẹ cho các dự án nhỏ.
Trong bài viết này, tôi sẽ hướng dẫn bạn chạy MinIO với Docker, xác minh hoạt động và cấu hình các tùy chọn thiết lập phổ biến nhất.
Nếu bạn hoàn toàn mới với Docker, hãy dành một buổi chiều thứ Bảy để nắm vững nền tảng - khóa học Introduction to Docker của DataCamp sẽ giúp bạn bắt đầu.
Yêu cầu tiên quyết
Bạn cần ba thứ để chạy MinIO với Docker.
Cài đặt và chạy Docker trên máy của bạn. Bạn có thể xác minh bằng cách chạy
docker --versiontrong terminal. Nếu trả về số phiên bản, bạn đã sẵn sàng.Nắm cơ bản về các lệnh Docker. Bạn nên biết cách khởi động/dừng container, xem logs và làm việc với images Docker. Nếu bạn từng chạy
docker runhoặc dùng Docker Compose, là ổn.Một thư mục cục bộ cho lưu trữ bền vững. MinIO cần nơi lưu dữ liệu bên ngoài container. Tạo một thư mục trống trên máy host - ví dụ
~/minio/datalà phù hợp.Vậy là xong. Danh sách ngắn gọn, nhưng hãy chắc chắn bạn đáp ứng hết trước khi tiếp tục.
Cách chạy MinIO với Docker (Thiết lập single-node)
Thiết lập MinIO single-node chạy một phiên bản MinIO trong container Docker và lưu toàn bộ dữ liệu ở một nơi.
Thiết lập này phù hợp cho phát triển, thử nghiệm, và các khối lượng công việc production quy mô nhỏ nơi bạn không cần tính sẵn sàng cao hay lưu trữ phân tán. Bạn có đầy đủ khả năng tương thích API S3 mà không cần phức tạp hóa với nhiều node.
Chạy MinIO với Docker Run
Lệnh
docker runkhởi động MinIO trong container mới với mọi thứ cấu hình trong một dòng.Đây là lệnh cơ bản:
Chạy MinIO với docker run
Hãy cùng phân tích từng phần làm gì.
Cổng 9000 là endpoint API nơi ứng dụng của bạn kết nối để tải lên và tải xuống tệp. Đây là nơi các client tương thích S3 gửi yêu cầu.
Cổng 9001 là nơi đặt web console để bạn quản lý buckets, thiết lập quyền và giám sát lưu trữ. Bạn sẽ dùng cổng này để xác minh MinIO chạy đúng.
Tham số
-v ~/minio/data:/dataánh xạ thư mục cục bộ của bạn tới vị trí lưu trữ trong container. Mọi thứ MinIO lưu sẽ nằm trong~/minio/datatrên máy host. Khi bạn dừng hoặc xóa container, dữ liệu vẫn an toàn trong thư mục này.Biến môi trường đặt thông tin xác thực truy cập.
MINIO_ROOT_USERlà tên người dùng admin vàMINIO_ROOT_PASSWORDlà mật khẩu. Đây là thông tin bạn dùng để đăng nhập web console và cấu hình truy cập API.Đối số
server /datayêu cầu MinIO chạy ở chế độ server và dùng/datalàm thư mục lưu trữ. Tham số--console-address ":9001"chỉ định cổng lắng nghe của web console.Có một cách khác để chạy MinIO rất phù hợp nếu bạn không thích các lệnh terminal dài nhiều dòng.
Lưu ý: MinIO không còn cập nhật hình ảnh Docker Hub và Quay của họ (kể từ tháng 10/2025). Mã trong bài viết này vẫn hoạt động cho phát triển cục bộ, nhưng cho môi trường production, hãy cân nhắc các lựa chọn được duy trì như image MinIO của Chainguard (cgr.dev/chainguard/minio:latest).
Chạy MinIO với Docker Compose
Docker Compose cho phép bạn định nghĩa thiết lập MinIO trong tệp YAML thay vì gõ các lệnh dài.
Điều này giúp cấu hình của bạn có thể lặp lại và kiểm soát phiên bản. Bạn có thể chia sẻ tệp với nhóm, commit vào git, và khởi động lại MinIO với cùng thiết lập mỗi lần.
Tạo tệp
docker-compose.yml:Cấu trúc phản chiếu lệnh
docker runnhưng sắp xếp mọi thứ thành các khối có tên. Cổng, biến môi trường và volumes đều có khối riêng.Ánh xạ volume hoạt động tương tự -
./minio/data:/datatạo thư mục trong thư mục hiện tại của bạn và mount vào container../nghĩa là tương đối với nơi tệpdocker-compose.ymlnày nằm.Giờ bạn có thể khởi động MinIO với:
Chạy MinIO với docker compose
Tham số
-dchạy container ở chế độ nền. Terminal của bạn sẽ không bị chiếm bởi logs của MinIO, và container vẫn chạy sau khi bạn đóng terminal.Dừng bằng:
Compose phù hợp hơn cho phát triển vì bạn có thể thêm healthcheck, chính sách khởi động lại và nhiều dịch vụ trong cùng tệp. Nếu sau này cần thêm cơ sở dữ liệu hay dịch vụ khác cạnh MinIO, bạn chỉ cần thêm mục dưới
services:.Cách truy cập và xác minh MinIO đang chạy
Giờ MinIO đã chạy, bạn nên xác nhận nó khởi động đúng trước khi dùng cho lưu trữ.
Có hai cách xác minh: web console để kiểm tra trực quan và MinIO client cho xác minh qua dòng lệnh.
Dùng web console của MinIO
Mở trình duyệt và truy cập
http://localhost:9001.Bạn sẽ thấy màn hình đăng nhập yêu cầu thông tin xác thực:
Giao diện web MinIO
Bạn có thể đăng nhập bằng thông tin đã cung cấp qua biến môi trường -
admin/password123trong ví dụ của tôi.Sau khi đăng nhập, bạn sẽ vào bảng điều khiển MinIO. Trang chính hiển thị mức sử dụng lưu trữ, số lượng bucket và tình trạng hệ thống. Thanh bên trái có các tùy chọn tạo bucket, quản lý người dùng và xem số liệu.
Tạo bucket qua giao diện web MinIO
Tạo một bucket thử để xác minh mọi thứ hoạt động. Nhấp "Buckets" ở thanh bên, sau đó "Create Bucket." Đặt tên, chẳng hạn
test-bucketrồi nhấp tạo. Nếu bucket xuất hiện trong danh sách, MinIO đang chạy đúng và lưu dữ liệu.Tạo bucket qua giao diện web MinIO
Dùng MinIO client (mc)
MinIO client là công cụ dòng lệnh cho phép bạn tương tác với MinIO tương tự AWS CLI.
Chạy một trong các lệnh sau để cài đặt:
Và chạy lệnh này để kết nối client với phiên bản MinIO cục bộ của bạn:
Lệnh này tạo một bí danh tên
localtrỏ tới máy chủ MinIO của bạn. Giờ bạn có thể chạy lệnh với bí danh đó.Liệt kê các bucket:
Liệt kê buckets
Nếu bạn đã tạo bucket thử trước đó, bạn sẽ thấy nó trong kết quả. Nếu lệnh trả về rỗng hoặc hiển thị các bucket của bạn, MinIO đang hoạt động.
Giờ bạn có thể tải lên một tệp thử vào bucket:
Và xác minh nó có ở đó:
Nếu bạn thấy
test.txttrong kết quả, bạn đã thiết lập chính xác.Liệt kê tệp trong bucket
Dưới đây là một số gợi ý khắc phục sự cố nhanh nếu mọi thứ không hoạt động:
Kiểm tra container có đang chạy với
docker ps. Nếu bạn không thấy container tênminiothì nó chưa khởi động hoặc đã crash.Xem logs với
docker logs minio. Tìm lỗi về cổng đã dùng hoặc vấn đề quyền trên thư mục dữ liệu.Nếu bạn không truy cập được web console, xác minh các cổng không bị chặn bằng cách kiểm tra
docker port minio. Bạn nên thấy cả 9000 và 9001 được ánh xạ đúng.Nếu gặp lỗi quyền trên thư mục dữ liệu, chạy
chmod -R 755 ~/minio/datađể khắc phục vấn đề truy cập.Lưu trữ bền vững và Data Volumes
Mặc định container là tạm thời - khi bạn xóa container, mọi thứ bên trong sẽ biến mất.
MinIO lưu trữ đối tượng, metadata và tệp cấu hình. Nếu bạn không thiết lập lưu trữ bền vững đúng cách, bạn sẽ mất toàn bộ dữ liệu ngay khi khởi động lại hoặc xóa container.
Dùng volumes cục bộ với Docker
Docker volumes và bind mounts giữ dữ liệu của bạn an toàn bên ngoài container.
Khi bạn dùng
-v ~/minio/data:/datahoặc ánh xạ volume trong Docker Compose, MinIO ghi mọi thứ vào máy host. Container đọc/ghi tệp tới/data, nhưng các tệp thực sự nằm ở~/minio/datatrên host.Khi bạn dừng, xóa container, thậm chí xóa image - dữ liệu vẫn ở
~/minio/data. Khởi động container MinIO mới trỏ tới cùng thư mục và toàn bộ buckets, đối tượng, thiết lập sẽ trở lại như cũ.Nếu bạn không ánh xạ volume, MinIO dùng hệ thống tệp nội bộ của container. Mọi thứ vẫn hoạt động cho tới khi bạn dừng container. Khi khởi động lại, MinIO bắt đầu như mới: không có bucket, không đối tượng, không cấu hình.
Ví dụ compose tôi đã trình bày trước đó tạo thư mục
minio/datangay tại nơi đặt tệp compose:Thư mục dữ liệu MinIO
Lỗi lưu trữ thường gặp
Chạy mà không có volume là lỗi phổ biến nhất.
Bạn khởi động MinIO, tải lên tệp, tạo bucket và mọi thứ có vẻ ổn. Rồi bạn khởi động lại container để cập nhật hoặc đổi cấu hình. Tất cả dữ liệu biến mất vì được lưu trong container, không phải trên host.
Luôn kiểm tra lệnh Docker hoặc tệp Compose có ánh xạ volume trước khi đưa dữ liệu thật vào MinIO.
Vấn đề quyền xảy ra khi Docker không thể ghi vào thư mục mount.
Tiến trình MinIO trong container chạy dưới một người dùng cụ thể. Nếu người dùng đó không có quyền ghi trên thư mục host, MinIO sẽ crash khi khởi động hoặc thất bại âm thầm khi lưu đối tượng.
Bạn có thể khắc phục bằng cách đảm bảo thư mục dữ liệu có thể ghi:
Hoặc chạy container với người dùng khớp người dùng trên host:
Tóm lại, thiết lập volumes đúng ngay từ đầu và bạn sẽ không phải lo mất dữ liệu.
Biến môi trường và cấu hình cơ bản
MinIO đọc cấu hình từ các biến môi trường khi khởi động.
Điều này nghĩa là bạn có thể thay đổi hành vi của MinIO mà không cần chỉnh sửa tệp cấu hình hay rebuild container. Bạn đặt các biến này trong lệnh
docker runhoặc trong tệp Docker Compose.Access key và thông tin xác thực
MinIO yêu cầu hai biến môi trường để xác thực:
MINIO_ROOT_USERvàMINIO_ROOT_PASSWORD.Chúng tạo tài khoản quản trị gốc có toàn quyền trên phiên bản MinIO của bạn. Người dùng root có thể tạo bucket, quản lý người dùng khác, đặt chính sách và truy cập mọi đối tượng được lưu.
Đặt chúng như sau khi
docker run:Hoặc trong Docker Compose:
Đừng dùng thông tin mặc định trong production. Ví dụ trong bài dùng
adminvàpassword123cho đơn giản, nhưng đây là lựa chọn tệ cho triển khai thực tế.Hãy chọn mật khẩu mạnh với tối thiểu 8 ký tự. Tốt hơn, dùng thông tin được tạo ngẫu nhiên và lưu trong trình quản lý mật khẩu hoặc hệ thống quản lý secrets.
Đừng hardcode thông tin xác thực trong tệp Docker Compose mà bạn commit vào kiểm soát phiên bản. Hãy dùng tệp môi trường:
Sau đó tạo tệp
.envvới thông tin thực và thêm vào.gitignore.Cấu hình cổng và mạng
MinIO cần hai cổng để hoạt động đúng.
Ánh xạ các cổng này trong lệnh Docker của bạn:
Xung đột cổng xảy ra khi dịch vụ khác đã dùng 9000 hoặc 9001 trên host.
Bạn sẽ thấy lỗi "bind: address already in use" khi khởi động container. Khắc phục bằng cách ánh xạ sang cổng host khác:
Giờ API của MinIO ở
http://localhost:9090và console ởhttp://localhost:9091. Container vẫn dùng 9000 và 9001 bên trong, nhưng bên ngoài bạn truy cập qua cổng khác.Các lệnh này giúp bạn kiểm tra cổng nào đang được dùng trước khi khởi động MinIO:
Kiểm tra dịch vụ đang dùng cổng
Nếu bạn chạy nhiều phiên bản MinIO trên cùng máy, hãy gán mỗi phiên bản ánh xạ cổng riêng để không xung đột.
Chạy MinIO ở chế độ phân tán với Docker
Chế độ phân tán chạy MinIO trên nhiều máy chủ với nhiều ổ đĩa để có tính sẵn sàng cao và dư thừa dữ liệu.
Bạn không cần điều này cho phát triển hoặc thử nghiệm. Chế độ single-node xử lý tốt hầu hết trường hợp. Bỏ qua phần này trừ khi bạn lên kế hoạch triển khai production cần trực tuyến ngay cả khi máy chủ gặp sự cố.
Khi nào nên dùng MinIO phân tán
Dùng chế độ phân tán khi bạn cần khả năng chịu lỗi.
Nếu một máy chủ gặp sự cố trong thiết lập phân tán, MinIO vẫn chạy và dữ liệu vẫn truy cập được. Hệ thống dùng erasure coding để chia nhỏ đối tượng lên nhiều ổ và máy chủ, nên bạn có thể mất ổ hoặc node mà không mất dữ liệu.
Bạn cũng cần chế độ phân tán cho lưu trữ quy mô lớn. Nếu bạn lưu trữ hàng terabyte hoặc petabyte dữ liệu, phân tán lên nhiều máy sẽ cho hiệu năng và dung lượng tốt hơn một máy đơn lẻ.
Phát triển cục bộ không cần những điều này. Chế độ phân tán làm mọi thứ phức tạp - bạn cần nhiều máy/VM, mạng phối hợp và cấu hình ổ đĩa cẩn thận. Để kiểm thử API S3 hoặc chạy lưu trữ đối tượng trên laptop, chế độ single-node là đủ.
Môi trường production dùng chế độ phân tán khi thời gian chết không thể chấp nhận và mất dữ liệu là thảm họa. Hãy nghĩ tới hệ thống sao lưu, data lake, hoặc ứng dụng nơi người dùng phụ thuộc vào khả năng sẵn sàng lưu trữ liên tục.
Tổng quan thiết lập cấp cao
MinIO phân tán yêu cầu tối thiểu bốn ổ đĩa trên nhiều node.
Mỗi node chạy một container MinIO, và tất cả node phải thấy cấu hình ổ giống nhau. Bạn không thể trộn node một ổ với node nhiều ổ hoặc thay đổi số ổ sau khi thiết lập.
Một thiết lập phân tán cơ bản như sau:
Bạn có thể điều phối trong một tệp Compose, nhưng tôi cảnh báo - nó sẽ rất dài. Bạn cần định nghĩa tất cả node, đặt đường dẫn ổ và khởi động cùng nhau.
Đây là ví dụ đầy đủ cho bốn node với hai ổ mỗi node:
Cú pháp
{1...4}báo MinIO kết nối bốn node (minio1 đến minio4) với hai ổ mỗi node (data1 và data2). Mỗi node có ánh xạ cổng riêng để bạn truy cập từng node - node 1 dùng 9001/9091, node 2 dùng 9002/9092, v.v.Mạng
minio-distributedcho phép các container truy cập nhau qua hostname. Tất cả node phải dùng cùng thông tin xác thực và thấy cùng bố cục ổ đĩa.Để khởi động cụm, trước tiên tạo thư mục dữ liệu rồi chạy tệp compose
Chạy MinIO ở chế độ phân tán
Vậy là xong! Giờ bạn có thể truy cập web UI qua một trong các URL sau:
Nhưng một lần nữa, đừng xây dựng điều này trừ khi bạn thực sự cần - chế độ phân tán dành cho khối lượng production nơi thời gian hoạt động và dư thừa dữ liệu xứng đáng với độ phức tạp tăng thêm.
Ngoài ra, bạn có thể sẽ muốn các yếu tố như TLS, endpoint console duy nhất, volumes/ổ đĩa ngoài cho môi trường production đầy đủ.
Các vấn đề thường gặp khi chạy MinIO trong Docker
Đa số vấn đề với MinIO trên Docker xuất phát từ cấu hình sai volumes, cổng hoặc thông tin xác thực.
Dưới đây là các vấn đề bạn có thể gặp và cách khắc phục nhanh.
Container khởi động nhưng không truy cập được web UI
Bạn chạy
docker psthấy container đang chạy, nhưnghttp://localhost:9001không phản hồi hoặc timeout.Để giải quyết, trước tiên kiểm tra console port có được ánh xạ đúng không:
Bạn nên thấy
9001/tcp -> 0.0.0.0:9001. Nếu không thấy cổng 9001, bạn đã quên ánh xạ trong lệnh docker run hoặc tệp Compose.Cũng kiểm tra logs của MinIO:
Tìm dòng "Console: http://..." - dòng này cho biết MinIO thực sự lắng nghe ở đâu. Nếu thấy cổng khác so với mong đợi, tham số
--console-addresscó thể đang sai.Lỗi quyền trên volumes được mount
MinIO crash khi khởi động hoặc bạn thấy lỗi "permission denied" trong logs khi nó cố ghi vào
/data.Tiến trình MinIO chạy dưới người dùng cụ thể trong container, và người dùng này cần quyền ghi vào thư mục mount. Khắc phục bằng:
Hoặc nếu bạn dùng Linux, chạy container với UID của bạn:
Xung đột cổng với dịch vụ khác
Bạn gặp "bind: address already in use" khi khởi động container.
Điều này nghĩa là dịch vụ khác đã dùng cổng 9000 hoặc 9001. Tìm xem dịch vụ nào đang dùng:
Và ánh xạ MinIO sang cổng host khác:
Giờ truy cập API tại
localhost:9090và console tạilocalhost:9091.Thông tin xác thực không hoạt động như mong đợi
Bạn đặt
MINIO_ROOT_USERvàMINIO_ROOT_PASSWORDnhưng không đăng nhập được, hoặc container không khởi động.Để giải quyết, kiểm tra xem bạn có thực sự truyền các biến môi trường chưa:
Tìm
MINIO_ROOT_USERvàMINIO_ROOT_PASSWORDtrong kết quả. Nếu thiếu, bạn đã quên cờ-ehoặc mụcenvironment:trong tệp Compose.MinIO cũng yêu cầu mật khẩu tối thiểu 8 ký tự. Nếu ngắn hơn, container có thể từ chối hoặc dùng giá trị mặc định.
Nếu bạn đổi thông tin trên thiết lập hiện có, hãy dừng và xóa container hoàn toàn, rồi khởi động mới:
Các tệp thông tin cũ có thể còn trong thư mục dữ liệu và gây xung đột.
Thực tiễn tốt nhất khi chạy MinIO với Docker
Hãy làm theo các thực tiễn sau để tránh lỗi thường gặp và giữ thiết lập MinIO dễ bảo trì.
Dùng Docker Compose để có tính lặp lại. Một tệp Compose ghi lại chính xác cấu hình của bạn - cổng, volumes, biến môi trường và lệnh. Bạn có thể kiểm soát phiên bản, chia sẻ với nhóm và tái tạo thiết lập giống hệt trên nhiều máy. Chạy các lệnh
docker rundài từ lịch sử shell dễ dẫn tới lệch cấu hình và lỗi.Luôn cấu hình lưu trữ bền vững. Ánh xạ volume hoặc bind mount trước khi lưu dữ liệu thật. Container là tạm thời - nếu bỏ qua bước này, bạn sẽ mất mọi thứ khi container khởi động lại. Kiểm tra thiết lập với
docker inspect miniovà xác minh ánh xạ volume đúng.Giữ thông tin xác thực ngoài lịch sử lệnh. Đừng đặt mật khẩu trực tiếp trong lệnh
docker runhoặc commit vào git trong tệp Compose. Dùng tệp môi trường (.env) với Docker Compose, hoặc truyền qua biến môi trường khi chạy. Thêm.envvào.gitignorengay lập tức.Chỉ dùng chế độ single-node cho phát triển. Chế độ phân tán phức tạp và tốn thời gian thiết lập. Bạn không cần HA hay erasure coding trên laptop. Dành triển khai phân tán cho production nơi thời gian chết thật sự quan trọng.
Theo dõi logs khi khởi động. Chạy
docker logs -f miniokhi khởi động MinIO lần đầu. Logs hiển thị endpoint API, URL console và mọi lỗi cấu hình. Nếu có vấn đề, bạn sẽ thấy ngay thay vì đoán mò.Làm theo các thực tiễn này, thiết lập MinIO của bạn sẽ vững ngay từ ngày đầu.
Kết luận
Chạy MinIO với Docker nghĩa là bạn có thể có bộ nhớ đối tượng tương thích S3 chạy trên máy của mình trong chưa đầy một phút.
Đối với phát triển, thử nghiệm và dự án nhỏ, MinIO single-node trong Docker cung cấp mọi thứ bạn cần. Bạn có đầy đủ tương thích API S3, web console để quản lý và toàn quyền kiểm soát dữ liệu mà không phụ thuộc dịch vụ đám mây hoặc trả tiền cho dung lượng không dùng.
Bắt đầu với những điều cơ bản: một lệnh
docker runđơn giản hoặc một tệp Docker Compose với volumes bền vững và thông tin xác thực an toàn (ưu tiên cách sau). Kiểm thử thiết lập, xác minh hoạt động và chỉ thêm độ phức tạp khi thực sự cần.Chế độ phân tán, độ sẵn sàng cao và cấu hình đạt chuẩn production tồn tại vì một lý do - nhưng không phải cho phát triển cục bộ. Hãy chuyển sang các thiết lập đó khi bạn triển khai production, khi thời gian chết khiến bạn tốn tiền, hoặc khi bạn lưu dữ liệu không thể để mất. Trước đó, hãy giữ mọi thứ đơn giản và tập trung xây dựng ứng dụng thay vì quản trị hạ tầng.
Khi bạn sẵn sàng đào sâu các chủ đề Docker phức tạp hơn, hãy xem khóa học Containerization and Virtualization with Docker and Kubernetes của chúng tôi.