Tệp (và dữ liệu khác) được lưu trữ trong một vùng chứa Docker sẽ không tồn tại nếu vùng chứa bị xóa. Để khắc phục điều này, có thể sử dụng Docker volumes và bind mount . Hướng dẫn này thảo luận về việc sử dụng Docker volumes như một cách để lưu trữ dữ liệu liên tục. Hãy coi volumes như một ổ cứng ngoài; nếu ổ cứng trong bị xóa, ổ cứng ngoài vẫn giữ lại dữ liệu của riêng nó. Volume được lưu trữ trên máy chủ và độc lập với bất kỳ vùng chứa hoặc hình ảnh nào. Chúng có thể được gắn vào các vùng chứa khác nhau khi cần và vì volume tách biệt với hình ảnh nên chúng không làm tăng kích thước hình ảnh.

Trước khi bạn bắt đầu

  1. Nếu bạn chưa thực hiện, hãy tạo một tài khoản Linode và Compute Instance. Xem hướng dẫn Bắt đầu với Linode và Tạo Compute Instance của chúng tôi .
  2. Làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute của chúng tôi để cập nhật hệ thống của bạn. Bạn cũng có thể muốn đặt múi giờ, cấu hình tên máy chủ, tạo tài khoản người dùng giới hạn và tăng cường quyền truy cập SSH.
  3. Cài đặt Docker trên hệ thống của bạn.
  4. Hướng dẫn này giả định rằng bạn có thể sử dụng dòng lệnh Linux một cách thoải mái. Xem Sử dụng thiết bị đầu cuối .
  5. Hướng dẫn này giả định rằng bạn có hiểu biết cơ bản về Docker. Ngoài ra, bạn phải đã cài đặt Docker trên máy chủ của mình và triển khai hình ảnh Docker. Xem Giới thiệu về Docker .

Tạo một Docker Volume

Để bắt đầu tìm hiểu về Docker Volumes, bạn sẽ cần một volume để làm việc.

1.Đăng nhập vào Linode (hoặc máy chủ Linux khác) của bạn thông qua SSH hoặc Lish .

2.Tạo một ổ đĩa bằng cách nhập lệnh sau, thay thế example_volumebằng nhãn của ổ đĩa của bạn.

docker volume create example_volume

3.Xác minh ổ đĩa đã được tạo.

docker volume list

Kết quả đầu ra sẽ trông như thế này:

[mumbly@linode ~]$ docker volume list
DRIVER    VOLUME NAME
local     example_volume
[mumbly@linode ~]$

Kiểm tra một Docker Volume

Nếu bạn muốn xem thông tin chi tiết hơn về một ổ đĩa, bạn có thể sử dụng docker volume inspectlệnh:

docker volume inspect example_volume

Đầu ra sẽ tương tự như sau:

[mumbly@linode ~]$ docker volume inspect example_volume
[
    {
        "CreatedAt": "2021-05-19T15:27:27Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/example_volume/_data",
        "Name": "example_volume",
        "Options": {},
        "Scope": "local"
    }
]
[mumbly@linode ~]$

Gắn Docker Volume vào Container

Để dữ liệu của container được lưu trữ, bạn cần phải gắn Docker Volume bằng lệnh --mount flagtrong docker run. Thay thế [volume_name] bằng tên của volume, [path] bằng đường dẫn tuyệt đối mà bạn muốn gắn volume vào trong container và [docker_image] bằng tên của image.

docker run --mount source=[volume_name],destination=[path] [docker_image]

Ví dụ, lệnh sau sẽ gắn ổ đĩa được đặt tên example_volumevào đường dẫn /example_volumebên trong vùng chứa bằng cách sử dụng ubuntuhình ảnh.

docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu

Lệnh này chạy image, mount volume và đăng nhập người dùng với tư cách là root trên image Ubuntu. Khi đã vào với tư cách là root, bạn có thể xác minh được example_volumemount chỉ bằng ls. Đầu ra cho tất cả những điều này sẽ trông giống như thế này:

[mumbly@linode ~]$ docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
root@b64eb2eafcdf:/# ls
bin   dev  example_volume  lib    lib64   media  opt   root  sbin  sys  usr
boot  etc  home            lib32  libx32  mnt    proc  run   srv   tmp  var
root@b64eb2eafcdf:/#

Sao chép và chia sẻ tập tin giữa các container

Docker Volumes cũng cho phép chia sẻ giữa các container.

1.Gắn khối lượng theo hướng dẫn trong Mounting a Docker Volume to a Container . Sau đây là ví dụ được sử dụng trước đó:

docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu

2.Đổi thư mục thành example_datathư mục.

cd example_data

3.Tạo một tệp thử nghiệm trong ổ đĩa bằng cách nhập touchlệnh sau.

touch example_file.txt

4.Sau đó thoát khỏi container.

exit

5.Bây giờ hãy chạy một docker image khác với cùng một volume được gắn kết. debianImage được sử dụng trong ví dụ bên dưới.

docker run -it --name=example_2 --mount source=example_volume,destination=/example_volume debian

6.Trong vùng chứa mới (gọi là “example_2” nếu sử dụng lệnh tương tự như lệnh ở trên), hãy điều hướng đến thư mục của ổ đĩa.

cd example_volume

7.Nhập lsđể xem tập tin.

ls

Gắn một thư mục từ Linode của bạn vào một Container

Thay vì tạo một volume mới, bạn cũng có thể gắn một thư mục từ Linode (hoặc hệ thống khác) vào một container Docker. Điều này được thực hiện thông qua bind mount và hữu ích khi bạn muốn lưu trữ và truy cập các tệp của container trực tiếp từ hệ thống của mình. So với volumes, bind mount có chức năng hạn chế.

1.Đăng nhập vào Linode (hoặc máy chủ Linux khác) của bạn thông qua SSH hoặc Lish .

2.Sử dụng lệnh sau để chạy Docker, thay thế [local-directory] bằng đường dẫn tuyệt đối đến thư mục trong Linode mà bạn muốn gắn kết (sử dụng $(pwd)để gắn kết thư mục hiện tại). Sau đó thay thế [mount-directory] bằng đường dẫn tuyệt đối trên vùng chứa của bạn nơi bạn muốn truy cập các tệp cục bộ và thay thế [image] bằng hình ảnh Docker mà bạn muốn sử dụng.

docker run --rm -it -v [local-directory]:[mount-directory] [image]

3.Bạn sẽ tự động đăng nhập vào container. Điều hướng đến thư mục gắn kết và xem các tệp.

ls

Bạn sẽ thấy mọi tập tin bạn đã lưu trữ trong thư mục cục bộ.

Đọc thêm

Docker Volumes còn nhiều điều hơn thế nữa mà chúng ta có thể đề cập ở đây, và trường hợp sử dụng của mỗi người sẽ khác nhau. Tuy nhiên, có hai nơi tuyệt vời để xem xét thêm về điều này là tại trang Docker’s Docs:

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn: https://www.linode.com/docs/guides/understanding-docker-volumes/