Tìm hiểu cơ bản về Docker[Phần 4]
Mình sẽ trình bày tiếp chủ đề tìm hiểu cơ bản về Docker.
Phần 4 – Mount trong Docker
Khi chúng ta chạy container, container không có kiểu liên kết lưu trữ với HOST,chúng ta không thể ghi dữ liệu vào image nhưng khi container chạy nó sẽ hoạt động ở dạng writeable dạng writeable layer, lớp chồng lớp, sẽ làm tăng dung lượng của container.
Nếu như chúng ta xóa container thì toàn bộ dữ liệu sẽ mất.Docker đã nghiên cứu ra tiến trình lưu trữ , storage nằm trên HOST, dữ liệu ánh xạ vào container ,nếu như chúng ta xóa container thì lúc này dữ liệu nằm trên HOST, rất tiện cho việc lưu trữ và backup, việc ánh xạ này giống như việc tạo các mount point.Có 3 kiểu chính
- Volume : Data được lưu dưới dạng file system, được quản lý bởi Docker
- Bind mount : Dữ liệu có thể nằm ở bất kỳ đâu trên Host , không được quản lý bởi Docker
- Tmpfs : Data được chứa ở memory của máy Host, không được lưu trữ ở hệ thống file của máy chủ.Data sẽ mất khi container bị dừng hoặc xóa đi.
Bind mount hoạt động giống như sync file system vào container, nếu như xóa data trong container thì cũng giống như việc xóa file system trên Host
Như chúng ta đều biết, đặc điểm của Docker container là chúng chạy độc lập, và không ảnh hưởng đến nhau, thế nhưng vì một lí do nào đó, chúng ta lại muốn chia sẻ data giữa các container ví dụ, bạn có một 2,3 web server httpd và mong muốn khi chúng share chung các file config, hay html tĩnh >> Docker cung cấp volume để thực hiện việc đó.
Docker volume là một volume được tạo ra cho phép các container mount volume vào trong các container hay dễ hiểu hơn là docker sử dụng Volume đó thay thế cho 1 folder của container.
Mỗi volume được lưu trữ trong host file system (/var/lib/docker/volumes/), và được docker quản lí.
- Volumes giản hóa việc backup hoặc migrate hơn bind mount.
- Bạn có thể quản lý volumes sử dụng các lệnh Docker CLI và Docker API.
- Volumes làm việc được trên cả Linux và Windows container.
- Volumes có thể an toàn hơn khi chia sẻ dữ liệu giữa nhiều container.
- Volume drivers cho phép bạn lưu trữ volumes trên remote hosts or cloud providers, để mã hóa nội dung của volumes, hoặc thêm các chức năng khác.
- Các nội dung của volume mới có thể được điền trước bởi một container.
- Sử dụng volume để gắn (mount) một thư mục nào đó trong host với container.
- Sử dụng volume để chia sẻ dữ liệu giữa host và container
- Sử dụng volume để chia sẽ dữ liệu giữa các container
- Backup và Restore volume.
Bind Mount
Mình sẽ demo phần này trên Centos 7
Trên máy Host tạo /data , thêm vào /data 1 vài file.
Tải 1 images centos 7 về và run
docker pull centos:centos7.9.2009
docker images
Running container và mount
docker run -it --name C10 -h C10 --mount type=bind,source=/data,target=/data ee
Sau câu lệnh trên chúng ta đã chạy và kết nối với container qua terminal,dữ liệu đã được đồng bộ từ Host vào container.
Lưu ý trong trường hợp /data trong container đã có dữ liệu thì dữ liệu này bị ẩn đi.
Với bind mount, khi chúng ta kết thúc tiến trình container , dữ liệu của chúng ta không bị mất vì nó được lưu ở /data của Host.
docker images
docker run -it --name C11 -h C11 --mount type=bind,source=/data,target=/data 92 docker commit C11 centos7:new11 docker run -it --name C12 -h C12 6d
Volume
docker volume create v1_disk
Một volume v1_disk được tạo ra, dữ liệu nằm trong
/var/lib/docker/volumes/v1_disk/_data
Run 1 container
docker run -it --name C1 -h C1 --mount source=v1_disk,target=/data 66ba00ad3de8
cd /data
touch container
Xem ở Host
Exit container sau đó run lại để kiểm tra thử
docker ps -a docker start C1 docker attach C1
Chúng ta vẫn thấy có dữ liệu mount từ Host vào C1, khác với bind mount là điểm mount này sẽ bị mất.
Show volume
docker volume ls
docker volume inspect v1_disk
Run 1 container và mount volum với tham số -v
docker run -it --name C2 -h C2 -v v1_disk:/data 66
Trên Host tạo thêm file tại
cd /var/lib/docker/volumes/v1_disk/_data/
touch share
Chúng ta sẽ thấy 2 container C1 và C2 đều được mount chung volume v1_disk
Thư mục /data của 2 container trên đều có file share mới tạo.
Liệt kê container nào đang mount với Volume nào
docker inspect C1
docker inspect C2
Như vậy mình đã giới thiệu với các bạn các kiểu mount trong Docker, với kiểu mount tmpfs thì data ghi trên RAM, khi khởi động lại máy thì tất nhiên dữ liệu cũng mất.
Hẹn gặp lại các bạn tại các bài viết sau Phần 5 – Triển khai LAMP sử dụng Docker