04. tháng 1 2025
Một người thậm chí còn lười lập kế hoạch cho cuộc sống của mình, nhưng lại cần phải quy hoạch thư mục lưu trữ cho Docker. Thật là đau đầu...
Trong quá trình sử dụng Docker, tôi vẫn giữ thói quen đặt mã nguồn dự án vào thư mục cá nhân của tài khoản đã đăng nhập hệ thống, ví dụ như /home/some_user/some_project/. Tuy nhiên, cách làm này gây ra nhiều vấn đề:
Đối với các dự án cần được xử lý bởi Nginx trên máy chủ, chúng ta nên đặt tất cả vào thư mục /var/www/html và đặt tên theo tên dự án, ví dụ: /var/www/html/magento2. Khi cài đặt Magento2 trong container FPM Docker, cũng sử dụng cùng thư mục này.
Thực tế, không chỉ các dự án PHP FPM, mà ngay cả các dự án khác như dự án viết bằng Python cũng có thể đặt vào /var/www/html để đảm bảo tính nhất quán.
Ví dụ, trong một tệp cấu hình docker-compose, thường sẽ có liên quan đến các cơ sở dữ liệu như MySQL, Redis. Ban đầu, tôi dự định đặt các file lưu trữ vào /var/data, nhưng cảm thấy cách này tiềm ẩn nguy cơ bị ghi đè. Vì nếu lần sau tạo một tệp cấu hình docker-compose mới mà quên sửa đổi thư mục, thì thư mục lưu trữ của MySQL hoặc Redis sẽ hoàn toàn giống nhau, rất dễ xảy ra tình trạng ghi đè file.
Do đó, tôi tham khảo cách cài đặt Magento2 bằng Docker từ một repository GitHub. Cách này sử dụng các thư mục con bên dưới thư mục chứa tệp docker-compose để lưu trữ. Ví [cá bongdaplus độ bóng đá](/blog/method-for-efficiently-managing-receip/) dụ:
services:
redis:
volumes:
- ./dichvu/redis_data:/data
db:
volumes:
- ./dichvu/mysql_data:/var/lib/mysql
- ./dichvu/mysql_log:/var/log/mysql
Cần thêm thư mục dichvu vào tệp .gitignore để tránh bị đẩy lên kho mã nguồn bởi Git.
Trong phần volumes, nếu chỉ định các thư mục ánh xạ giữa máy chủ và container, nếu các thư mục này không tồn tại, Docker sẽ tự động tạo ra, không cần phải tạo thủ công trước. Đây là một tính năng rất tiện lợi.
Việc áp dụng Docker đã giúp đơn giản hóa việc triển khai các dự án PHP đa phiên bản, nhưng đồng thời cũng tăng thêm độ phức tạp trong quản lý. Nó mang lại nhiều thử thách mới. Tốt hay xấu, phụ thuộc vào cách đánh giá của mỗi người.