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

Đề tài 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 (3.51 MB, 112 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN
----------

BÁO CÁO ĐỒ ÁN 2
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

Sinh viên thực hiện:

Nguyễn Thanh Hưng

19521574

Phạm Nguyễn Minh Thắng

19522216

Thành phố Hồ Chí Minh, 26 tháng 12 năm 2022

1


ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN
----------


BÁO CÁO ĐỒ ÁN 2
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

Sinh viên thực hiện:

Nguyễn Thanh Hưng

19521574

Phạm Nguyễn Minh Thắng

19522216

Thành phố Hồ Chí Minh, 26 tháng 12 năm 2022

2


LỜI CẢM ƠN

Đầu tiên, nhóm xin 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.HCM và quý 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
(Giảng viên khoa Công Nghệ Phần Mềm). Thầy đã 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 hồn thành tốt báo cáo mơn học của mình.

Trong thời gian một học 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. Từ đó, em
vận dụng tối đa những gì đã thu thập được để hồn thành một báo cáo đồ án tốt nhất. Tuy
nhiên, trong quá trình thực hiện, em khơng tránh khỏi những thiếu sót. Chính vì vậy, em
rất mong nhận được những sự góp ý từ phía Thầy nhằm hồn thiện những kiến thức mà
em đã học tập và là hành trang để em thực hiện tiếp các đề tài khác trong tương lai.
Xin chân thành cảm ơn các q Thầy Cơ!

Nhóm sinh viên thực hiện

3


ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI:
TÌM HIỂU DOCKER VÀ XÂY DỰNG ỨNG DỤNG MINH HỌA
Cán bộ hướng dẫn: ThS. Nguyễn Công Hoan
Thời gian thực hiện: Từ ngày: 19/09/2022 đến ngày: 26/12/2022
Sinh viên thực hiện:
Nguyễn Thanh Hưng – 19521574
Phạm Nguyễn Minh Thắng – 19522216
Nội dung đề tài:
1. Giới thiệu đề tài:
Ngày nay các ứng dụng càng ngày càng phát triển và mở rộng một cách nhanh
chóng, việc sử dụng máy ảo (VMs) trở thành một tiêu chuẩn để chạy các ứng dụng
nhanh chóng ngay trên một máy chủ vật l, VM cung cấp một khả năng tuyệt với
trong việc phân chia và cô lập các thành phần tài nguyên của phần cứng cho ứng
dụng, tuy nhiên chí phí cho việc tính tốn để cơ lập và ảo hóa các tài ngun phần
cứng là rất lớn ví mỗi ứng dụng phải có hệ điều hành (OS) và không gian lưu trữ
riêng.

Tuy nhiên những năm trở lại đây, các ứng dụng chạy trên container đang dần trở
thành xu hướng. Container có một cách tiếp cận khác, thay vì ảo hóa phần cứng
container ảo hóa OS (thường là Windows và Linux) vì vậy các container chỉ bao
gồm bản thân phần mềm và các thư viện phụ thuộc. Bằng các tận dụng các cơ chế
cấp thấp của OS, container cung cấp sự cô lập như máy áo. Trong bối cảnh các tổ
4


chức, doanh nghiệp đang ngày càng chuộn sử dụng dịch vụ điện toán đám mây,
container cung cấp một mức độ linh hoạt và khả năng di động hoàn hảo cho việc
triển khai và vận hành ứng dụng.
Docker là một phần mềm mã nguồn mở phổ biến nhất cung cấp các công cụ cần
thiết để quản lý và chạy các container.
2. Mục tiêu đề tài:
-

Nắm bắt và hiểu được Docker cũng như ứng dụng của nó.

-

Tìm hiểu về kiến trúc, các thành phân của Docker.

-

Xây dựng, giải quyết bài toán thực tế bằng Docker.

3. Phạm vi đề tài:
4. Đối tượng sử dụng:
-


Những người cần thường xuyên cài đặt môi trường để phát triển phần

mềm, phát triển các ứng dụng microservices.
-

Có định hướng phát triển theo hướng DevOps.

5. Phương pháp thực hiện:
-

Tìm hiểu về Virtualization, Containerization và Docker.

-

Tìm hiểu kiến trúc và các thành phần của Docker.

-

Tiến hành cài đặt và sử dụng Docker (Docker Desktop).

-

Xây dựng ứng dụng thực tế và áp dụng Docker.

6. Công nghệ sử dụng:
-

Docker, ASP.Net Core, VueJs, AWS

7. Kết quả mong đợi:

-

Nắm bắt và áp dụng được công nghệ của Docker.

-

Hiểu rõ cách vận dụng Docker trong các bài toán thực tế.

5


6


Kế hoạch thực hiện:
8.

Phân công công việc:

Công việc
Công việc chung

Mô tả cơng việc
- Tìm hiểu về Docker
- Tìm hiểu cơng nghệ.
- Phân tích, xác định, chức năng yêu cầu.
- Kiểm thử.
- Chuẩn bị tài liệu, viết báo cáo.
- Xây dựng website bán đồ lưu niệm.


Nguyễn Thanh Hưng
Công việc cá nhân

Phạm Nguyễn Minh Thắng

- Kiến trúc và các thành phần

- Tìm hiểu về Docker compose

trong Docker

-

- Lập trình Backend, xây

- Lập trình Frontend, xây dựng

dựng RESTful API.

giao diện admin.

- Thiết kế cơ sở dữ liệu.

7

Docker storage management


TP. HCM, ngày 26 tháng 12 năm 2022
Xác nhận của CBHD


Sinh viên

(Ký tên và ghi rõ họ tên)

(Ký tên và ghi rõ họ tên)

ThS. Nguyễn Công Hoan

Phạm Nguyễn Minh Thắng | Nguyễn
Thanh Hưng

8


MỤC LỤC
LỜI CẢM ƠN ......................................................................................................3
ĐỀ CƯƠNG CHI TIẾT .......................................................................................4
MỤC LỤC ............................................................................................................9
DANH MỤC HÌNH ẢNH .................................................................................13
Chương 1. TỔNG QUAN VỀ DOCKER ........................................................14
1.1

Hồn cảnh ra đời ...................................................................................14

1.1.1

Mơ hình máy chủ ...........................................................................14

1.1.2


Virtualization .................................................................................15

1.1.3

Containerization .............................................................................16

1.1.4

Lịch sử container ............................................................................17

1.1.5

So sánh Virtualization và Containerization ...................................18

Chương 2. PHẦN MỀM MÃ NGUỒN MỞ DOCKER ..................................21
2.1

Docker là gì? .........................................................................................21

2.2

Lịch sử hình thành Docker....................................................................22

2.3

Kiến trúc của Docker ............................................................................23

2.3.1


Docker engine ................................................................................24

2.3.2

Docker registry ...............................................................................24

2.3.3

Docker objects................................................................................26

Docker image .........................................................................................26
Docker container ....................................................................................32
2.4

Docker networking ...............................................................................35

2.4.1

Container networking .....................................................................36

2.4.2

Docker Drivers ...............................................................................37

Bridge .....................................................................................................38
User-defined bridge network (custom network) ....................................39
Host ........................................................................................................39
None .......................................................................................................40
Overlay ...................................................................................................41
2.4.3


Embedded DNS..............................................................................42
9


2.5

Docker Data Storage .............................................................................43

2.5.1

Volumns .........................................................................................44

2.5.2

Bind mounts ...................................................................................45

2.5.3

tmpfs...............................................................................................46

2.6

Dockerfile .............................................................................................47

2.6.1

Format ............................................................................................47

2.6.2


Enviroment .....................................................................................47

2.6.3

Instructions .....................................................................................48

FROM ....................................................................................................48
ENV ........................................................................................................48
LABEL ...................................................................................................49
MAINTAINER ......................................................................................49
USER......................................................................................................49
ADD .......................................................................................................50
COPY .....................................................................................................50
RUN .......................................................................................................50
CMD .......................................................................................................51
ENTRYPOINT .......................................................................................52
EXPOSE .................................................................................................52
ARG .......................................................................................................52
WORKDIR .............................................................................................53
VOLUME ...............................................................................................54
2.6.4

Shell form và Exec form ................................................................54

Shell form ...............................................................................................54
Exec form ...............................................................................................55
CMD và ENTRYPOINT ........................................................................56
2.6.5
2.7


Dockerignore file (.dockerignore) .................................................57

Docker build .........................................................................................57

2.7.1

Build context ..................................................................................57

2.7.2

Multi-stage build ............................................................................57
10


2.7.3

Sử dụng stage trước đó...................................................................59

2.7.4

Cache ..............................................................................................59

2.8

Vai trị của Docker ................................................................................61

Chương 3. SỬ DỤNG DOCKER ....................................................................61
3.1


Cài đặt ...................................................................................................61

3.1.1

Docker Desktop trên Windows ......................................................61

3.1.2

Docker trên Linux ..........................................................................63

3.2

Các lệnh thường dùng trong Docker .....................................................65

3.2.1

Images ............................................................................................65

3.2.2

Container ........................................................................................67

3.2.3

Network ..........................................................................................71

3.2.4

Volume ...........................................................................................74


3.3

Tạo image .............................................................................................76

3.3.1

Sử dụng Dockerfile ........................................................................76

3.3.2

Tương tác trực tiếp (interactive) ....................................................81

3.4

Lưu image bằng repository registry ......................................................84

3.5

Tạo repository registry riêng ................................................................87

Chương 4. DOCKER COMPOSE ...................................................................89
4.1

Tổng quan .............................................................................................89

4.2

Viết docker-compose file ......................................................................91

4.3


Viết Dockerfile .....................................................................................94

4.4

Viết entrypoint file ................................................................................94

Chương 5. XÂY DỰNG ỨNG DỤNG MINH HỌA ......................................95
5.1

Cài đặt Docker trên Window ................................................................95

5.2

Tổng quan ứng dụng .............................................................................97

5.2.1

Giới thiệu .......................................................................................97

5.2.2

Mục tiêu .........................................................................................97

5.2.3

Nghiệp vụ .......................................................................................97

5.3


Kiến trúc ứng dụng ...............................................................................97

5.4

Sơ đồ Use Case tổng quát .....................................................................99
11


5.5

Build image ...........................................................................................99

5.5.1

Build image cho .NET Core API server: .......................................99

5.5.2

Build image cho các trang SPA .................................................. 102

5.6

Lauch ứng dụng bằng Docker compose ............................................ 103

5.7

Demo .................................................................................................. 106

5.8


Tổng hợp ............................................................................................ 110

Chương 6. KẾT LUẬN................................................................................. 111
6.1

Kết quả đạt được ................................................................................ 111

6.2

Ưu, nhược điểm ................................................................................. 111

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

12


DANH MỤC HÌNH ẢNH
Hình 1-1 Mơ hình máy chủ ................................................................................14
Hình 1-2 Kiến trúc ảo hóa ..................................................................................16
Hình 1-3 Kiến trúc Container hóa ......................................................................17
Hình 2-1 Kiến trúc của Docker ..........................................................................24
Hình 2-2 Danh sách image .................................................................................27
Hình 2-3 Các layer trong image .........................................................................28
Hình 2-4 Các layer trong image 2 ......................................................................28
Hình 2-5 Container layer ....................................................................................29
Hình 2-6 Docker manifests ................................................................................31
Hình 2-7 Multiple - Arch image.........................................................................32
Hình 2-8 Kiến trúc của Docker Container .........................................................33
Hình 2-9 Trạng thái và vịng đời của Docker Container ....................................35
Hình 2-10 Container networking .......................................................................37

Hình 2-11 Docker drivers...................................................................................38
Hình 2-12 Bridge................................................................................................38
Hình 2-13 Host ...................................................................................................40
Hình 2-14 None ..................................................................................................41
Hình 2-15 Overlay..............................................................................................42
Hình 2-16 Embedded DNS ................................................................................43
Hình 2-17 Storage trong Docker ........................................................................44
Hình 3-1 Cài đặt Docker trên Linux thành cơng ................................................65
Hình 4-1 Ví dụ file docker-compose.yml ..........................................................90
Hình 4-2 Khai báo phiên bản và dịch vụ ...........................................................91
Hình 4-3 Cấu hình cho idrink.............................................................................91
Hình 4-4 Cấu hình cho mongodb .......................................................................93
Hình 4-5 Khai báo network ................................................................................93
Hình 4-6 Viết Dockerfile ...................................................................................94
13


Hình 4-7 Viết entrypoint file ..............................................................................94
Hình 7-1 Kiến trúc hệ thống...............................................................................98
Hình 7-2 Sơ đồ Use Case tổng quát ...................................................................99

Chương 1. TỔNG QUAN VỀ DOCKER
1.1 Hồn cảnh ra đời
1.1.1 Mơ hình máy chủ
Ban đầu các ứng dụng được chạy trên máy chủ vật lý, mơ hình server thường
thấy sẽ có 3 thành phần: máy chủ vật lý, hệ điều hành (OS), và các ứng
dụng. Khơng có cách nào để xác định, phân chia ranh giới tài nguyên cho các
ứng dụng trong máy chủ vật lý gây ra sự cố phân bổ tài nguyên, một giải pháp
cho vấn đề này là sử dụng một máy chủ vật lý cho một ứng dụng.
Nhưng đây là một giải pháp không hiệu quả và rất khó khăn trong q trình

phát triển và vận hành ứng dụng.

Hình 1-1 Mơ hình máy chủ

14


Cơng nghệ ảo hóa (Virtualization) và phần mềm giám sát máy ảo (Hypervisor)
ra đời như một giải pháp giúp giải quyết vấn đề này.
1.1.2 Virtualization
Virtualization là một tiến trình mà phần mềm được sử dụng để tạo các lớp trừu
tượng trên phần cứng cho phép ta chia các phần cứng của một máy tính thành
nhiều máy ảo (Virtual machine). Bằng việc phân chia, các máy ảo có thể chạy
độc lập với nhau, có OS, khả năng tính tốn, tài ngun riêng với nhau.
Phần mềm được sử dụng để ảo hóa gọi là Hypervisor, là một lớp ứng dụng
cho phép chạy song song nhiều OS, chia sẻ tài nguyên trên cùng một máy chủ
vật lý, có 2 loại hypervisor chính: Type 1 (Native) và Type 2 (Hosted).
o Type 1 (Native): Là một Hypervisor (còn gọi là bare-metal) chạy trực
tiếp trên phần cứng, nó nằm giữa phần cứng và một hoặc nhiều OS.
Được khởi động trước của OS và tương tác trực tiếp với Kernel. Do đó
mang lại hiệu suất cao, độ trễ thấp. Một số Hypervisor dạng này là
VMware ESXi, Microsoft Hyper-V,…
o Type 2 (Hosted): được cài đặt trên máy chủ mà trong đó có một OS đã
được cài đặt. Nó cũng chạy tương tự như các ứng dụng khác trên máy
tính. Các Hypervisor dạng này gồm VMware Workstation, Oracle
VirtualBox, …

15



Hình 1-2 Kiến trúc ảo hóa

1.1.3 Containerization
Container hóa (Containerization) là một loại chiến lược ảo hóa sử dụng
container, được nổi lên như một cách thay thế cho việc ảo hóa dựa trên
Hypervisor truyền thống để giải quyết các vấn đề của Virtualization.
Container được xây dựng dựa trên khả năng ảo hóa và tiến trình cơ lập được
tích hợp trong Linux kernel - Cgroups (control groups) phân bổ tài nguyên
giữa các tiến trình, namespace hạn chế quyền truy cập, khả năng hiển thị của
tiến trình với tài nguyên hệ thống – cho phép nhiều thành phần ứng dụng chia
sẻ tài nguyên của một phiên bản duy nhất của máy chủ vật lý. Do đó container
nhẹ và linh hoạt hơn trong việc xử lý ảo hóa, cung cấp tài nguyên nhanh hơn
và tính sẵn sàng của ứng dụng cao hơn.

16


Thay vì khởi động tồn bộ máy ảo, container chỉ đóng gói tất cả mọi thứ cần
thiết cho ứng dụng. Container bao gồm tất cả code, các phụ thuộc và thậm chí
cả OS. Điều này cho phép container chạy được ở bất cứ đâu (máy tính cá nhân,
cơ sở hạ tầng doanh nghiệp, các dịch vụ cloud).
Container sử dụng một dạng ảo hóa OS thay vì ảo hóa các phần cứng vật lý
như, tận dụng các cơ chế của OS của máy chủ để cơ lập các tiến trình và kiểm
sốt truy cập của tiến trình vào CPU, bộ nhớ, không gian lưu trữ. Container
hoạt động giống như một ứng dụng bình thường, khi cần tài ngun nó sẽ lấy
trục tiếp từ máy chủ.

Hình 1-3 Kiến trúc Container hóa

1.1.4 Lịch sử container

Tóm tắt về lịch sử phát triển của Container từ 1970 đến nay:

17


o Lệnh Chroot: Cho phép thay đổi thư mục gốc của user - để phục vụ cho
việc share tài nguyên ( vì lúc đó máy tính rất to lớn và đắt đỏ).
o Máy chủ Linux: Linux VServer là một cơ chế đóng gói có thể phân
vùng tài nguyên (hệ thống tệp, địa chỉ mạng, bộ nhớ) trên hệ thống máy
tính. Được giới thiệu vào năm 2001, ảo hóa hệ điều hành được triển
khai bằng cách các bản vá nhân Linux. Các bản vá thử nghiệm vẫn có
sẵn, nhưng bản vá ổn định cuối cùng được phát hành vào năm 2006.
o Namespace: Quản lý các tập tin riêng lẻ theo từng namespace cho người
dùng, cô lập những người dùng khác nhau trên 1 máy.
o UnionFS (file system): Tạo ra các layer lưu trử riêng lẻ, nhưng khi truy
cập thì sẽ merge lại. Nó là nền tảng cho việc khởi chạy image theo từng
layer của docker ở hiện tại.
o Cgroup: Điều khiển kiểm sốt tài ngun của các nhóm tiến trình, kết
hợp với namespace thì nó là nền tảng.
o Docker: Dựa trên những cơng nghệ trên, Docker tổng hợp, hồn thiện
cơng nghệ container, container runtime.
o Docker là cty hồn thiện cơng nghệ container tốt nhất, nhiều người sử
dụng, nên nhiều người còn lầm tưởng nó là cơng nghệ docker, nhưng
nó chỉ là phần mềm, tên đầy đủ là docker engine, hoạt động dựa trên
công nghệ container.

1.1.5 So sánh Virtualization và Containerization
Sự khác nhau:
o Cơ lập: Q trình ảo hóa dẫn đến một phiên bản OS và VM hồn tồn
bị cơ lập, trong khi q trình container hóa sẽ cơ lập máy của hệ điều

hành máy chủ và các container với nhau. Tuy nhiên, tất cả các container
đều gặp rủi ro nếu kẻ tấn cơng kiểm sốt máy chủ.
18


o Các OS khác nhau: Ảo hóa có thể lưu trữ nhiều hơn một hệ điều hành
hoàn chỉnh, mỗi hệ điều hành có nhân riêng, trong khi q trình
container hóa chạy tất cả các container thông qua chế độ người dùng
trên một HĐH.
o Hỗ trợ khách: Ảo hóa cho phép nhiều hệ điều hành được sử dụng trên
cùng một máy chủ. Mặt khác, container hóa phụ thuộc vào hệ điều hành
máy chủ, nghĩa là các bộ chứa Linux không thể chạy trên Windows và
ngược lại.
o Triển khai: Ảo hóa có nghĩa là mỗi máy ảo có trình ảo hóa riêng (Virtual
box, …). Với container hóa, Docker được sử dụng để triển khai một
container riêng lẻ hoặc Kubernetes được sử dụng để sắp xếp nhiều
container trên nhiều hệ thống.
o Lưu trữ ảo liên tục: Ảo hóa chỉ định một đĩa cứng ảo cho từng máy ảo
riêng lẻ hoặc khối thông báo máy chủ nếu bộ nhớ dùng chung được sử
dụng trên nhiều máy chủ. Với q trình container hóa, đĩa cứng cục bộ
được sử dụng để lưu trữ trên mỗi nút, với khối thông báo máy chủ để
lưu trữ được chia sẻ trên nhiều nút.
o Cân bằng tải ảo: Với ảo hóa các cụm chuyển đổi dự phịng được sử
dụng để chạy các máy ảo có hỗ trợ cân bằng tải. Vì q trình container
hóa sử dụng điều phối thơng qua Docker hoặc Kubernetes để bắt đầu
và dừng các container nên nó tối đa hóa việc sử dụng tài nguyên. Tuy
nhiên, ngừng hoạt động để cân bằng tải với container hóa xảy ra khi đạt
đến giới hạn về tài nguyên có sẵn.
o Mạng ảo hóa: Ảo hóa sử dụng bộ điều hợp mạng ảo (VNA) để hỗ trợ
kết nối mạng, chạy qua thẻ giao diện mạng chính (NIC). Với q trình

container hóa, VNA được chia thành nhiều chế độ xem biệt lập để ảo
hóa mạng nhẹ.

19


Lợi ích của ảo hóa: Ảo hóa có thể tăng khả năng mở rộng ứng dụng đồng thời
giảm chi phí:
o Tính sẵn sàng cao bằng cách lưu trữ tài nguyên ảo hóa ngay lập tức và
ngừng hoạt động sau khi q trình hồn tất.
o Tính liên tục trong kinh doanh cao hơn với khả năng khôi phục phiên
bản ảo dễ dàng thông qua sao chép và sao lưu.
o Các máy ảo có thể được triển khai nhanh chóng vì hệ điều hành cơ bản
và các phần phụ thuộc đã được tải trên trình ảo hóa.
o Tính bảo mật cao hơn vì mỗi VM sử dụng OS riêng.
Nhược điểm của ảo hóa: Mặc dù ảo hóa cung cấp khả năng chạy nhiều ứng
dụng trên một máy chủ vật lý, nhưng nó cũng có thể cản trở hiệu suất. Dưới
đây là các nhược điểm:
o Chi phí phần cứng cao.
o Việc thay đổi quy mơ có thể mất nhiều thời gian đối với nhiều phiên
bản ảo hóa, trong đó tốc độ là yếu tố then chốt.
o Các công nghệ Hypervisor luôn đi kèm với chi phí hoạt động, nghĩa là
hiệu suất thấp hơn với số lượng tài nguyên bằng nhau.
o Các máy chủ ảo chứa các phiên bản ảo hóa có thể có thêm các bản về
sau, tạo thêm gánh nặng quản lý cho bộ phận CNTT nếu không được
giám sát trong việc cập nhập, nâng cấp phiên bản phù hợp.

Lợi ích của container hóa: Bản chất khơng phụ thuộc vào nền tảng của q
trình container hóa làm cho nó trở thành một giải pháp hấp dẫn để mở rộng
quy mô các ứng dụng dựa trên đám mây:

o Container nhẹ và triển khai nhanh chóng. So với ảo hóa, trong đó mỗi
phiên bản có thể có kích thước gigabyte (do chưa cả hệ điều hành), thì
các thùng chứa có thể chỉ có kích thước megabyte (MB).
20


o Nhờ các phụ thuộc, thư viện, tệp nhị phân và tệp cấu hình được nhóm
lại với nhau, các vùng chứa có thể được triển khai lại khi cần cho bất
kỳ nền tảng hoặc mơi trường nào.
o Vì nhẹ nên container giảm chi phí phát triển và vận hành.
Nhược điểm của container hóa: Mặc dù q trình container hóa mang lại khả
năng mở rộng và sự linh hoạt khi hiện đại hóa các ứng dụng trên Cloud, nhưng
nó cũng có những hạn chế về dịch vụ:
o Container hóa được hỗ trợ tốt trên các bản phân phối dựa trên Linux,
nhưng hỗ trợ của Windows không thực sự phù hợp để sử dụng cho
doanh nghiệp (mặc dù vẫn có thể chạy nhưng đơi khi sẽ có một vài kết
quả ngồi ý muốn). Điều này giới hạn người dùng Linux trong hầu hết
các trường hợp sử dụng.
o Giám sát hàng trăm vùng chứa chứa các quy trình riêng lẻ khó hơn giám
sát nhiều quy trình trên một phiên bản máy ảo.
o Quá trình container hóa khơng phải lúc nào cũng mang lại lợi ích cho
khối lượng cơng việc và đơi khi có thể dẫn đến hiệu suất kém hơn.

Chương 2. PHẦN MỀM MÃ NGUỒN MỞ DOCKER
2.1 Docker là gì?
-

Tổng quan:
Docker là một phần mềm mã nguồn mở cho phép các nhà phát triển xây dựng,
triển khai, chạy, cập nhập và quản lý các container được phát triển bởi công ty

Docker Inc. Docker hiện đang là nền tảng phổ biến nhất trong việc đóng gói
và phân phối ứng dụng dưới dạng container.

-

Ưu điểm nổi bật:
o Docker dễ dàng sử dụng, kho tài liệu đầy đủ và cộng đồng hỗ trợ đông
đảo so với các nền tảng container khác như Containerd, BuildKit, …
o Tạo và hủy tài nguyên container rất nhanh và dễ dàng.
21


o Container rất nhỏ nên có thể chạy nhiều cùng lúc nhiều container trên
một máy chủ vật lý.
o Có tính chia sẽ và khả năng di động cao.
o Khả năng tương thích cao, sử dụng được trên hầu hết các OS: Windows,
Linux, MacOS, …
2.2 Lịch sử hình thành Docker
Với sự phát triển của cơng nghệ container hóa, Docker lần đầu tiên được phát
hành dưới dạng nền tảng mã nguồn mở vào tháng 3 năm 2013, dưới tên
dotCloud, tên này không thay đổi cho đến tháng 9 năm 2013.
Vào thời điểm Docker công bố phiên bản 1.0 vào tháng 6 năm 2014, phần
mềm đã được tải xuống một con số đáng kinh ngạc là 2,75 triệu lần. Nhưng
điều đó khơng có nghĩa là Docker là nền tảng quản lý container toàn diện.
Nhiều người dùng đã nhanh chóng chỉ ra sự thiếu bảo mật của Docker do sử
dụng daemon Docker.
Người dùng cũng tìm thấy các vấn đề với việc Docker thiếu các cơng cụ điều
phối, điều này đã thúc đẩy việc tích hợp Kubernetes. Bất chấp những hạn chế
của nó, Docker đã xoay sở để phát triển với sự trợ giúp của Amazon , công ty
đã công bố dịch vụ Amazon's Elastic Compute Cloud (EC2). Điều này cho

phép người dùng chạy Docker Container tốt hơn trên một cụm phiên bản
Amazon EC2 được quản lý.
Kể từ năm 2016, Microsoft vẫn chưa cung cấp phiên bản phần mềm để hỗ trợ
các Docker Container. Trong thời gian đó, một cơng ty cạnh tranh đã giới thiệu
phần mềm của riêng mình để đáp ứng nhu cầu của người dùng Microsoft:
WinDocks 1.0. WinDocks đã cung cấp cho người dùng các tính năng mà họ
đang chờ đợi từ Microsoft, chẳng hạn như khả năng hỗ trợ Máy chủ .NET và
SQL trong container khi chạy Windows Server.
22


Không lâu sau, Microsoft đã công bố bản xem trước công khai đầu tiên của
Windows Server Container và Docker đã nhận lại được sự ủng hộ từ người
dùng Microsoft. Vào ngày 26 tháng 9 năm 2016, Microsoft đã chính thức cung
cấp Windows Server 2016 -- được cung cấp bởi Docker, cho phép người dùng
chạy Docker Container nguyên bản trên Windows Server.
Đầu năm 2018, Docker đã thực hiện những thay đổi lớn đối với Docker EE
(Enterprise Edition), giới thiệu phiên bản 2.0 vào tháng 4 và 2.1 vào cuối năm
đó. Những bản cập nhật đó mang đến các tính năng hỗ trợ cho các môi trường
kết hợp được xây dựng bằng công nghệ khác nhau và cho phép người dùng
lựa chọn giữa Kubernetes và Swarm để điều phối. Docker đã công bố phiên
bản mới nhất của nó, Docker 3.0 , vào tháng 4 năm 2019. Docker 3.0 cung cấp
cho người dùng khả năng xây dựng các ứng dụng dựa trên container đa dịch
vụ có thể chạy trên mọi mơi trường.
2.3 Kiến trúc của Docker
o Docker sử dụng kiến trúc Client-Server, Docker client sẽ giao tiếp với Docker
deamon để thực hiện nhiều việc như build, run, deploy các phiên bản Docker
container. Docker client và deamon có thể chạy trên cùng một hệ thống hoặc
có thể kết nối client với một remote deamon. Client và deamon sử dụng REST
API để giao tiếp với nhau thông qua Unix socket hoặc network interface.

Docker Compose cũng là một client mà ta sẽ tìm hiểu ở phần sau.

23


Hình 2-1 Kiến trúc của Docker

2.3.1 Docker engine
o Docker daemon (dockerd): là một tiến trình chạy nền liên tục quản lý các
Docker images, containers, networks, volumes. Docker daemon liên tục lắng
gneh các yêu cầu Docker API và xử lý chúng. Một Docker daemon có thể
giao tiếp với các daemon khác để quản lý Docker services.
o Docker client: là một công cụ giúp người dùng giao tiếp với Docker host, khi
người dùng chạy một lệnh docker, client sẽ gửi những câu lệnh này đến
Docker daemon, các câu lệnh docker sử dụng Docker API. Docker client có
thể giao tiếp với một hoặc nhiều daemon.
o Docker API định nghĩa các interface cho phép client có thể giao tiếp với
Docker daemon.
o Docker Desktop là một phần mềm dễ dàng cài đặt và sử dụng trên môi
trường Windows và MacOS, Docker desktop đã được bao gồm Docker
daemon, Docker client, Docker compose, …
2.3.2 Docker registry

24


o Docker registry là một dịch vụ máy chủ cho phép lưu trữ, phân phôi các
Docker image và repository (1 tập hợp các image tên giống nhau chỉ khác tag)
của cá nhân, đội ngũ, tổ chức, … Docker registry hoạt động khá tương tự
Github, có thể được cung cấp bởi bên thứ 3 hoặc là dịch vụ nội bộ được xây

dựng triển.
o Docker registry là một phần mềm mã nguồn mở, được phát hành dựa trên
Apache License 2.0
o Docker Hub là một kho lưu trữ công cộng do Docker Inc. phát triển, đây là
kho lưu trữ Docker images lớn nhất. Docker Hub cung cấp các tính năng chính:
o Repository: lưu và tải các container image.
o Team & Organizations: quản lý khả năng truy cập tới các repository cá
nhân.
o Docker Official Images: tải và sử dụng các container image ổn định, an
toàn được cung cấp bởi Docker.
o Docker Verified Publisher Images: tải và sử dụng các container image
ổn định, tốt do các nhà cung cấp bên ngoài cung cấp.
o Builds: tự động build các container image khi có thay đổi từ
Github/Bitbucket
o Webhooks: kích hoạt các sự kiện sau khi lưu thành công image vào một
repository.
o Một số nhà cung cấp Docker Registry phổ biến khác như:
o Amazon Elastic Container Registry (ECR)
o Google Container Registry (GCR)
o Azure Container Registry (ACR)

25


×