Hãy để tôi thêm câu trả lời của riêng mình, vì tôi tin rằng những người khác đang thiếu quan điểm của Docker.
Sử dụng VOLUME
trong Dockerfile là Right Way ™, vì bạn cho Docker biết rằng một thư mục nhất định chứa dữ liệu cố định. Docker sẽ tạo ra một khối lượng cho dữ liệu đó và không bao giờ xóa nó, ngay cả khi bạn loại bỏ tất cả các container sử dụng nó.
Nó cũng bỏ qua hệ thống tập tin liên minh, do đó, khối lượng thực tế là một thư mục thực tế được gắn (đọc-ghi hoặc đọc) ở đúng vị trí trong tất cả các thùng chứa chia sẻ nó.
Bây giờ, để truy cập dữ liệu đó từ máy chủ lưu trữ, bạn chỉ cần kiểm tra vùng chứa của mình:
# docker inspect myapp
[{
.
.
.
"Volumes": {
"/var/www": "/var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6...",
"/var/cache/nginx": "/var/lib/docker/vfs/dir/62499e6b31cb3f7f59bf00d8a16b48d2...",
"/var/log/nginx": "/var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87..."
},
"VolumesRW": {
"/var/www": false,
"/var/cache/nginx": true,
"/var/log/nginx": true
}
}]
Những gì tôi thường làm là tạo liên kết tượng trưng ở một số vị trí tiêu chuẩn, chẳng hạn như / srv , để tôi có thể dễ dàng truy cập vào các ổ đĩa và quản lý dữ liệu chứa trong đó (chỉ dành cho các ổ đĩa bạn quan tâm):
ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log