Tải bản đầy đủ (.pdf) (42 trang)

Đồ án tìm hiểu docker và xây dựng ứng dụng minh họa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.67 MB, 42 trang )

ĐẠ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:
Mai Phúc Tâm

20521868
Tp Hồ Chí Minh, 2023

1


LỜ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ọc
Công nghệ thông tin – Đại học Quốc gia Tp Hồ Chí Minh và q thầy cơ khoa Cơng
nghệ 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ông
Hoan đã trực tiếp hướng dẫn tận tình, sửa chữa và đóng góp nhiều ý kiến q báu giúp em
hồ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ột bá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 mong nhận
được những sự góp ý từ phía các thầy cơ nhằm hồ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

2


NHẬN XÉT CỦA GIẢNG VIÊN
…………………………………………………………………………………………..…
………………………………………………………………………………………..……
……………………………………………………………………………………..………
…………………………………………………………………………………..…………
………………………………………………………………………………..……………
……………………………………………………………………………..………………
…………………………………………………………………………..…………………
………………………………………………………………………..……………………
……………………………………………………………………..………………………
…………………………………………………………………..…………………………
………………………………………………………………..……………………………
……………………………………………………………..………………………………
…………………………………………………………..…………………………………
………………………………………………………..……………………………………
……………………………………………………..………………………………………
…………………………………………………..…………………………………………
………………………………………………..……………………………………………

……………………………………………..………………………………………………
…………………………………………..…………………………………………………
………………………………………..……………………………………………………
……………………………………..………………………………………………………
…………………………………..…………………………………………………………
………………………………..……………………………………………………………
……………………………..………………………………………………………………
…………………………..…………………………………………………………………
………………………..……………………………………………………………………
……………………..………………………………………………………………………
3


Mụ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 hố) ..........................................................................................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.

1.3.2.
1.3.3.
1.3.4.
1.3.5.

1.4.

Software Virtualization (Ảo hoá phần mềm) .......................................................................................... 13

1.4.1.
1.4.2.
1.4.3.
1.4.4.

1.5.

Khái niệm: ................................................................................................................................................................ 13
Khác biệt giữa công nghệ ảo hoá và ảo hoá phần mềm: ......................................................................................... 13
Cách thức hoạt động của công nghệ ảo hoả phần mềm: ......................................................................................... 13
Phân loại các ảo hoá phần mềm: ............................................................................................................................. 13

Application Virtualization (Ứng dụng ảo) ............................................................................................... 13

1.5.1.
1.5.2.
1.5.3.

2.

Khái niệm.................................................................................................................................................................. 11

Khác biệt giữa công nghệ ảo hoá và ảo hoá phần cứng ........................................................................................... 11
Các thành phần của ảo hoá phần cứng .................................................................................................................... 11
Cách thức hoạt động của cơng nghệ ảo hố phần cứng .......................................................................................... 11
Các loại ảo hoá phần cứng ....................................................................................................................................... 12

Khái niệm: ................................................................................................................................................................ 13
Cách hoạt động: ....................................................................................................................................................... 14
Lưu ý:........................................................................................................................................................................ 14

Giới thiệu về Docker ................................................................................................................................. 14

2.1.

Khái niệm ............................................................................................................................................. 14

2.2.

Container ............................................................................................................................................. 16

2.2.1.
2.2.2.
2.2.3.

Khái niệm: ................................................................................................................................................................ 16
Container không phải là cơng nghệ ảo hố: ............................................................................................................. 16
Chạy phần mềm trong Container: ............................................................................................................................ 17

4



2.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.
2.7.2.
2.7.3.

2.8.

Docker Daemon (Server): ......................................................................................................................................... 25
Docker Client: ........................................................................................................................................................... 25
Docker Registry: ....................................................................................................................................................... 25


Các đối tượng khác (Docker Object) ...................................................................................................... 26

2.8.1.
2.8.2.
2.8.3.
2.8.4.
2.8.5.

Docker image ........................................................................................................................................................... 26
Docker container ...................................................................................................................................................... 26
Docker volume ......................................................................................................................................................... 26
Docker networking ................................................................................................................................................... 27
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.
3.3.

Mô tả chi tiết ................................................................................................................................ 32

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


5


4.3.

Hướng phát triển.................................................................................................................................. 41

TÀI LIỆU THAM KHẢO ............................................................................................................................ 42

6


Chương 1. GIỚI THIỆU CHUNG
1.
1.1.

Lý do chọn đề tài
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 u cầu phần mềm hỗ trợ, các gói thư viện và mơi trường riêng
biệ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ền
tả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 đặt
nhiều môi trường là một vấn đề khó khăn. Ngồi ra, cịn có các vấn đề như xung đột phần
mề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 đột
phầ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ấp

nhậ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ột
trong 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úp
chú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ác
container. Việc đóng gói ứng dụng vào các container giúp giảm thiểu rủi ro và xung đột
trong 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ất
cho 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 hố của Docker, với cơng nghệ đóng gói các
thư 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 ứng
dụ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 hố là gì, sau đó sẽ đi vào khái niệm của
Docker, 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.
7


Kết quả hướng tới

4.


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 q 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ững
sinh 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.
Công cụ sử dụng

5.

Trong quá trình xây dựng phần mềm, em đã sử dụng các cơng cụ sau:





Node.js
Express.js
MongoDB
Docker Desktop cho Windows

8


Chương 2. DOCKER
1.
1.1.

Giới thiệu về Virtualization (Cơng nghệ ảo hố)

Khái niệm

Virtualization là một q trình giúp tối ưu hố hơn phần cứng của máy tính và là
nguồn gốc của điện tốn đám mây.
Cơng nghệ giúp dev tạo ra các dịch vụ IT (các môi trường ảo) phục vụ cho nhu cầu
coding, sử dụng phần mềm để tạo ra một lớp ảo trên phần cứng của một máy tính, server,
… . Đặc biệt hơn, công nghệ này cho phép sử dụng sức mạnh như một máy thực chạy hết
công suất nhờ vào việc phân vùng tài nguyên cho nhiều người dùng hay môi trường
VD: Với phương thức truyền thống, giả sử có 3 máy server. Một máy là mail server,
một máy là web server, máy còn lại chạy các app lỗi thời. Mỗi server đều dùng với mục
đích khác nhau, và chỉ đều dùng có 30% năng suất thay vì dùng hết khả năng của nó.

Hình 1.1 – Sử dụng 3 máy servers với mục đích khác nhau

Tuy nhiên, với cơng nghệ ảo hố, chúng ta có thể nhét thêm các ứng dụng lỗi thời
và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ụng
triệ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ác
vụ.

Hình 1.2 – Tiết kiệm server thơng qua cơng nghệ ảo hố

9


Ngày nay, cơng nghệ ảo hố là một thực hành tiêu chuẩn trong tập kiến trúc doanh
nghiệ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
cấ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 ngun máy

tí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 ngun và khơng thể làm các tác vụ khác. Thay vào đó, việc hợp
nhất các ứng dụng vào mơi trường ảo hố tiết kiệm chi phí hơn cho cơng ty của bạn thơng
qua 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ưng
vớ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 sao
ché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ài
phú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ệc
bả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ôi
trườ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 gian
duy 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 số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 q
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ề q trình phát triển phần mềm. Việc
này giúp tăng tốc độ cũng như tính linh hoạt của phần mềm.
10


• Tối ưu chi phí và bảo vệ mơi trường
Nế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 hố, chi phí tiết kiệm được có thể dùng cho các cơng
việ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 đáng
kể.
1.3. Hardware Virtualization (Ảo hoá phần cứng)
1.3.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ành
khá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ặt
hiệu năng và chi phí.
1.3.2. Khác biệt giữa cơng nghệ ảo hố và ảo hố phần cứng
-

Cơng nghệ ảo hố: Là khải niệm chung cho việc tạo ra một phiên bản ảo cho một
thứ gì đó

-

Ảo hố 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.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 song
song 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ần
cứ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ăng
cầ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.3.4. Cách thức hoạt động của cơng nghệ ảo hố 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ều
má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êu
giá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ần
cứ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ới
11


phầ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
má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áy
vậ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.3.5. Các loại ảo hố phần cứng
• Ảo hố tồn phần:
Ảo hố tồ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ành
khá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 hố tương đối:
Ảo hố 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 hố này, hệ điều
hà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 hố 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 gian
ngư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 hố 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áy
tí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 hố việc ảo hoá.

12


1.4. Software Virtualization (Ảo hoá phần mềm)
1.4.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 ngun máy tính vật lí từ
end-user. Nói nơm na, nó giống như cơng nghệ ảo hố, chỉ khác là có thể phân tách các
bước cài đặt phần mềm và tạo ra cài đặt cho phần mềm ảo.
1.4.2. Khác biệt giữa cơng nghệ ảo hố và ảo hố 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ột
thứ gì đó

-

Ảo hố 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.4.3. Cách thức hoạt động của cơng nghệ ảo hoả phần mềm:
Ảo hố 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 ảo
hoả quản lý việc cấp pháp tài nguyên cho phần mềm ảo hố 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.4. Phân loại các ảo hố phần mềm:
• Hệ điều hành ảo:
Ảo hố 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ạy
bên trong container chỉ có thể thấy nội dung và các thiết bị được gán cho container, khác
vớ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 hố phần mềm loại này là một hình thức ảo hố, 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ảm
thiểu chi phí phát sinh.
1.5. Application Virtualization (Ứng dụng ảo)
1.5.1. Khái niệm:
Ứ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áy
13


tí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 hồn
tồ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.5.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ới
chúng như thể chúng được cài đặt trên máy tính địa phương
1.5.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ập
hoặ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 được
cung 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ác
tí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
2.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ận
chuyể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ột
command 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:

14


Docker cho phép chạy nhiều container trên cùng một máy chủ vật lý mà không ảnh
hưở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ép
triể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ình
phá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ển
khai ứ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 ứng
dụng trên đám mây. Các dịch vụ như Docker Swarm và Kubernetes cho phép tự động hóa
việ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 ưu
hó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 Docker
Hub, nơi người dùng có thể tìm và tải các hình ảnh container sẵn có. Ngồi ra, cộng đồng
Docker 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âng
cấ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
15


mở 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ững
mặt khác nhau.
2.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 ngun 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 được
gọ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ùng
chạ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ùng
chia 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ác
container.

-

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ường
sả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ữa
hai 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ông
thườ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ột
cơng cụ giúp tối ưu hóa q trình này bằng cách sử dụng cơng nghệ container thay vì ảo
hóa phần cứng. Trong Docker, các chương trình chạy trong container trực tiếp tương tác
vớ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ết
kiệm thời gian khởi động. Đây là một sự khác biệt quan trọng. Docker có thể chạy trong
má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ổ
16


sung cho nhau mà còn đáp ứng nhu cầu triển khai linh hoạt trong môi trường đám mây
hiện đại.
➔ Docker khơng phải là cơng nghệ ảo hố 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:

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

Trước khi tìm hiểu về mơ hình hố 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 Command
line, hay được gọi là CLI, chạy trên bộ nhớ không gian người dùng (user space). Phần
mềm chạy trong bộ nhớ này không thể nào chỉnh sửa bộ nhớ không gian nhân (kernel
space memory) được, hay nói cách khác, phần mềm sẽ dùng tồn bộ tất cả tài nguyên của
máy tính để chạy hai phần mềm đó.

17

Hình 2.1: Docker chạy 3 containers trên một bộ máy Linux cơ bản


Đố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 q trình con của Docker Daemon được gói lại trong một
container, và quá trình đấy chỉ chạy trong một phần bộ nhớ của user space. Các chương

Hình 2.3: Docker chạy 3 containers trên một bộ máy Linux cơ bản

trình chạy trong đấy chỉ có thể truy cập vào bộ nhớ và tài ngun được quy định bởi chính
container đó.
2.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.

18


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.

19


– Khó khăn trong việc mở rộng hệ thống: muốn mở rộng phải thuê thêm server, cấu
hì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. Tuy nhiê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ẽ ln chiếm 1 phần tài ngun 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 64GB
SSD và 2GB RAM. Như vậy, sẽ mất 256 GB SSD để chứa 4 máy ảo, và khi chạy cùng 4
má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:

20


Hì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 ảo hó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ủa má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.
2.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ển
là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ô ứng
dụng và dịch vụ theo yêu cầu kinh doanh một cách gần như thời gian thực.

VD:


Hình 2.7: Mối quan hệ của phụ thuộc các chương trình khác nhau

21


Hình 2.8: Các container chứa chương trình cùng phụ thuộc tương ứng

Hình 1.3 cho chúng ta ví dụ về một chương trình chạy dựa trên các thư viện được cài
mà khơng có Docker. Chúng ta có thể thấy từng thư viện phục vụ cho mục đích gì, nhưng
phải tốn kha khá thời gian để chúng ta có thể phát hiện ra điều đó.

Cịn đối với hình 1.4, sau khi sử dụng công nghệ container của Docker, việc hiểu rõ
thư viện sử dụng cho chương trình nào trở nên dễ dàng hơn cả, giúp cho việc deploy
chương trình nhanh chóng và tiện lợi hơn.
-

Cung cấp khả năng di động cao cho cơng việc, cho phép các container chạy trên
máy tính cá nhân của một nhà phát triển, trên máy chủ vật lý hoặc ảo trong trung
tâm dữ liệu, trên các nhà cung cấp đám mây hoặc trong một sự kết hợp của các
môi trường này.

Cho dù bạn đang ở đâu, Docker sẽ ln giúp chương trình của bạn có thể chạy trên
máy đó mà khơng gặp trắc trở hay rườm rà gì.
-

Cung cấp một lựa chọn hiệu quả về chi phí và có khả năng thay thế máy ảo trên
máy chủ, cho phép sử dụng nhiều tài nguyên của máy chủ để đạt được mục tiêu
kinh doanh.

Bảo vệ máy tính của bạn khỏi các tiềm ẩn rủi ro từ chương trình: virus, bugs, …


22


Hình 2.9: Trái – Một chương trình chứa virus tiếp xúc với các tài nguyên trong máy tính.
Phải – Một chương trình virus được chứa trong một container.

Giống như một nhà tù vậy, mọi thứ chạy trong container chỉ có thể truy cập tới
những gì ở trong container thơi, như hình bên phải của hình 1.7 minh hoạ vậy. Container
giới hạn phạm vi tác động mà một chương trình có thể gây ra tới các chương trình khác.
Chính vì vậy, việc xây dựng các container khoẻ cho chương trình rất quan trọng trong quá
trình hình thành lớp bảo vệ máy tính.
2.5.

Tác hại

• Các container khơng chạy với tốc độ gần như tốc độ máy gốc. Các container tiêu thụ
tài nguyên hiệu quả hơn máy ảo, nhưng các container vẫn phải đối mặt với chi phí
hiệu năng do mạng overlay, giao tiếp giữa các container, hệ thống máy chủ và các yếu
tố khác. Nếu muốn đạt hiệu năng gần như 100%, hãy sử dụng tài ngun máy gốc,
khơng phải container.
• Hệ sinh thái container bị phân mảnh. Mặc dù nền tảng Docker core là mã nguồn mở,
nhưng một số sản phẩm container khơng tương thích với nhau do sự cạnh tranh giữa
các công ty đứng sau chúng. VD: OpenShift, nền tảng dịch vụ container của Red Hat,
chỉ hoạt động với bộ điều khiển Kubernetes.
23


• Lưu trữ dữ liệu liên tục luôn phức tạp. Theo thiết kế, tất cả dữ liệu trong container sẽ
mất mãi mãi khi container tắt, trừ khi bạn lưu trữ nó ở nơi khác trước kia. Dù có một

cách để lưu trữ dữ liệu một cách liên tục trong Docker, chẳng hạn như Docker Data
Volumes, nhưng điều này có thể coi là một thách thức mà vẫn chưa được giải quyết
một cách trọn vẹn.
• Ứng dụng đồ họa khơng hoạt động tốt. Docker được thiết kế như một giải pháp triển
khai các ứng dụng máy chủ khơng địi hỏi giao diện đồ họa. Mặc dù có một số chiến
lược sáng tạo (như chuyển tiếp video X11) có thể được sử dụng để chạy ứng dụng
GUI trong container, nhưng các giải pháp này thường gặp các vấn đề khó khăn.
• Khơng phải tất cả các ứng dụng đều hưởng lợi từ container. Nói chung, chỉ có các ứng
dụng được thiết kế để chạy như một tập hợp các microservices riêng biệt mới hưởng
lợi nhiều nhất từ container. Nếu khơng, lợi ích duy nhất thực sự của Docker là nó có
thể đơn giản hóa việc giao phần mềm bằng cách cung cấp cơ chế đóng gói dễ dàng.
2.6.

Use case
• Prototype phần mềm và đóng gói
• Triển khai kiến trúc microservice
• Mơ hình hóa mạng
• Tích hợp và triển khai liên tục
• Giảm thiểu chi phí gỡ lỗi
• Chạy nhiều cơng việc trên cùng phần cứng

2.7.

Tập kiến trúc của Docker (Docker Engine)

Docker sử dụng kiến trúc client-server. Docker client giao tiếp với Docker daemon,
đóng vai trị xây dựng, chạy và phân phối các container Docker. Docker client và daemon
có thể chạy trên cùng một hệ thống, hoặc người dùng có thể kết nối một Docker client với
một Docker daemon từ xa. Docker client và daemon giao tiếp thông qua một REST API,
qua UNIX sockets hoặc một giao diện mạng. Một Docker client khác là Docker Compose,

cho phép người dùng làm việc với các ứng dụng bao gồm một tập hợp các container.

24


Hình 2.10. Tập kiến trúc của Docker

2.7.1. Docker Daemon (Server):
Daemon Docker (dockerd) lắng nghe các yêu cầu của người dùng thông qua Docker
API và khởi tạo, quản lý các Docker object như image, container, network và volume. Một
daemon cũng có thể giao tiếp với các daemon khác để quản lý các Docker service.
2.7.2. Docker Client:
Docker client (docker) là cách thức mà nhiều người dùng tương tác với Docker. Khi
bạn sử dụng các câu lệnh như docker run, client thông qua REST API (Cung cấp các
interface) sẽ gửi các lệnh này đến daemon, nơi thực hiện chúng, gọi chung là CLI
(Command Line Interface) client. Docker client có thể giao tiếp với nhiều hơn một Docker
daemon.
2.7.3. Docker Registry:
Docker registry sẽ là nơi lưu trữ các Docker image. Docker Hub là nơi lưu trữ
Docker image công khai (public registry) mà bất kỳ ai cũng có thể sử dụng và Docker
được định cấu hình mặc định để tìm image trên Docker Hub. Ngồi ra người dùng có thể
cấu hình các registry riêng tư khác để lưu trữ Docker image.

25


×