Phạm vi nghiên cứu Đồ án nghiên cứu tập trung vào việc ảo hoá của Docker, với công nghệ đóng gói cácthư viện và ứng dụng, cũng như việc quản lý, triển khai và bảo mật an ninh các contain
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO ĐỒ ÁN 1 TÌM HIỂU DOCKER VÀ XÂY DỰNG ỨNG DỤNG
MINH HỌA
Giảng viên hướng dẫn:
ThS Nguyễn Công Hoan Lớp: SE121.N11.PMCL
Sinh viên thực hiện:
Tp Hồ Chí Minh, 2023
Trang 2LỜI CẢM ƠN
Đầu tiên, em gửi lời cảm ơn chân thành đến tập thể quý thầy cô trường Đại họcCông nghệ thông tin – Đại học Quốc gia Tp Hồ Chí Minh và quý thầy cô khoa Côngnghệ phần mềm đã giúp cho em có những kiến thức cơ bản làm nền tảng để thực hiện đềtài này
Đặc biệt, em xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới thầy Nguyễn CôngHoan đã trực tiếp hướng dẫn tận tình, sửa chữa và đóng góp nhiều ý kiến quý báu giúp
em hoàn thành báo cáo môn học của mình, dù cho em không thể gặp thầy nhiều lần được
Trong thời gian một kỳ thực hiện đề tài, em đã vận dụng những kiến thức nền tảng
đã tích lũy đồng thời kết hợp với việc học hỏi và nghiên cứu những kiến thức mới Dùthời gian chuẩn bị khá ít ỏi, em vận dụng những gì đã thu thập được để hoàn thành mộtbáo cáo đồ án một cách tốt nhất Sai sót chắc chắn sẽ xảy ra, chính vì vậy, em rất mongnhận được những sự góp ý từ phía các thầy cô nhằm hoàn thiện những kiến thức mà em
đã học tập và là hành trang để em có thể thực hiện tiếp các đề tài khác trong tương lai
Thành phố Hồ Chí Minh, tháng 7 năm 2023
Sinh viên
Mai Phúc Tâm
Trang 3NHẬN XÉT CỦA GIẢNG VIÊN
……… …
……… ……
……… ………
……… …………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
……… ………
Trang 4Mục lục
Table of Contents
LỜI CẢM ƠN 2
NHẬN XÉT CỦA GIẢNG VIÊN 3
Chương 1 GIỚI THIỆU CHUNG 7
1 Lý do chọn đề tài 7
1.1 Về Docker 7
2 Phạm vi nghiên cứu 7
3 Nội dung nghiên cứu 7
4 Kết quả hướng tới 8
5 Công cụ sử dụng 8
Chương 2 DOCKER 9
1 Giới thiệu về Virtualization (Công nghệ ảo hoá) 9
1.1 Khái niệm 9
1.2 Lợi ích 10
1.3 Hardware Virtualization (Ảo hoá phần cứng) 11
1.3.1 Khái niệm 11
1.3.2 Khác biệt giữa công nghệ ảo hoá và ảo hoá phần cứng 11
1.3.3 Các thành phần của ảo hoá phần cứng 11
1.3.4 Cách thức hoạt động của công nghệ ảo hoá phần cứng 11
1.3.5 Các loại ảo hoá phần cứng 12
1.4 Software Virtualization (Ảo hoá phần mềm) 13
1.4.1 Khái niệm: 13
1.4.2 Khác biệt giữa công nghệ ảo hoá và ảo hoá phần mềm: 13
1.4.3 Cách thức hoạt động của công nghệ ảo hoả phần mềm: 13
1.4.4 Phân loại các ảo hoá phần mềm: 13
1.5 Application Virtualization (Ứng dụng ảo) 13
1.5.1 Khái niệm: 13
1.5.2 Cách hoạt động: 14
1.5.3 Lưu ý: 14
2 Giới thiệu về Docker 14
2.1 Khái niệm 14
2.2 Container 16
2.2.1 Khái niệm: 16
2.2.2 Container không phải là công nghệ ảo hoá: 16
2.2.3 Chạy phần mềm trong Container: 17
Trang 52.3 So sánh Docker và Virtual Machine 18
2.4 Lợi ích 21
2.5 Tác hại 23
2.6 Use case 24
2.7 Tập kiến trúc của Docker (Docker Engine) 24
2.7.1 Docker Daemon (Server): 25
2.7.2 Docker Client: 25
2.7.3 Docker Registry: 25
2.8 Các đối tượng khác (Docker Object) 26
2.8.1 Docker image 26
2.8.2 Docker container 26
2.8.3 Docker volume 26
2.8.4 Docker networking 27
2.8.5 Docker services 27
Chương 3 XÂY DỰNG HỆ THỐNG 28
5.1 Về ứng dụng website ghi chú 28
3.1 Xây dựng kiến trúc hệ thống 28
3.1.1 Xác định yêu cầu hệ thống 29
3.1.2 Phân tích yêu cầu hệ thống 29
3.2 Phân tích thiết kế hệ thống 30
3.2.1 Sơ đồ use case 30
3.2.1.1 Sơ đồ các use case 30
3.2.1.3 Mô tả chi tiết use case 30
3.2.2 Sơ đồ lớp 31
3.2.2.2 Mô tả chi tiết 32
3.3 Thiết kế giao diện 34
3.3.1.1 Giao diện trang chủ 34
3.3.1.2 Giao diện đăng nhập 35
3.3.1.3 Giao diện danh sách ghi chú (Khi chưa tạo ghi chú nào cả) 35
3.3.1.4 Giao diện soạn ghi chú 36
3.3.1.5 Giao diện danh sách ghi chú (sau khi có ít nhất một ghi chú) 37
3.3.1.6 Giao diện chỉnh sửa ghi chú 39
Chương 4 KẾT LUẬN 41
4.1 Kết quả đạt được 41
4.2 Hạn chế 41
Trang 64.3 Hướng phát triển 41
TÀI LIỆU THAM KHẢO 42
Trang 7Chương 1 GIỚI THIỆU CHUNG
1 Lý do chọn đề tài
1.1 Về Docker
Trong thời đại hiện đại, với sự tiến bộ đáng kinh ngạc của công nghệ, ứng dụngđược tạo ra và cập nhật liên tục, dẫn đến sự hình thành của nhiều ngôn ngữ lập trình mới.Mỗi ngôn ngữ đó thường yêu cầu phần mềm hỗ trợ, các gói thư viện và môi trường riêngbiệt Trong số đó, một số ngôn ngữ như Java và Python có thể chạy trên hầu hết các nềntảng, trong khi những ngôn ngữ khác như C# hay Swift lại có tính khá kén chọn và phụthuộc vào môi trường và hệ điều hành Đối với các ứng dụng cần triển khai, việc cài đặtnhiều môi trường là một vấn đề khó khăn Ngoài ra, còn có các vấn đề như xung đột phầnmềm, trùng port và sự khác biệt giữa các phiên bản trong quá trình phát triển Nếu vấn đềchỉ dừng lại ở việc khó cài đặt, có thể chấp nhận được Tuy nhiên, nếu xảy ra xung độtphần mềm và gây ảnh hưởng đến hoạt động của các ứng dụng, điều đó là không thể chấpnhận được
Để giải quyết vấn đề này, các công nghệ ảo hóa đã xuất hiện và Docker là mộttrong số đó Docker, là một nền tảng dành cho lập trình viên và quản trị hệ thống, giúpchúng ta phát triển, triển khai và chạy các ứng dụng thông qua việc sử dụng cáccontainer Việc đóng gói ứng dụng vào các container giúp giảm thiểu rủi ro và xung độttrong quá trình phát triển và triển khai, đồng thời tạo ra môi trường vận hành ổn định nhấtcho các ứng dụng
2 Phạm vi nghiên cứu
Đồ án nghiên cứu tập trung vào việc ảo hoá của Docker, với công nghệ đóng gói cácthư viện và ứng dụng, cũng như việc quản lý, triển khai và bảo mật an ninh các container.Một phần của nghiên cứu này cũng áp dụng các kết quả và kiến thức thu được vào một ứngdụng thực tế nhằm tăng cường sự hiểu biết và áp dụng thực tiễn
3 Nội dung nghiên cứu
Em sẽ trước tiên tìm hiểu về công nghệ ảo hoá là gì, sau đó sẽ đi vào khái niệm củaDocker, container và các khái niệm liên quan Ưu, khuyết điểm của Docker, Tính năng,Use case của nó và vài điều lưu ý khi sử dụng Docker
Trang 84 Kết quả hướng tới
Mục tiêu chính của em với đề tài này, đó chính là mở rộng kiến thức của bản thân với lĩnh vực quản trị hệ thống về Docker Các kiến thức em nhắm tới thông qua quá trình tìm hiểu và áp dụng thực tế về đồ án này giúp em có thể phát triển thêm trong việc xây dựng một môi trường cô lập ứng dụng thông qua Docker và Docker Compose Với nhữngsinh viên khác sử dụng đồ án nghiên cứu này làm tài liệu tham khảo, em mong là các tài liệu và khái niệm em soạn thảo và sưu tầm được sẽ làm nền móng để cho các bạn đấy có thể tìm hiểu và nghiên cứu sâu hơn về sự tuyệt vời của Docker
Trang 9Tuy nhiên, với công nghệ ảo hoá, chúng ta có thể nhét thêm các ứng dụng lỗi thờivào mail server, cho phép tài nguyên của server đấy được dùng một cách hiệu quả hơn.Thậm chí, phần còn lại người dùng có thể nhét thêm một tác vụ khác vào để được tận dụngtriệt để Việc này giúp giảm các khoản chi phát sinh từ việc sử dụng nhiều servers hoặc làcho mỗi server có thể làm được nhiều tác vụ khác nhau thay vì chỉ tập trung làm một tácvụ.
Ngày nay, công nghệ ảo hoá là một thực hành tiêu chuẩn trong tập kiến trúc doanhnghiệp IT, và nó cũng là một công nghệ thúc đẩy nền kinh tế đám mây Bằng việc cung
Hình 1.1 – Sử dụng 3 máy servers với mục đích khác nhau
Hình 1.2 – Tiết kiệm server thông qua công nghệ ảo hoá
Trang 10cấp các đám mây phục vụ cho người dùng thông qua các phần cứng máy tính hiện tại của
họ, các công ty cung cấp dịch vụ có thể đưa ra các chi phí hiệu quả tỉ lệ với tài nguyên máytính dùng cho khối lượng công việc của người dùng, tạo ra một thị trường màu mỡ vàphong phú cho cả đôi bên
1.2 Lợi ích
Tiết kiệm chi phí
Như ví dụ trên, Sử dụng nhiều server phần cứng riêng lẻ cho các tác vụ khác nhau sẽdẫn đến việc lãng phí tài nguyên và không thể làm các tác vụ khác Thay vào đó, việc hợpnhất các ứng dụng vào môi trường ảo hoá tiết kiệm chi phí hơn cho công ty của bạn thôngqua việc tiết kiệm tiền đáng kể cho các máy chủ
Giảm thời gian chết và tăng khả năng phục hồi
Giả sử máy vật lí của 1 công ty gặp sự cố, công ty đó phải cử 1 ai đó để sửa hoặc làthay đổi chúng, việc này sẽ tốn đến hàng giờ thậm chí có thể đến hàng ngày liền Nhưngvới môi trường ảo, việc này trở nên dễ dàng hơn, bạn có thể tự sửa chữa bằng cách saochép hoặc clone về máy ảo gặp sự cố, sửa chúng, và đưa nó lên lại, chỉ trong vỏn vẹn vàiphút – giúp tăng khả năng phục hồi mạnh mẽ và cải thiện tính liên tục trong kinh doanh
Hiệu quả và năng suất cao:
Với việc sử dụng ít server hơn, đội ngũ IT của bạn sẽ dành ít thời gian hơn trong việcbảo trì phần cứng cũng như là cơ sở hạ tầng CNTT Việc cài đặt, cập nhật và duy trì môitrường xuyên suốt các máy ảo trên một server sẽ dễ dàng hơn so với việc phải trải qua quátrình đầy gian nan và khó khăn trong việc cập nhật server này sang server khác Ít thời gianduy trì môi trường đồng nghĩa với việc tăng hiệu quả và năng suất cho đội ngũ của bạn
Tự chủ kiểm soát và DevOps
Các dev có thể thiết lập máy ảo và làm việc với nó mà không ảnh hưởng đến quátrình phát triển phần mềm của họ
VD: Khi một bản cập nhật của phần mềm được ra mắt, phương pháp truyền thống là
phải đi kiếm một máy mới, tải một nùi thư viện và modules, thiết lập môi trường chỉ đểkiểm thử chức năng mới đó Tuy nhiên, công nghệ ảo hoá này sẽ gom hết tất cả các bướcđấy chỉ trong vỏn vẹn một bước, dev/tester chỉ cần clone về máy chủ ảo cho phần mềmđấy trên máy của họ, kiểm thử môi trường, và pull về quá trình phát triển phần mềm Việcnày giúp tăng tốc độ cũng như tính linh hoạt của phần mềm
Tối ưu chi phí và bảo vệ môi trường
Trang 11Nếu mỗi công ty thiết lập ít server hơn thông qua công nghệ này, thì việc quản lítrung tâm dữ liệu sẽ được đơn giản hoá, chi phí tiết kiệm được có thể dùng cho các côngviệc khác, đồng thời lượng khí thải carbon từ các server này sẽ được giảm một lượng đángkể.
1.3 Hardware Virtualization (Ảo hoá phần cứng)
1.1 Khái niệm
Hardware virtualization là 1 phương pháp tạo phiên bản ảo của máy tính vật lí và hệđiều hành Nó sử dụng công cụ quản lý máy ảo (virtual machine manager - VMM) gọi làsiêu giám sát (hypervisor) để cung cấp các phần cứng trừu tượng cho nhiều hệ điều hànhkhác nhau, cho phép việc chia sẻ tài nguyên của phần cứng tối ưu hơn, đảm bảo về mặthiệu năng và chi phí
1.2 Khác biệt giữa công nghệ ảo hoá và ảo hoá phần cứng
- Công nghệ ảo hoá: Là khải niệm chung cho việc tạo ra một phiên bản ảo cho mộtthứ gì đó
- Ảo hoá phần cứng: Là sự cấu tạo phiên bản ảo cho tài nguyên máy tính vật lí
1.3 Các thành phần của ảo hoá phần cứng
Gồm 3 thành phần:
Lớp phần cứng, hay máy chủ ảo hoá, bao gồm các linh kiện máy chủ vật lí như CPU,
bộ nhớ, hệ thống mạng, và các ổ cứng Lớp này cần cpu lõi x86 với một hoặc nhiều CPU
để chạy tất cả các hệ điều hành khách có thể được hỗ trợ
Siêu giám sát tạo một lớp ảo hoá chạy giữa hệ điều hành và phần cứng của máy chủ,cho phép các instance của hệ điệu hành hoặc các hệ điều hành khác nhau có thể chạy songsong trên cùng một máy Siêu giám sát tách rời hệ điều hành và ứng dùng khỏi các phầncứng cơ bản của máy tính hoặc là máy chủ, từ các máy ảo sử dụng tài nguyên của nó.Máy ảo là các giả lập phần mềm của môi trường phần cứng, cung cấp các chức năngcần thiết chạy phần mềm đó trên một máy tính vật lí Một máy ảo sẽ bao gồm phần cứng
ảo, hệ điệu hành khách và phần mềm hoặc ứng dụng khách chạy trên nó
1.4 Cách thức hoạt động của công nghệ ảo hoá phần cứng
Đầu tiên, công nghệ này cho phép một máy tính vật lí hoạt động dưới dạng nhiềumáy khác nhau bằng việc tạo ra môi trường ảo Máy chủ ảo sử dụng phần mềm gọi là siêugiám sát để tạo ra một lớp ảo giữa phần mềm và phần cứng và quản lý các tài nguyên phầncứng được chia sẻ qua các hệ điều hành chủ và khách Siêu giám sát kết nối trực tiếp tớiphần cứng và cho phép nó được chia ra thành các môi trường hoặc máy ảo khác nhau Các
Trang 12máy ảo này sử dụng tài nguyên của máy chủ, bao gồm CPU, bộ nhớ và không gian lưu trữ,được phân bố cho các khách khi cần Khi các quá trình này được thực hiện trên máy chủ,
ảo hoá phần cứng được gọi là ảo hoá máy chủ
Ảo hoá phần cứng làm cho nó có thể sử dụng tối đa hiệu năng và tài nguyên của máyvật lý, và thông qua việc cô lập các máy ảo, có thể bảo vệ dữ liệu khỏi các malware
1.5 Các loại ảo hoá phần cứng
Ảo hoá toàn phần:
Ảo hoá toàn phần mô phỏng kiến trúc của phần cứng để cô lập các hệ điều hànhkhách chưa được sửa đổi để chạy độc lập với phần cứng vật lý Điều này làm cho các máy
ảo có thể có thể di động một cách tuyệt đối giữa các máy chủ
Ảo hoá tương đối:
Ảo hoá tương đối sửa đổi mã nguồn của hệ điều hành để giao tiếp thông qua các APIđược cung cấp bởi siêu giám sát (được gọi là siêu cuộc gọi) Trong ảo hoá này, hệ điềuhành khách truyền thông trực tiếp với siêu giám sát, cải thiện năng suất và hiệu quả
Ảo hoá cấp hệ điều hành và cấp hệ thống:
Ảo hoá này sử dụng các giải pháp máy tính để bàn quản lý giúp giảm thiểu thời gianngưng trệ, giảm thiểu cuộc gọi trợ giúp và cung cấp sự truy cập cần thiết cho nguồn laođộng tạm thời
Ảo hoá hỗ trợ phần cứng:
Ảo hoá này cho phép chạy các hệ điều hành khách khác nhau độc lập trên một máytính chủ bằng cách tận dụng các thành phần vật lý của máy tính để tối ưu hoá việc ảo hoá
Trang 131.4 Software Virtualization (Ảo hoá phần mềm)
1.1 Khái niệm:
Ảo hoá phần mềm là một loại phần mềm giúp che giấu tài nguyên máy tính vật lí từend-user Nói nôm na, nó giống như công nghệ ảo hoá, chỉ khác là có thể phân tách cácbước cài đặt phần mềm và tạo ra cài đặt cho phần mềm ảo
1.2 Khác biệt giữa công nghệ ảo hoá và ảo hoá phần mềm:
- Công nghệ ảo hoá: Là khải niệm chung cho việc tạo ra một phiên bản ảo cho mộtthứ gì đó
- Ảo hoá phần mềm: Là sự cấu tạo nên phiên bản ảo cho cài đặt phần mềm
1.3 Cách thức hoạt động của công nghệ ảo hoả phần mềm:
Ảo hoá phần mềm hoạt động bằng cách tạo một môi trường ảo mô phỏng phần cứng
và hệ điều hành cơ bản Điều này cho phép các phần mềm ảo hoá được chạy như thể nóđược cài đặt trên máy tính vật lí, mặc dù nó đang chạy trên môi trường ảo Phần mềm ảohoả quản lý việc cấp pháp tài nguyên cho phần mềm ảo hoá và đảm bảo rằng nó có thểtương tác với phần cứng và hệ điều hành cơ bản
1.4 Phân loại các ảo hoá phần mềm:
Hệ điều hành ảo:
Ảo hoá phần mềm loại này là một mô hình hoạt động của hệ điều hành cho phép sựtồn tại của nhiều phiên bản không gian người dùng cô lập, được gọi là containers, zones,máy chủ riêng ảo, phân vùng, môi trường ảo, hạt nhân ảo hoặc jails Các chương trình chạybên trong container chỉ có thể thấy nội dung và các thiết bị được gán cho container, khácvới chương trình chạy trên một hệ điều hành thông thường
Ứng dụng ảo:
Ảo hoá phần mềm loại này cho phép ứng dụng có thể chạy trên các máy khách ảo vàtruy cập vào tài nguyên hệ thống mà không cần thiết phải cài đặt trên máy khách
Dịch vụ ảo:
Ảo hoá phần mềm loại này là một hình thức ảo hoá, nơi nhiều dịch vụ được cung cấp
từ cùng một máy chủ Điều này giúp tăng khả năng sử dụng tài nguyên phần cứng và giảmthiểu chi phí phát sinh
1.5 Application Virtualization (Ứng dụng ảo)
1.1 Khái niệm:
Trang 14Ứng dụng ảo hóa là một công nghệ phần mềm giúp đóng gói các chương trình máytính khỏi hệ điều hành cơ sở mà chúng được thực thi Một ứng dụng được ảo hóa hoàntoàn không được cài đặt theo cách truyền thống, mặc dù nó vẫn được thực thi như thể nóđược cài đặt
1.2 Cách hoạt động:
Điều này đòi hỏi một lớp ảo hóa được chèn giữa ứng dụng và hệ điều hành Lớp này,hoặc khung, phải chạy các tập con của ứng dụng một cách ảo và không ảnh hưởng đến hệđiều hành cơ sở Các ứng dụng ảo được cài đặt trên các máy chủ được quản lý tập trung vàđược cung cấp cho người dùng dưới dạng dịch vụ theo thời gian thực và theo nhu cầu.Người dùng khởi chạy các ứng dụng ảo từ các điểm truy cập quen thuộc và tương tác vớichúng như thể chúng được cài đặt trên máy tính địa phương
1.3 Lưu ý:
Docker khác với ảo hóa ứng dụng trong nhiều cách Docker không sử dụng giả lậphoặc ảo hóa Nó chạy tất cả các mã trực tiếp trên CPU và hệ thống máy chủ, với không cóchi phí ảo hóa Docker không phải là một công nghệ ảo hóa trong nghĩa lịch sử của từ này
mà là một nền tảng cung cấp ứng dụng Docker cho phép các ứng dụng truyền thống đượccung cấp dưới dạng một tập hợp các microservices có thể tái sử dụng
Docker thuộc loại ảo hóa cấp hệ điều hành (OS-level virtualization) và sử dụng cáctính năng của Linux như chroot, namespaces và hệ thống tệp lớp để tạo ra các container
2 Giới thiệu về Docker
1.1 Khái niệm
Docker thuộc dạng ảo hoá hệ điều hành, là một nền tảng mở để phát triển, vậnchuyển và chạy các ứng dụng Docker cho phép việc áp dụng các quy tắc về đóng gói,phân phối và sử dụng phần mềm trở nên dễ dàng và hợp lý nhất có thể Với Docker, các cơ
sở hạ tầng đều có thể được xử lí tương tự như cách quản lý các ứng dụng của người dùng.Bằng cách tận dụng các phương pháp của Docker để vận chuyển, kiểm tra và triển khai mãmột cách nhanh chóng, người dùng có thể giảm đáng kể thời gian chờ đợi giữa khi viết mã
và chạy nó trên sản phẩm cuối cùng
(Giả sử một BA của phần mềm viết guide về sản phẩm của họ, như việc cài đặt thưviện và môi trường cần thiết trong mục “readme.txt” Nhưng nếu BA đấy dùng Docker để
mà phân phối sản phẩm đấy, họ chỉ cần tóm gọn hết tất cả các guide lại dưới dạng mộtcommand line và một phụ thuộc duy nhất)
Một số đặc điểm của Docker:
Độc lập và nhẹ nhàng:
Trang 15Docker cho phép chạy nhiều container trên cùng một máy chủ vật lý mà không ảnhhưởng đến nhau Các container hoạt động độc lập, giúp tối ưu hóa sử dụng tài nguyên vàtiết kiệm không gian lưu trữ Container cũng nhanh chóng và linh hoạt khi khởi động vàtắt, giúp tăng hiệu suất và đáp ứng nhanh chóng cho các ứng dụng.
Linh hoạt và di động:
Docker cho phép đóng gói và chạy các ứng dụng trên bất kỳ môi trường nào cóDocker được cài đặt, bao gồm máy tính cá nhân, máy chủ vật lý, đám mây công cộng vàđám mây riêng Điều này giúp tạo ra sự linh hoạt và di động cho các ứng dụng, cho phéptriển khai và chuyển đổi giữa các môi trường một cách dễ dàng
Tích hợp và phát triển linh hoạt:
Docker tích hợp tốt với các công cụ và quy trình phát triển hiện có, như công cụ quản
lý mã nguồn, công cụ tự động hóa và công cụ liên kết Điều này giúp tạo ra một quy trìnhphát triển linh hoạt và tiết kiệm thời gian, cho phép đẩy nhanh quá trình phát triển và triểnkhai ứng dụng
Quản lý và đám mây:
Docker cung cấp các công cụ quản lý tiện ích cho việc triển khai và quản lý các ứngdụng trên đám mây Các dịch vụ như Docker Swarm và Kubernetes cho phép tự động hóaviệc triển khai, mở rộng và quản lý các ứng dụng trong môi trường đám mây, giúp tối ưuhóa hiệu suất và độ tin cậy
Hệ sinh thái phong phú:
Docker có một hệ sinh thái phong phú với hàng ngàn hình ảnh sẵn có trên DockerHub, nơi người dùng có thể tìm và tải các hình ảnh container sẵn có Ngoài ra, cộng đồngDocker rất lớn và nhiều công cụ và tài liệu hỗ trợ, giúp người dùng nhanh chóng tìm hiểu
và giải quyết các vấn đề liên quan đến Docker
Lưu ý: Docker không phải là một ngôn ngữ lập trình, cũng không phải là framework
để dựng phần mềm Docker là một công cụ giải quyết các vấn đề như cài đặt, gỡ bỏ, nângcấp, phân phối và chạy một phần mềm Ngoài ra, việc Docker là một công cụ mã nguồn
Trang 16mở giúp mọi người đều có thể đóng góp vào nó và nó được hưởng lợi rất nhiều về nhữngmặt khác nhau.
1.2 Container
“Vào năm 1979, các hệ điều hành dạng UNIX sử dụng các môi trường thực thi để giới hạn phạm vi tài nguyên mà chương trình có thể truy cập, gọi là jail Tới năm 2005, với sự ra mắt của Sun’s Solaris 10 và Solaris Containers, container đã trở thành thuật ngữ được gọi nhiều hơn cho môi trường đấy, cùng với mục tiêu được mở rộng sang cả việc cô lập tất cả quá trình từ mọi nguồn khác trừ nơi nó được cho phép”
2.2.1 Khái niệm:
Docker cung cấp khả năng đóng gói và chạy ứng dụng trong một môi trường đượcgọi là container, được cô lập và bảo mật Sự cô lập và bảo mật này cho phép người dùngchạy nhiều container đồng thời trên một máy chủ cụ thể Container có kích thước nhẹ vàchứa đầy đủ mọi thứ cần thiết để chạy ứng dụng, do đó người dùng không cần phải phụthuộc vào những gì hiện đang được cài đặt trên máy chủ Người dùng có thể dễ dàng chia
sẻ các container trong quá trình làm việc và đảm bảo rằng tất cả mọi người người dùngchia sẻ đều nhận được cùng một container hoạt động theo cùng một cách
Docker cung cấp các công cụ và nền tảng để quản lý vòng đời của các container:
- Phát triển ứng dụng và các thành phần hỗ trợ của nó bằng cách sử dụng cáccontainer
- Container trở thành đơn vị để phân phối và kiểm tra ứng dụng của người dùng
- Khi người dùng đã sẵn sàng, triển khai ứng dụng của người dùng vào môi trườngsản xuất của người dùng dưới dạng một container hoặc dịch vụ được sắp xếp.Việc này hoạt động giống nhau cho dù môi trường sản xuất của người dùng làmột trung tâm dữ liệu cục bộ, một nhà cung cấp đám mây, hoặc sự kết hợp giữahai môi trường này
2.2.2 Container không phải là công nghệ ảo hoá:
Trong thời đại đám mây, việc triển khai máy ảo đã trở thành một phương pháp thôngthường, tuy nhiên chúng tốn nhiều thời gian và tài nguyên Docker đã xuất hiện như mộtcông cụ giúp tối ưu hóa quá trình này bằng cách sử dụng công nghệ container thay vì ảohóa phần cứng Trong Docker, các chương trình chạy trong container trực tiếp tương tácvới hạt nhân Linux của máy chủ, giúp tránh việc chạy các hệ điều hành dư thừa và tiếtkiệm thời gian khởi động Đây là một sự khác biệt quan trọng Docker có thể chạy trongmáy ảo nếu máy đó sử dụng hạt nhân Linux hiện đại Những công nghệ này không chỉ bổ
Trang 17sung cho nhau mà còn đáp ứng nhu cầu triển khai linh hoạt trong môi trường đám mâyhiện đại.
Docker không phải là công nghệ ảo hoá phần cứng Thay vào đó, nó giúp bạn sửdụng công nghệ container đã được tích hợp sẵn vào hệ điều hành kernel của bạn
2.2.3 Chạy phần mềm trong Container:
Trước khi tìm hiểu về mô hình hoá của Container, chúng ta hãy nhìn vào hình 1.1 để biếtđược phần mềm chạy trong một máy tính bình thường như thế nào Giao diện Commandline, hay được gọi là CLI, chạy trên bộ nhớ không gian người dùng (user space) Phầnmềm chạy trong bộ nhớ này không thể nào chỉnh sửa bộ nhớ không gian nhân (kernelspace memory) được, hay nói cách khác, phần mềm sẽ dùng toàn bộ tất cả tài nguyên củamáy tính để chạy hai phần mềm đó
Hình 2.1: Một ngăn xếp máy tính cơ bản khi chạy hai chương trình bắt đầu từ dòng lệnh
Trang 18Đối với hình 1.2, chúng ta có thể thấy 3 chương trình Web server, Hello World vàDatabase chạy trong các containers mà nó chỉ chiếm 1 nửa dung lượng máy tính Điều nàyđược thực hiện bởi 2 chương trình của Docker, 1 là CLI, tiếp theo là Daemon (sẽ giải thích
2 thuật ngữ này ở phần sau)
Trong 3 container kia, các quá trình con của Docker Daemon được gói lại trong mộtcontainer, và quá trình đấy chỉ chạy trong một phần bộ nhớ của user space Các chươngtrình chạy trong đấy chỉ có thể truy cập vào bộ nhớ và tài nguyên được quy định bởi chínhcontainer đó
Hình 2.1: Docker chạy 3 containers trên một bộ máy Linux cơ bản
Trang 191.3 So sánh Docker và Virtual Machine
Ngày xưa, mô hình máy chủ thường là 1 máy chủ vật lý và 1 hệ điều hành
Hình 2.4: Mô hình máy chủ truyền thống
Khi ứng dụng phát triển lên, mô hình này nảy sinh ra nhiều vấn đề, ví dụ:
– Lãng phí tài nguyên: mặc dù cấu hình máy khỏe, ổ cứng dung lượng lớn, nhưng hệthống lại không tận dụng được hết lợi thế này
Hình 2.3: Docker chạy 3 containers trên một bộ máy Linux cơ bản
Trang 20– Khó khăn trong việc mở rộng hệ thống: muốn mở rộng phải thuê thêm server, cấuhình, cân bằng tải (load balancing),…
Lúc này, công nghệ ảo hóa (vitualization) ra đời
Hình 2.5: Mô hình máy ảo VMs
Với công nghệ ảo hóa, trên cùng 1 máy chủ vật lý, có thể tạo ra nhiều hệ điều hành, tức là
sẽ chạy được nhiều ứng dụng Vậy là tài nguyên của máy được tận dụng tốt hơn Tuynhiên, việc ảo hóa này lại nảy sinh vấn đề mới:
– Ngốn tài nguyên: khi chạy 1 máy ảo, nó sẽ luôn chiếm 1 phần tài nguyên cố định.Vd: máy chủ có 512GB SSD, 16GB RAM Tạo ra 4 máy ảo Linux, mỗi máy cấp 64GBSSD và 2GB RAM Như vậy, sẽ mất 256 GB SSD để chứa 4 máy ảo, và khi chạy cùng 4máy ảo lên cùng lúc, chúng sẽ chiếm 8GB RAM Mặc dù chỉ chạy lên để không đó thôi,chưa dùng gì cả nhưng nó vẫn chiếm từng đó
– Tốn thời gian thực thi: thời gian khởi động, shutdown của các máy ảo sẽ lâu,thường là hàng phút
– Cồng kềnh: việc phải chịu tải cho cả 1 em máy ảo như vậy thì server không thếchạy hết hiệu suất được
Bước tiến hóa tiếp theo, công nghệ containerlization ra đời:
Trang 21Hình 2.6: Mô hình ảo hóa Container
Với công nghệ này, trên một máy chủ, ta sẽ sinh ra được nhiều máy con (giống với ảohóa), nhưng điều đặc biệt là các máy con (Guess OS) này đều dùng chung phần nhân củamáy mẹ (host OS) và chia sẻ với nhau tài nguyên của máy mẹ (RAM chẳng hạn) Nhưvậy việc tận dụng tài nguyên sẽ được tối ưu hơn
1.4 Lợi ích
- Giúp tối ưu vòng đời phát triển ứng dụng bằng cách cho phép các nhà phát triểnlàm việc trong môi trường chuẩn bị bằng các container, cung cấp các ứng dụng vàdịch vụ
- Cho phép điều khiển công việc một cách linh hoạt, tăng hoặc giảm quy mô ứngdụng và dịch vụ theo yêu cầu kinh doanh một cách gần như thời gian thực