Tìm hiểu cơ bản về Docker[Phần 4]

Tác giả: 24/05/2023

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

Trả lời