Docker Images, Containers và Union file system
Docker
41
White

huydx viết ngày 19/04/2016

Mọi người dùng docker từ rất lâu rồi , giờ mình mới động tay vào nên có một vài khái niệm chưa hiểu rõ, tranh thủ note lại kẻo quên.

Để có thể hiểu được về mối quan hệ giữa imagescontainers, 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ư tại VM mình đang chạy sử dụng AUFS

docker info
Containers: 3
 Running: 0
 Paused: 0
 Stopped: 3
Images: 1
Server Version: 1.11.0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 8
 Dirperm1 Supported: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: bridge null host
Kernel Version: 3.13.0-67-generic
Operating System: Ubuntu 14.04.3 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 490 MiB
Name: vagrant-ubuntu-trusty-64

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.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

huydx

118 bài viết.
1156 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
200 19
Một ngày đẹp trời, bạn quyết định viết một dịch vụ web dự định sẽ làm thay đổi cả thế giới. Dịch vụ của bạn sẽ kết nối tất cả các thiết bị di động ...
huydx viết 12 tháng trước
200 19
White
184 15
Introduction (Link) là một cuộc thi ở Nhật, và cũng chỉ có riêng ở Nhật. Đây là một cuộc thi khá đặc trưng bởi sự thú vị của cách thi của nó, những...
huydx viết gần 3 năm trước
184 15
White
148 15
Happy programmer là gì nhỉ, chắc ai đọc xong title của bài post này cũng không hiểu ý mình định nói đến là gì :D. Đầu tiên với cá nhân mình thì hap...
huydx viết hơn 4 năm trước
148 15
Bài viết liên quan
White
10 0
Một trong những trường hợp build docker image là thừa hưởng từ một image mẹ Lấy một ví dụ sau: Dockefile FROM my_repo/my_image ENTRYPOINT ech...
Lơi Rệ viết 4 năm trước
10 0
White
17 0
Công cụ này dành riêng cho những người lười muốn muốn tiết kiệm thời gian thao tác với docker bằng dòng lệnh với các lợi ích sau: + Tiết kiệm thời...
Phí Ngọc Chi viết gần 3 năm trước
17 0
White
62 17
Hôm nay có người nói với mình: "Thật ra để chạy một ứng dụng bằng docker rất đơn giản, ví dụ như node, chỉ cần vài dòng cài thêm pm2, forever rồi m...
Minh Monmen viết 4 tháng trước
62 17
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
118 bài viết.
1156 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!