Quy Hoạch Thư Mục Lưu Trữ Docker - rồng hồ

/imgposts/ojjxorwa.jpg

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 đề:

  • Các tài khoản đăng nhập khác gặp khó khăn khi truy cập vào thư mục này. Mặc dù trên máy chủ cá nhân thì không sao, nhưng khi chia sẻ máy chủ với người khác, điều này trở nên bất tiện.
  • Một số container cần dùng đến thư mục /var/www/html (chẳng hạn như container PHP FPM) sẽ gặp khó khăn trong việc phối hợp với Nginx cài đặt trên máy chủ, dẫn đến sự không khớp giữa đường dẫn mà Nginx chuyển tiếp cho container FPM, gây ra lỗi 404.

Đố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.