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
- Tạo liên kết volume:
docker run -it -v /host_data:/container_data centos
- Kiểm tra thông tin volume:
docker inspect ID_container
- 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
- 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.