Chức năng, vai trò của Docker Docker cho phép phát triển, di chuyển và chạy các ứng dụng dựa vàocông nghệ ảo hóa trong linux Tự động triển khai các ứng dụng bên trong các container b
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BỘ MÔN HỆ ĐIỀU HÀNH
BÀI BÁO CÁO TIỂU LUẬN
Đề tài: Tìm hiểu hệ điều hành Docker
Trang 2PHÂN CÔNG NHIỆM VỤ NHÓM THỰC HIỆN
hoàn thành
1 Thuyết trình, nhóm trưởng, thư ký Đỗ Đức Cảnh
2 Tìm hiểu khái quát về Docker (khái
Mức hoàn thành CV
Kỹ năng giao tiếp
Kỹ năng hợp tác
Kỹ năng lãnh đạo
Trang 3Mục lục
I Giới thiệu, kiến trúc và các thành phần của Docker 4
1 Docker là gì? 4
2 Chức năng, vai trò của Docker 4
3 Một số khái niệm khi sử dụng docker 5
3.1 Dockerfile 5
3.2 Docker image 5
3.3 Registry 6
3.4 Docker container 7
4 Kiến trúc, các thành phần trong Docker 9
4.1 Các thành phần 9
4.2 Kiến trúc Docker 9
II Cài đặt Docker Desktop trên Windows 10
III Các tính năng nổi bật của hệ điều hành Docker 16
1 Container hóa (Containerisation) 16
2 Quản lý tài nguyên hiệu quả 16
2.1 Chia sẻ hệ điều hành (Operating System Sharing) 16
2.2 Sử dụng ít tài nguyên hơn (Resource Efficiency) 17
2.3 Sử dụng công nghệ Control Groups và Namespaces 17
3 Tính di động của Docker 18
3.1 Đóng gói ứng dụng trong container 19
3.2 Khả năng tương thích đa nền tảng 19
4 Khả năng sao chép, tái sử dụng và triển khai nhanh 20
5 Networking đa dạng, linh hoạt 20
6 Tích hợp dễ dàng triển khai với hệ sinh thái Devops 22
IV Vấn đề An ninh và An toàn của Docker 22
1 Các công nghệ đảm bảo tính an ninh và an toàn của Docker 23 1.1 Công nghệ Namespaces 23
1.2 Công nghệ Control Groups 24
1.3 Linux Kernel Capabilities trong Docker: Một lớp bảo mật sâu hơn 24
1.4 Xác minh chữ kí số Docker Content Trust (DCT) 25
2 Những vấn đề cần lưu ý để đảm bảo an ninh an toàn trong Docker 27
2.1 Bề mặt tấn công của Docker Deamon 27
2.2 Sử dụng các tính năng bảo mật khác của Kernel 28
V Kết luận 28
VI Tài liệu tham khảo 29
Trang 4I Giới thiệu, kiến trúc và các thành phần của Docker
1 Docker là gì?
Khi nói về docker, ta có thể đề cập đến một trong những điều sau:
Công ty Docker, Inc
Docker được đặt tên xuất phát từ cách diễn đạt dock worker
Docker có 2 phiên bản chính:
Docker Community Editon – CE: Là phiên bản miễn phí
Docker Enterprise – EE: Phiên bản này là phiên bản trả phí, khi sửdụng phiên bản này sẽ có được sự hỗ trợ từ nhà phát hành
2 Chức năng, vai trò của Docker
Docker cho phép phát triển, di chuyển và chạy các ứng dụng dựa vàocông nghệ ảo hóa trong linux
Tự động triển khai các ứng dụng bên trong các container bằng cáchcung cấp thêm một lớp trừu tượng và tự động hóa việc ảo hóa mức(OS)
Docker có thể được sử dụng trên các hệ điều hành như: Windows,Linux, MacOS
Một số lợi ích khi sử dụng docker như:
Docker giúp cho việc vận chuyển phần mềm nhanh hơn trung bình 7lần so với người dùng không sử dụng docker
Nhanh chóng triển khai, khởi động và di chuyển
Trang 5 Bảo mật
Hỗ trợ APIs để giao tiếp với các container
Việc triển khai phần mềm, khắc phục sự cố dễ dàng hơn do đượcđóng vào container nhỏ
Tiết kiệm tài nguyên và tiền bạc vì nó giúp chạy nhiều phần mềmhơn trên 1 máy chủ giúp tận dụng tối đa tài nguyên
3 Một số khái niệm khi sử dụng docker
Image được tạo thành từ nhiều layer xếp chồng lên nhau, bên trongimage là 1 hệ điều hành bị cắt giảm và tất cả các phụ thuộc cần thiết
để chạy 1 ứng dụng
Trang 6Hình 2: Tổng quan về Docker Image
Trang 73.4 Docker container
Một image có thể đước sử dụng để tạo 1 hoặc nhiều container Ta cóthể create, start, stop, move hoặc delete dựa trên Docker API hoặcDocker CLI
Hình 4: Tổng quan về Docker container
Trong mô hình container, hệ điều hành yêu cầu tất cả các tài nguyênphần cứng Trên hệ điều hành, ta cài đặt container engine là docker.Sau đó, công cụ container sẽ lấy các tài nguyên hệ điều hành và ghépchúng lại thành các cấu trúc riêng biệt được gọi là container
Mỗi container bao gồm mọi thứ cần thiết để chạy được nó: code,runtime, system tools, system libraries, setting Mỗi container như 1
hệ điều hành thực sự, bên trong mỗi container sẽ chạy 1 ứng dụng
Hình 5: Mỗi container như 1 hệ điều hành
Container và VM có sự cách ly và phân bổ tài nguyên tương tựnhưng có chức năng khác nhau vì container ảo hóa hệ điều hành thay
vì phần cứng Các container có tính portable (dễ vận chuyển) và hiệuquả hơn
Trang 8Hình 6: Cấu trúc của Container
Container nhằm làm cho các ứng dụng trở nên dễ dàng xây dựng, dichuyển và chạy Quá trình đưa 1 ứng dụng chạy trong container có đểđược hiểu như sau:
1 Đầu tiên ta bắt đầu với code app và các phụ thuộc của nó
2 Tạo Dockerfile mô tả ứng dụng, các phụ thuộc và cách chạy ứng dụng đó
3 Bulid Dockerfile thành image
4 Push image mới build vào registry(option)
5 Chạy container từ image
Hình 7: Quá trình chạy ứng dụng trong Container
Trang 94 Kiến trúc, các thành phần trong Docker
4.1 Các thành phần
Docker Engine là một ứng dụng client-server với các thành phần chính sau:
Server hay còn được gọi là docker daemon chịu trách nhiệm tạo,quản lý các Docker object như: image, containers, networks, volume
REST API được docker daemon sử dụng để cung cấp các api choclient sử dụng để thao tác với docker
Client là thành phần đầu cuối cung cấp một tập hợp các câu lệnh sửdụng API để người dùng thao tác với Docker VD: docker
image, docker ps, docker network,
Hình 8: Tổng quan về Docker daemon
4.2 Kiến trúc Docker
Client sẽ sử dụng Docker REST API để tương tác với Docker daemon
Trang 10Hình 9: Kiến trúc Docker
Docker client sử dụng kiến trúc client-server Docker client sẽ giaotiếp với Docker daemon các công việc building, running vàdistributing các Docker container
Docker daemon nghe các yêu cầu từ REST API và quản lý các đốitượng Docker như: Containers, Image, Networks và Volume Mộtdaemon cũng có thể liên lạc với các daemons khác để quản lý Dockerservices
Docker registries để cho các docker image đăng ký lưu trữ quaDocker Hub để người sử dụng có thể kéo về 1 cách dễ dàng
II Cài đặt Docker Desktop trên Windows
Bước 1: Truy cập link: Docker Desktop: The #1 Containerization Tool forDevelopers | Docker
Hình 10: Giao diện trang web
Trang 11Bước 2: Chọn phần mềm phù hợp với hệ điều hành sau đó tải về:
Hình 11: Chọn hệ điều hành thích hợp
Bước 3: Bấm đúp vào Docker Desktop Installer.exe để chạy trình cài đặt Theo mặc định, Docker Desktop được cài đặt tại C:\Program
Files\Docker\Docker.
Hình 12: Docker đã tải xong
Bước 4: Khi được nhắc, hãy đảm bảo tùy chọn Sử dụng WSL 2 thay vì
Hyper-V trên trang Cấu hình được chọn hay không tùy thuộc vào lựa chọn phụ trợ Nếu hệ thống chỉ hỗ trợ một trong hai tùy chọn, thì không thể chọn chươngtrình phụ trợ nào sẽ sử dụng
Trang 12Hình 13: Tùy chọn cài đặt
-> Nhấn OK, quá trình cài đặt sẽ bắt đầu
Hình 14: Quá trình cài đặt bắt đầu
Bước 5: Sau khi cài đặt hoàn tất, nhấn accept để bắt đầu chạy Docker
Hình 15: Nhấn accept để bắt đầu chạy
Lưu ý: Sau khi cài đặt xong thì một máy ảo Linux sẽ được tạo vì Docker sửdụng các tính năng của Linux kernel để chạy các container
Trang 13Hình 16: Máy ảo Linux được tạo
Cài đặt Docker Desktop trên Ubuntu
Bước 1: Cập nhật package của hệ thống: sudo apt update
Bước 2: Cài đặt một số gói cần thiết nhằm giúp apt có thể sử dụng package quaHTTPS:
Bước 3: Thêm mới GPG Key của Docker
Thêm mới Docker Repository vào APT:
Trang 14 Bước này sẽ cũng thêm mới các Repo vào package database của hệ thống.
Kiểm tra xem việc thay thế repo mới nhất với repo mặc định của hệ thốngxem đã được thay thế chưa
Trong output trên, lưu ý rằng docker-ce chưa được cài đặt, nhưng đã có sẵnphiên bản 5:19.03.9~3-0~ubuntu-focal trong repo sẵn sàng để cài đặt
Cài đặt Docker
Trang 15 Sau bước này, Docker sẽ được cài đặt, deamon sẽ được khởi động (DockerService chạy ngầm) và process sẽ được thêm vào boot (khởi động cùng hệthống) Để kiểm tra xem Docker Deamon đã được khởi động hay chưa,chúng ta sử dụng lệnh sau:
Kiểm tra phiên bản của docker
Trang 16III Các tính năng nổi bật của hệ điều hành Docker
1 Container hóa (Containerisation)
Container hóa (Containerisation) là một phương pháp phân tách ứng dụng vàmôi trường chạy của chúng trong các đơn vị cô lập gọi là container Mỗicontainer bao gồm tất cả những thứ cần thiết để chạy một ứng dụng cụ thể, baogồm các thư viện, phụ thuộc, cấu hình và mã nguồn Các container này có thểđược di chuyển giữa các môi trường máy chủ một cách dễ dàng, mà không cầnthay đổi mã nguồn hay cấu hình ứng dụng
Container hóa giúp tạo ra môi trường độc lập và nhất quán cho việc chạy ứngdụng trên các hệ thống khác nhau, bao gồm máy tính cá nhân, máy chủ vật lý,máy chủ ảo hoặc các dịch vụ đám mây Việc sử dụng container hóa giúp tăngtính linh hoạt, khả năng di động và khả năng mở rộng của ứng dụng
Hình 17: Container hóa
2 Quản lý tài nguyên hiệu quả
Quản lý tài nguyên hiệu quả trong Docker đề cập đến khả năng kiểm soát vàphân bổ chính xác các tài nguyên hệ thống cho từng container Đây là mộttrong những ưu điểm quan trọng của Docker so với các phương pháp ảo hóakhác Vậy cơ chế nào giúp Docker quản lý tài nguyên hiệu quả hơn so với cáccông nghệ khác
2.1 Chia sẻ hệ điều hành (Operating System Sharing)
Thay vì phải khởi chạy một hệ điều hành đầy đủ như máy ảo (VM), Dockercontainer chỉ cần chạy những phần ứng dụng và các thư viện, phụ thuộc cầnthiết, trong khi chia sẻ cùng một kernel (hạt nhân hệ điều hành) với máy chủ(host)
Trang 17Hình 18: Docker chia sẻ OS
Điều này giúp loại bỏ việc lặp lại tài nguyên giữa các hệ thống, như bộ nhớ vàCPU cần thiết cho việc chạy nhiều hệ điều hành giống nhau trong máy ảo
2.2 Sử dụng ít tài nguyên hơn (Resource Efficiency)
Vì Docker container không yêu cầu toàn bộ hệ điều hành riêng biệt, nó tiêu tốn
ít bộ nhớ (RAM) và CPU hơn Điều này cho phép một máy vật lý có thể chạyđược nhiều container hơn so với các máy ảo, tăng hiệu quả sử dụng tài nguyên
2.3 Sử dụng công nghệ Control Groups và Namespaces
( “ 2 công nghệ này sẽ được giải thích kĩ hơn ở phần “Vấn đề an ninh và Antoàn của Docker”)
Cgroups và Namespaces là hai công nghệ nền tảng giúp Docker tạo ra các môitrường container nhẹ, linh hoạt và an toàn Chúng cung cấp cơ chế để cách ly
và quản lý tài nguyên cho các tiến trình, tạo ra các môi trường độc lập cho mỗicontainer
Công nghệ Cgroups: Công nghệ để quản lý tài nguyên hiệu quả bằng các cơchế Cgroups là cơ chế giúp quản lý và kiểm soát việc sử dụng tài nguyên củacác tiến trình trong hệ thống, cụ thể là các container trong Docker
Công nghệ Namespaces: Tạo môi trường cách ly bằng các cơ chế Namespaces
là công nghệ tạo ra các không gian (namespace) riêng biệt cho các tài nguyêntrong hệ thống, giúp cách ly hoàn toàn các container với nhau và với hệ thốngchủ
Trang 18Hình 19: Công nghệ Cgroups và Namespaces
Tóm lại , Cgroups giúp quản lý và kiểm soát tài nguyên, đảm bảo rằng cáccontainer sử dụng tài nguyên một cách hợp lý và không gây ảnh hưởng đến cáccontainer khác Namespaces giúp cách ly và tạo môi trường độc lập cho cáccontainer, tăng cường bảo mật và ngăn chặn xung đột giữa các container Nhờ
sự kết hợp giữa Cgroups và Namespaces, Docker có thể xây dựng các containernhẹ, linh hoạt và bảo mật, giúp các ứng dụng chạy ổn định và hiệu quả trongmọi môi trường
Trang 19Hình 20: Tính di động
3.1 Đóng gói ứng dụng trong container
Docker container hóa ứng dụng và tất cả các phụ thuộc của nó (như thư viện,môi trường runtime, công cụ hệ thống, cài đặt cấu hình) vào một image duynhất Container này sau đó có thể chạy nhất quán trên bất kỳ môi trường nào cóDocker Engine Điều này giúp loại bỏ vấn đề phụ thuộc vào hạ tầng môi trường
vì môi trường chạy đã được chuẩn hóa trong container
3.2 Khả năng tương thích đa nền tảng
Docker container hoạt động như một môi trường chạy cô lập Điều này cónghĩa là dù hệ điều hành của hệ thống chủ (host) có sự khác biệt, ứng dụng bêntrong container vẫn sẽ hoạt động như mong đợi, vì nó đã được đóng gói cùngvới mọi thứ cần thiết để chạy Từ đó, các vấn đề xung đột phiên bản phần mềmhay thư viện trên máy chủ sẽ không ảnh hưởng đến container Do đó ,Docker
có thể được chạy trên nhiều nền tảng khác nhau mà không cần thay đổi cấuhình Các môi trường này bao gồm:
- Máy tính cá nhân của nhà phát triển (local development machine): Các nhàphát triển có thể làm việc trên máy của họ và xây dựng các container với môitrường giống như môi trường sản xuất
- Máy chủ vật lý: Các container có thể được triển khai trên các máy chủ vật lýon-premise mà không cần cài đặt thêm các gói phần mềm đặc thù
Trang 20- Máy ảo: Docker container có thể chạy trên các máy ảo mà không cần quantâm đến hệ điều hành bên dưới máy ảo.
- Cloud: Docker hỗ trợ nhiều nhà cung cấp dịch vụ đám mây như AWS,Google Cloud, Azure, v.v Điều này giúp việc triển khai ứng dụng trên các nềntảng này rất linh hoạt
4 Khả năng sao chép, tái sử dụng và triển khai nhanh
Do Docker container được đóng gói dưới dạng image, việc sao chép và triểnkhai các container mới trở nên rất nhanh chóng Các container mới có thể đượctạo ra từ image gốc mà không cần cài đặt lại từng thành phần phụ thuộc Điềunày giúp quá trình mở rộng hệ thống và di chuyển ứng dụng từ máy này sangmáy khác diễn ra dễ dàng và nhanh chóng
Hình 21: Tính sao chép, tái sử dụng và triển khai nhanh
Ngoài ra , Docker cung cấp Docker Hub, một kho lưu trữ container image trựctuyến cho phép các nhà phát triển đẩy và kéo các image giữa các môi trườngmột cách dễ dàng Điều này giúp các nhóm phát triển và vận hành không phảitốn thời gian cấu hình lại môi trường mỗi khi cần triển khai ứng dụng lên một
hệ thống mới Image đã được xây dựng chỉ cần được tải lên Docker Hub, và cóthể kéo về để chạy ở bất kỳ đâu có Docker Engine
5 Networking đa dạng, linh hoạt
Networking linh hoạt là một trong những tính năng quan trọng của Docker, chophép quản lý và cấu hình mạng giữa các container, giữa container và hệ thốngchủ, và giữa container với môi trường bên ngoài một cách dễ dàng và linh hoạt.Docker cung cấp nhiều loại mạng khác nhau để phù hợp với nhu cầu của ứngdụng:
Trang 21- Bridge Network: Đây là loại mạng mặc định cho các container Khibạn tạo một container mà không chỉ định loại mạng, Docker sẽ gán cho
nó một địa chỉ IP trong bridge network, cho phép các container giao tiếpvới nhau qua địa chỉ IP riêng
- Host Network: Container sẽ sử dụng mạng của hệ thống chủ, tức làkhông có cách ly mạng giữa container và máy chủ Điều này giúp tăngtốc độ mạng nhưng có thể gây rắc rối với các container khác
- Overlay Network: Cho phép các container chạy trên nhiều máy chủ(host) khác nhau có thể giao tiếp với nhau Điều này rất hữu ích trongcác môi trường cluster, như khi sử dụng Docker Swarm hoặc
Kubernetes
- Macvlan Network: Cung cấp một địa chỉ MAC cho mỗi container, chophép chúng xuất hiện như các thiết bị mạng riêng biệt trong mạng vật lý
Hình 22: Networking đa dạng, linh hoạt
Docker cho phép các container giao tiếp với nhau thông qua các địa chỉ IPriêng hoặc tên dịch vụ (service names) nếu bạn sử dụng Docker Composehoặc Docker Swarm Điều này giúp đơn giản hóa việc phát triển ứng dụngtheo kiến trúc microservices Docker cung cấp các lệnh và công cụ dễ dàng
để tạo, xóa và cấu hình mạng Bạn có thể dễ dàng thêm, xóa hoặc thay đổicấu hình mạng cho các container mà không cần khởi động lại hệ thống hoặccontainer
Ngoài ra, Docker hỗ trợ tạo các mạng riêng tư, giúp bảo vệ dữ liệu vàthông tin liên lạc giữa các container Bạn có thể kiểm soát quyền truy cậpvào các mạng và bảo đảm rằng chỉ những container được phép mới có thểgiao tiếp với nhau