ให้ฉันเพิ่มคำตอบของตัวเองเพราะฉันเชื่อว่าคนอื่น ๆ ไม่มีจุดของ Docker
การใช้VOLUME
Dockerfile เป็นวิธีที่ถูกต้องเพราะคุณแจ้งให้ Docker ทราบว่าไดเร็กทอรีบางรายการมีข้อมูลถาวร นักเทียบท่าจะสร้างโวลุ่มสำหรับข้อมูลนั้นและจะไม่ลบทิ้งแม้ว่าคุณจะลบคอนเทนเนอร์ทั้งหมดที่ใช้มันก็ตาม
นอกจากนี้ยังข้ามระบบไฟล์ยูเนี่ยนเพื่อให้โวลุ่มเป็นไดเร็กทอรีจริงที่ได้รับการเมาท์ (อ่าน - เขียนหรืออ่านอย่างเดียว) ในตำแหน่งที่ถูกต้องในคอนเทนเนอร์ทั้งหมดที่ใช้ร่วมกัน
ตอนนี้ในการเข้าถึงข้อมูลนั้นจากโฮสต์คุณจะต้องตรวจสอบคอนเทนเนอร์ของคุณเท่านั้น:
# 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
}
}]
สิ่งที่ฉันมักจะทำคือสร้าง symlink ในสถานที่มาตรฐานบางแห่งเช่น / srvเพื่อให้ฉันสามารถเข้าถึงไดรฟ์ข้อมูลและจัดการข้อมูลที่มีได้อย่างง่ายดาย (เฉพาะไดรฟ์ข้อมูลที่คุณสนใจ):
ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log