+5

[Thực hành Docker] bài 2: chia sẻ dữ liệu giữa máy host với container, giữa các container với nhau

Xin chào mọi người tiếp tục bài 2 series thực hành Docker nay chúng ta cùng tìm hiểu và thực hành với các nội dung về việc chia sẻ dữ liệu trong docker.

Chia sẻ dữ liệu trong docker là gì: chia sẻ dữ liệu trong docker là khi những dữ liệu được sử dụng ở nhiều nơi, nhiều container hoặc dữ liệu lưu trên máy host nhưng các container muốn sử dụng và sửa đổi chúng thì chúng ta sẽ chia sẻ dữ liệu đó cho các container có quyền thao tác.

Ví dụ: ta có 2 file File1.txt và File2.txt lưu trên máy host và có 3 container là container_1 container_2 và container_3, ta chia sẻ các file này cho cả 3 container đó sử dụng thì đó chính là việc chia sẻ dữ liệu trong docker

Chia sẻ dữ liệu giữa máy host và container

Ở phần thực hành này chúng ta sẽ tạo ra thư mục data bên trong có file hello.txt trên máy host và chia sẻ thư mục này với container

1. Tạo dữ liệu trên máy host

Ta tạo thư mục data tại desktop và có chứa file hello.txt

Dùng lệnh pwd thì ta lấy được đường dẫn đến thư mục này là : /home/nguyen.van.thinhb/Desktop/data

2. Chia sẻ thư mục data vừa tạo mới 1 container

Ta sẽ tạo một container từ image ubuntu và nhận dữ liệu chia sẻ là thư mục data của máy host bằng lệnh

docker run -it -v /home/nguyen.van.thinhb/Desktop/data:/home/data_container ubuntu

Để chia sẻ dữ liệu giữa máy host và container thì ta thêm vào tham số -v

Để container có thể nhận tương tác và có kết nối với terminal thì thêm tham số -it

/home/nguyen.van.thinhb/Desktop/data : là đường dẫn đến thư mục chứa dữ liệu trên máy host để chia sẻ (ta vừa dùng lệnh pwd ở trên để lấy đường dẫn này)

/home/data_container là đường dẫn đến thư mục chưá dữ liệu trên container

ubuntu là image ubuntu dùng để tạo ra container

Sau khi chạy lệnh trên ta đã tạo ra 1 container từ image ubuntu và đang đứng trong terminal của container đó, cd vào thư mục home sẽ thấy thư mục data_container và có file hello.txt => dữ liệu đã được chia sẻ từ máy host vào container

Dữ liệu giữa 2 thư mục này được map với nhau, nếu container lưu dữ liệu vào thư mục này thì cũng lưu trên host, khi xóa container thì dữ liệu vẫn được lưu trên máy host

Chia sẻ dữ liệu giữa 2 container

Bài toán: ta có thư mục data ở máy host và muốn chia sẻ thư mục này cho container_1 sử dụng, đồng thời ta cũng chia sẻ thư mục này cho container_2 sử dụng.

Ở đây ta tiếp tục sự dụng phần vừa thực hành trên (chia sẻ dữ liệu giữa máy host và container), ta đã có thư mục data ở máy host và đã chia sẻ cho 1 container như trên.

Tiếp theo ta sẽ tạo một container nữa và được chia sẻ dữ liệu từ container cũ

Vẫn ở trong container cũ ta nhấn tổ hợp phím Ctrl + p và Ctrl + q để thoát ra ngoài container nhưng vẫn chạy container đó

chạy lệnh docker ps sẽ thấy container đó vẫn đang chạy.

Giờ ta sẽ tạo một container mới được chia sẻ dữ liệu từ thư mục data_container của container tạo trước đó bằng lệnh

docker run -it --name C2 --volumes-from b7cf8479548f ubuntu

Lệnh trên ta tạo container có tên là C2 từ image ubuntu và được chia sẻ dữ liệu từ container có Id là b7cf8479548f (container tạo trước đó)

chạy xong lệnh trên thì ta đang đứng trong container C2 vừa tạo, cd vào thư mục home sẽ thấy thư mục data_container được chia sẻ

Tạo và quản lý ổ đĩa (volume), để chia sẻ dữ liệu các ổ đĩa cho các container

Ngoài cách chia sẻ dự liệu giữa máy host với các container thì trong docker còn cho phép chúng ta có thể chia sẻ dữ liệu thông qua tạo và quản lý ổ đĩa, những ổ đĩa được tạo ra và gán vào các container, khi container bị xóa thì các ổ đĩa vần còn tồn tại chúng chỉ mất đi khi ta xóa các ổ đĩa

1: Tạo ổ đĩa

Trước hết ta có lệnh docker volume ls để xem danh sách các ổ đĩa

Ở đây mình có nhiều ổ đĩa sẵn đang sử dụng

Để tạo ổ đĩa tên là D1 ta dùng lệnh: docker volume create D1

Kiểm tra thông tin 1 ổ đĩa: docker volume inspect D1

Xóa ổ đĩa : docker volume rm [Ten]

2: Gán ổ đĩa vào container

Ta đã tạo ra ổ đĩa D1 giờ chúng ta sẽ tạo 1 container và gán ổ đĩa D1 vào container đó để contaner có thể sử dụng ổ đĩa D1 bằng lệnh sau

docker run -it --name container1 --mount source=D1,target=/home/disk2 ubuntu

Lệnh trên là ta tạo container nên là container1

Tham số --mount là để gán thêm ổ đĩa khi tạo container

source=D1 là tham số ổ đĩa cần gán vào container

target=/home/disk2 với /home/disk2 là thư mục ánh xạ ổ đĩa D1 vào container

Ta thoát và xóa container đó đi thì ổ đĩa vẫn còn

3: Tạo ổ đĩa ánh xạ lên một foder trên máy host

Ta muốn tạo một ổ đĩa D2 ánh xạ cố định lên một folder có sẵn trên máy host bằng lệnh

docker volume create --opt device=/home/nguyen.van.thinhb/Desktop/data/ --opt type=none --opt o=bind D2

Tham số thứ nhất --opt device=/home/nguyen.van.thinhb/Desktop/data/ là đường dẫn đến thư mục trên máy host

Tham số thứ 2 type=none

Ổ đĩa D2 đã được tạo và ánh xạ vơi thư mục trên máy host, ta có thể kiểm tra ổ đĩa bằng lệnh docker volume inspect D2

4: tạo container kèm gán ổ đĩa ánh xạ trên local

docker run -it --name=container3 -v D2:/home/disk ubuntu

Lệnh trên tạo container tên là container3 từ image ubuntu, có gán ổ đĩa D2 vào đường dẫn /home/disk trên container3, D2 được tạo ánh xa với 1 foder trên máy host ở phần trên

Kết bài

Các bạn nên thực hành nhiều để nhớ và hiểu rõ hơn, phần sau mình sẽ viết về Network trong Docker. Cảm ơn mọi người đã theo dõi.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí