Docker - Quản lý dữ liệu và volume

Phần trước: Docker - Ảnh chứa

1. Giải pháp lưu trữ dữ liệu?

Khi sử dụng Docker, chúng ta biết rằng các container được tạo ra từ các image đã có sẵn. Ví dụ với image MySQL, dù khởi động bao nhiêu lần thì vẫn dùng chung một image gốc. Vậy làm thế nào để lưu giữ dữ liệu sinh ra trong quá trình chạy container? Làm sao để dữ liệu này tồn tại vượt qua các lần khởi động lại?

Volume trong Docker là cơ chế giúp lưu trữ dữ liệu vượt qua vòng đời của container. Volume được biểu diễn dưới dạng thư mục hoặc tệp tin tồn tại trong một hoặc nhiều container, được Docker mount vào nhưng không thuộc hệ thống tệp tin liên kết (Union FS). Khi xóa hoặc tắt container, dữ liệu trong volume vẫn được giữ nguyên. Volume có thể dùng để lưu trữ dữ liệu hoặc chia sẻ dữ liệu giữa các container.

2. Lệnh Dockerfile quan trọng

**Lệnh** **Mô tả**
FROM Xác định image gốc để xây dựng image mới
MAINTAINER Thông tin tác giả quản lý image
RUN Lệnh thực thi khi build image
EXPOSE Cổng mạng được mở ra từ container
WORKDIR Thiết lập thư mục làm việc mặc định khi vào container
ENV Định nghĩa biến môi trường trong quá trình build
ADD Sao chép và giải nén file từ host vào image
COPY Sao chép file/directory từ host sang image
VOLUME Tạo volume để lưu trữ dữ liệu
CMD Lệnh khởi động container, chỉ giữ hiệu lực lệnh cuối cùng
ENTRYPOINT Khởi động ứng dụng với tham số cố định
ONBUILD Lệnh kích hoạt khi image được kế thừa

3. Đặc điểm của volume?

  • Dữ liệu có thể chia sẻ và tái sử dụng giữa các container
  • Thay đổi dữ liệu không ảnh hưởng đến bản cập nhật container
  • Dữ liệu thay đổi được áp dụng trực tiếp
  • Volume tồn tại cho đến khi không còn container nào sử dụng

4. Đồng bộ dữ liệu giữa host và container?

Khái niệm cần nắm: 1. Host: Hệ thống Linux mà chúng ta truy cập thông qua VMWare/CentOS 2. Container: Thể hiện chạy của image trên host

Yêu cầu: Tạo sự đồng bộ giữa thư mục host_data trên host và container_data trong container CentOS

Lệnh thực hiện: docker run -it -v [đường_dẫn_host]:[đường_dẫn_container] tên_container

Ví dụ: Giả sử host có thư mục /host_data, container có thư mục /container_data

  1. Tạo liên kết volume:
docker run -it -v /host_data:/container_data centos
  1. Kiểm tra thông tin volume:
docker inspect ID_container
  1. Tạo file trên host:
[root@bogon host_data]# touch sample.txt
[root@bogon host_data]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 22 14:57 sample.txt
  1. Kiểm tra trên container:
[root@7453e78d6615 /]# cd container_data/
[root@7453e78d6615 container_data]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 22 06:57 sample.txt

Dữ liệu được đồng bộ hai chiều ngay cả khi container đã tắt. Khi tạo file mới trên host:

[root@bogon host_data]# echo "Nội dung từ host" > new_file.txt

Sau khi khởi động lại container:

[root@e2fde7599c8b container_data]# cat new_file.txt 
Nội dung từ host

5. Thiết lập quyền truy cập

Để giới hạn container chỉ đọc dữ liệu:

docker run -it -v /host_data:/container_data:ro centos

Trong cấu hình này, host có thể chỉnh sửa dữ liệu, nhưng container chỉ có quyền đọc.

Thẻ: docker Volume Data Persistence dockerfile containerization

Đăng vào ngày 23 tháng 5 lúc 23:39