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

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.75 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


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

………………………………………..……………………………………………………
……………………………………..………………………………………………………
…………………………………..…………………………………………………………
………………………………..……………………………………………………………
……………………………..………………………………………………………………
…………………………..…………………………………………………………………
………………………..……………………………………………………………………
……………………..………………………………………………………………………


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 hố 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 hố 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 hố và ảo hố 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 hố phần cứng.....................................................................................................................11
Cách thức hoạt động của cơng nghệ ảo hoá 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


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


4.3.

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


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


Chươ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ê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.


4.

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 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.
5.

Công cụ sử dụng


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


Chương 2. DOCKER
1.

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

1.1. 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ó.

1.1 – Sử
dụng

máy servers
mục
đích
khác
nhaucác ứng dụng lỗi thời
Tuy nhiên, Hình
với cơng
nghệ
ảo3hố,
chúng với
ta có
thể
nhét
thêm
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ụ.

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

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


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 nguyên 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 xun 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 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 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 hố 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ệc

nà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


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.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.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. Các thành phần của ảo hố 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.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
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 hố 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.5. Các loại ảo hoá 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 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 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 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 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 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á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á.


1.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 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.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.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. Phân loại các ảo hoá 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 hoá 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.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
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.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.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
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ậ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:



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


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.
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 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ả q 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ổ


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:

xếp máy
bảnContainer,
khi chạy hai
chương

bắt đầu
dòng1.1
lệnhđể biết
TrướcHình
khi2.1:
tìmMột
hiểungăn
về mơ
hìnhtính
hốcơcủa
chúng
ta trình
hãy nhìn
vàotừhình
đượ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 ngun của
máy tính để chạy hai phần mềm đó.


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


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

1.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 ngun: 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.


– 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:



×