Thực hành với docker volume

  • Có 2 kiểu volume trong docker
  • bind mount: gắn trực tiếp một thư mục hoặc file của host với container
  • docker mananged volume:

Thực hiện tạo một container sử dụng volume kiểu bind mount như sau:

mkdir -p /root/web_test && cd /root/web_test

docker run --name apache_test2 -p 8080:80 -p 443:443 -v /root/web_test:/var/www/ -d eboraas/apache

Kiểm tra volume đang được mount vào trong container bằng lệnh

docker inspect -f '{{ .Mounts }}'  apache_test2

==> Kết quả kiểm tra:

[{bind  /root/web_test /var/www   true rprivate}]

Nếu kiểm tra bằng lệnh docker inspect apache_test2:

"Mounts": [
    {
        "Type": "bind",
        "Source": "/root/web_test",
        "Destination": "/var/www",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

Thực hiện thêm file trong thư mục được mount vào container để xem container có không:

touch local_file

docker exec apache_test2 ls /var/www/

Mặc định container sẽ có quyền rw trên volume được gắn thêm vào. chỉ định để container chỉ có quyền đọc bằng cách thêm tham số ro sau chỉ dẫn mount volume:

docker run --name apache_test3 -p 8081:80 -p 444:443 -v /root/web_test:/var/www/:ro -d eboraas/apache

Note: Volume được gắn vào theo kiểu bind mount sẽ tạo mới đường dẫn được gắn hoặc nếu có đường dẫn rồi thì ghi đè toàn bộ dữ liệu.


Sử dụng kiểu docker mananged volume. Ta tạo volume bằng lệnh:

docker volume create --name avolume

Kiểm tra volume vừa tạo:

docker volume inspect avolume

Ta tạo một container với kiểu docker mananged volume:

mkdir -p /root/web_test2 && cd /root/web_test2

docker run --name apache_test3 -p 8081:80 -p 444:443 -v avolume:/var/www/ -d eboraas/apache

Kiểm tra volume gắn vào container apache_test3:

docker inspect -f '{{ .Mounts }}'  apache_test3

==> Kết quả:

[{volume avolume /var/lib/docker/volumes/avolume/_data /var/www local z true }]

Nếu kiểm tra bằng lệnh docker inspect apache_test3:

"Mounts": [
    {
        "Type": "volume",
        "Name": "avolume",
        "Source": "/var/lib/docker/volumes/avolume/_data",
        "Destination": "/var/www",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
],

Ngữ cảnh sử dụng bind mount trong trường hợp cần đồng bộ thư mục từ host vào container, sẽ tạo mới đường dẫn hoặc ghi đè thư mục trong container.

Ngữ cảnh sử dụng docker mananged volume trong trường hợp muốn đồng bộ thư mục giữa host và container mà ko xóa dữ liệu cũ trong container đang có.

Note: dữ liệu trên volume sẽ không được lưu vào image khi sử dụng lệnh docker commit <container> <image>