Docker container được sử dụng để chạy các ứng dụng trong một môi trường riêng biệt. Theo mặc định, tất cả các thay đổi bên trong container sẽ bị mất khi container dừng. Nếu chúng ta muốn giữ data giữa các lần chạy, Docker volume và bind mount có thể giúp ích.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Docker Volumes và cách quản lý và kết nối chúng với container.
Volumes là gì?
Storage trong Docker là một tính năng quản lý data của Docker. Data ở đây có thể hiểu là các file được sinh ra trong quá trình chạy Ứng dụng, ví dụ như file log, file data, file report …
Mặc định khi một container được khởi chạy, data trong quá trình vận hành được chứa ở writeable layer và sẽ bị mất đi khi container bị xóa. Ngoài ra thì một nhược điểm nữa đó là data ở container này khó có thể chia sẻ data với các container khác.
Bind mount
Bind mount, hoặc host volume là một kết nối từ container đến một thư mục trên host. Nó cho phép host chia sẻ hệ thống file của riêng nó với vùng chứa, hệ thống này có thể được đặt ở chế độ read-only hoặc read-write.
Ví dụ: Tạo file file.txt và lưu vào thư mục hiện tại trên máy host
docker run -v $(pwd):/var/opt/project bash:latest bash -c "echo Hello > /var/opt/project/file.txt"
\$(pwd): working directory. Trên Windows Command Line, bạn thay \$(pwd) bằng %cd%, với PowerShell: \${PWD}
Vd bạn đang ở folder "docker". Nếu muốn lưu file file.txt vào folder docker/test thì bạn sẽ thay $(pwd) bằng \$(pwd)/test
docker run -v $(pwd)/test:/var/opt/project bash:latest bash -c "echo Hello > /var/opt/project/file.txt"
Docker Volume
Volume là cơ chế ưa thích để tạo ra và sử dụng dữ liệu của Docker. Trong khi việc bind mounts bị phụ thuộc vào cấu trúc thư mục của host machine, thì Volume bị quản lý hoàn toàn bởi Docker.
Volume có thể được chia sẽ giữa các container.
Tạo volume
$ docker volume create data_volume
data_volume
Trường hợp không có name được chỉ ra
$ docker volume create
467f9f5d5e1b23cfcc7c95d1378caea921ad72241c46ce0fd9d62cc295441b06
Liệt kê tất cả volume
$ docker volume ls
DRIVER VOLUME NAME
local 467f9f5d5e1b23cfcc7c95d1378caea921ad72241c46ce0fd9d62cc295441b06
local data_volume
Dùng filter để lọc lại kết quả
$ docker volume ls -f name=data
DRIVER VOLUME NAME
local data_volume
Để xem thông tin chi tiết hơn về volume đã được tạo mình dùng lệnh.
$ docker volume inspect data_volume
[
{
"CreatedAt": "2022-10-08T21:15:42+07:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/data_volume/_data",
"Name": "data_volume",
"Options": {},
"Scope": "local"
}
]
Remove volume
$ docker volume rm data_volume
data_volume
Remove all volumes
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
data_volume
Khởi động 1 Container với 1 volume
Sử dụng -v or --volume với 3 tham số:
- Source directory hoặc volume name
- Đường dẫn trong container
- (Optional) list các option, vd như ro
https://devopsheaven.com/docker/docker-compose/volumes/2018/01/16/volumes-in-docker-compose.html
Trả lờiXóa