Logo
Featured Image
Blog

Chia sẻ dữ liệu giữa Docker Host và Container

Author
tobi 08/04/2024 0 views

Cách mount thư mục máy Host hoặc tạo ổ đĩa để chia sẻ dữ liệu vào Container cũng như chia sẻ dữ liệu các container với nhau.

 

Trong phần này tìm hiểu cách chia sẻ dữ liệu giữa máy Host và Container, giữa các Container với nhau bằng cách sử dụng một thư mục trên máy Host làm nơi lưu trữ tập trung. (Tạo ổ đĩa rồi mount nó vào các container sẽ tìm hiểu sau, phần này sử dụng trực tiếp các thư mục).

 

Máy Host là hệ thống bạn đang chạy Docker Engine. Một thư mục của máy Host có thể chia sẻ để các Container đọc, lưu dữ liệu.

 

Container - ánh xạ thư mục máy Host

 

Thông tin:

 

  • Thư mục cần chia sẻ dữ liệu trên máy host là: path_in_host
  • Khi chạy container thư mục đó được mount - ánh xạ tới path_in_container của container

 

Để có kết quả đó, tạo - chạy container với tham số thêm vào -v path_to_data:path_in_container

 

Ví dụ:

 

Giả sử ở máy host chúng ta có thư mục sitedata ở đường dẫn /home/tobi/sitedata. Trong thư mục này sẽ có 2 file .txt như sau :

 

 

Bây giờ chúng ta tạo 1 container , ở container này sẽ có thư mục được ánh xạ dữ liệu với /home/tobi/sitedata ở máy host với lệnh sau :

 

docker run -it -v /home/tobi/sitedata:/home/data ubuntu

 

Chia sẻ dữ liệu giữa Docker Host và Container

 

Lúc này thì trong container mới tạo thư mục /home/data sẽ được ánh xạ với /home/tobi/sitedata ở máy host, việc bạn tạo thêm file hay xoá đi từ trong container thì thư mục bên ngoài host cũng sẽ giống vậy.

 

Lưu ý : Khi xoá container thì thư mục bên ngoài sẽ không mất dữ liệu.

 

Chia sẻ dữ liệu giữa các Container

 

Đầu tiên mình sẽ tạo 1 container có ánh xạ thư mục với /home/tobi/sitedata có tên là C1

 

docker run -it -v /home/tobi/sitedata:/home/data --name C1 ubuntu

 

Lúc này thì như ở phần đầu thì thư mục data sẽ đồng bộ với thư mục sitedata ở máy host.

 

Tiếp theo để tạo 1 container C2 khác chia sẻ cùng dữ liệu thư mục data với container C1, chúng ta chỉ cần tạo với lệnh sau :

 

docker run -it --name C2 --volumes-from C1 almalinux

 

 

Thì lúc này Container C1 và C2 đã có thể chia sẽ chung dữ liệu thông qua thư mục /home/data

 

Quản lý các ổ đĩa với docker volume

 

Có thể tạo và quản lý các ổ đĩa bên ngoài container, lệnh làm việc với ổ đĩa là docker volume với các trường hợp cụ thể:

 

Liệt kê danh sách các ổ đĩa:

 

docker volume ls

 

Tạo một ổ đĩa:

 

docker volume create name_volume

 

 

Xóa một ổ đĩa:

 

docker volume rm name_volume

 

Mount một ổ đĩa vào container (--mount)

 

Tạo ổ đĩa có tên là D1

 

docker volume create D1

 

 

Mount ổ đĩa vào container ( Ở đây mình tạo 1 container có tên là E1, và mount ổ đĩa có tên là D1 và thư mục disk1 , và container này được tạo từ images ubuntu).

 

docker run -it --name E1 --mount source=D1,target=/home/disk1 ubuntu 

 

 

Mình sẽ thử tạo 2 file text vào trong thư mục này ở container :

 

 

Bây giờ chúng ta xoá container tên E1 này đi thử nhé .

 

 

Tương tự tạo container tên E2 cũng dùng đĩa D1 để kiểm chứng việc xoá container E1 thì dữ liệu còn được ghi lại trên đĩa D1 không nhé.

 

docker run -it --name E2 --mount source=D1,target=/home/disk2 almalinux 

 

 

Như bạn thấy thì dữ liệu của đĩa D1 vẫn còn cho dù bạn có xoá container E1 đi .

 

Tạo ổ đĩa ánh xạ tới thư mục máy host, và mount ổ đĩa vào container -v (không dùng --mount)

 

Nếu muốn ổ đĩa bind dữ liệu đến một thư mục cụ thể của máy HOST thì tạo ổ đĩa với tham số như sau:

 

docker volume create --opt device=path_in_host --opt type=none --opt o=bind volumename

 

Ví dụ : Mình tạo ổ đĩa tên D2 ánh xạ tới thư mục sitedata ở máy host

 

docker volume create --opt device=/home/tobi/sitedata --opt type=none --opt o=bind D2

 

 

Kiểm tra lại

 

 

Tiếp theo mount ổ đĩa vào container -v (không dùng --mount)

 

docker run -it --name C3 -v D2:/home/data ubuntu

 

 

Như vậy là container có tên là C3 được tạo có thư mục data ánh xạ với ổ D2 và ánh xạ với thư mục sitedata ở máy host.

 

Xóa tất cả các ổ đĩa không được sử dụng bởi container nào:

 

docker volume prune

 

< Bài Trước. Bài Sau.>

Bình luận (0)

+ =