Docker Images, Union file system

Docker Images,  Union file system

Có thể mọi người đã dùng docker rất rất nhiều , nhưng có những khái niệm mọi người chưa biết hoặc quên không để ý đến đó là UFS

Để có thể hiểu được về mối quan hệ giữa images và containers, chúng ta cần phải hiểu về nền tảng công nghệ cơ bản giúp tạo nên Docker, đó chính là UFS (đôi khi gọi tắt là Union Mount). Union file system cho phép nhiều file system có thể nằm chồng lên nhau (hay chuyên ngành gọi là overlaid), trong khi nhìn từ phía user lại chỉ thấy một hệ thống file thống nhất.

Files thuộc nhiều hệ thống file khác nhau có thể cùng nằm trong một folder, tuy nhiên nếu 2 file có chung path, thì file được mounted sau cùng sẽ giấu đi những file được mount trước đó.

Docker hỗ trợ vài UFS implementations khác nhau, mà chúng ta có thể kể đến AUFS, Overlay, devicemapper, BTRFS, ZFS. Implementation nào được sử dụng tuỳ thuộc vào hệ thống đang chạy, mà bạn có thể check bằng docker info. Ví dụ như hiện tại VM mình đang chạy sử dụng AUFS.


Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 13
Server Version: 18.09.7
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version:
runc version: N/A
init version: v0.18.0 (expected: fec3683b971d9c3ef73f284f176672c44b448662)
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 5.0.0-36-generic
Operating System: Ubuntu 18.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 15.11GiB
Name: ajino
ID: LIKG:4QCI:VSIT:WBTZ:NVUM:IBYI:GZA2:NFGQ:QSTP:WDGG:QEMJ:6MCD
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

Docker images được tạo thành bởi nhiều layers. Mỗi layer đó là một hệ thống file read only .

Mỗi layer được tạo bời các câu lệnh nằm trong file Dockerfile, và nằm trên layer của câu lệnh được thực hiện trước đó.

Khi một image được biến thành một container (nhờ docker run hoặc là docker create), Docker engine sẽ lấy image đó và thêm vào một file system mà có thể read-write được, đồng thời thêm vào các thông tin như IP address, tên, ID, resource limit ….

Có một chú ý nhỏ là số lượng layer là có giới hạn, ví dụ như AUFS sẽ có hard-limit là 127 layers. Do đó mà nhiều Dockerfile sẽ sử dụng thủ thuật là kết hợp nhiều linux command trong một câu lệnh RUN của Dockerfile.

Trả lời

Email của bạn sẽ không được hiển thị công khai.