TRƯỜNG ĐẠI HỌC VĂN LANG
KHOA KỸ THUẬT CƠ-ĐIỆN VÀ MÁY TÍNH
ĐỒ ÁN CUỐI KÌ:
MÔN NHẬP MÔN MẠNG MÁY TÍNH
ĐIỆN TOÁN ĐÁM MÂY
ĐỀ TÀI:
TRIỂN KHAI THỰC THI WEBSITE BẰNG DOCKER
Sinh viên thực hiện:
Mã số sinh viên Họ và tên sinh viên
2274801030013 Trần Thiên Bảo
2374801030080 Lê Thị Thúy Uyên
2374801030071 Vĩnh Bảo Trọng
2374801030409 Bùi Thanh Kim Ngân
Lớp: 233_71SENC30063_02
Gi:ng viên hướng d>n: Ths. Nguyễn Quốc Dũng
H Ch Minh, ngày 18 thng 7 năm 2024
Mục lục
LỜI MỞ ĐẦU...........................................................................................................3
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT...............................................................................4
1.1 LÝ THUYẾT VỀ DOCKER................................................................................4
1.1.1 Khái niệm về Docker.....................................................................................4
1.1.2 Thành phần của Docker................................................................................4
1.1.3 Cấu trúc của một mô hình Docker...................................................................5
1.1.4 Môi trường thực thi Docker...........................................................................6
1.2 ỨNG DỤNG CỦA DOCKER...............................................................................7
1.3 ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA DOCKER.......................................................7
CHƯƠNG 2. CHƯƠNG TRÌNH...................................................................................9
2.1 QUY TRÌNH THỰC THI CỦA MỘT HỆ THỐNG SỬ DỤNG DOCKER....................9
2.1.1 Quy trình BUILD.........................................................................................9
2.1.2 Quy trình PUSH..........................................................................................9
2.1.3 Quy trình PULL, RUN).................................................................................9
2.2 GIAO DIỆN THỰC HÀNH DOCKER.................................................................10
CHƯƠNG 3. ĐÁNH GIÁ..........................................................................................10
3.1 DANH SÁCH NHIỆM VỤ CHI TIẾT VÀ PHÂN CÔNG........................................10
3.2 ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN..................................................................12
3.2.1 Kết qu: đạt được........................................................................................12
3.2.2 Hạn chế....................................................................................................12
KẾT LUẬN............................................................................................................14
TÀI LIỆU THAM KHẢO.........................................................................................15
2 | P a g e
LỜI MỞ ĐẦU
Trong bối cảnh phát triển phần mềm ngày càng nhanh chóng phức tạp, nhu
cầu về các giải pháp triển khai ứng dụng hiệu quả linh hoạt trở nên cấp thiết.
Docker, với cách một nền tảng container hóa hàng đầu, đã đang đóng vai trò
quan trọng trong việc giải quyết vấn đề này. Theo một báo cáo gần đây, hơn 75% các
doanh nghiệp đang sử dụng hoặc đang kế hoạch sử dụng Docker. Tuy nhiên, việc
quản một lượng lớn container trong các môi trường sản xuất phức tạp vẫn một
thách thức lớn. Đồ án này sẽ tập trung vào việc xây dựng một nền tảng quản
container tự động hóa, giúp các tổ chức giảm thiểu chi phí tăng cường hiệu quả
hoạt động.
Docker cung cấp một cách tiếp cận mới để đóng gói, vận chuyển chạy các
ứng dụng, giúp các nhà phát triển xây dựng triển khai các ứng dụng một cách
nhanh chóng dễ dàng hơn. Bằng cách đóng gói ứng dụng tất cả các phụ thuộc
của vào một container, Docker đảm bảo rằng ứng dụng thể chạy một cách nhất
quán trên bất kỳ máy chủ nào có cài đặt Docker.
Tuy nhiên, việc áp dụng Docker vào các dự án thực tế cũng đặt ra nhiều thách
thức, đặc biệt là trong việc quản lýphối hợp các container, đảm bảo bảo mật và tối
ưu hóa hiệu suất. Đồ án này tập trung vào việc nghiên cứu giải quyết một trong
những vấn đề đó, cụ thể là triển khai dự án lập trình web thông qua Docker.
Qua đồ án này, chúng em mong muốn sẽ được tìm hiểu ứng dụng được vào
thực tế, tiếp thu thêm được những kiến thức mới và tạo ra được hiệu quả trong ngành
nghề lập trình. Bằng cách nghiêm túc thực hiện và không ngừng tìm hiểu để nâng cao
chất lượng của đồ án, chúng em tin rằng sẽ nêu được những điểm thu hút khi triển
khai được dự án thông qua Docker.
Nhóm chúng em xin cảm ơn giáo viên bộ môn thầy Nguyễn Quốc Dũng đã
giảng dạy hướng dẫn cho chúng em trong suốt học, cũng như thầy đã tạo nhiều
điều kiện và cơ hội để chúng em có thể học hỏi, phát huy và hoàn thành đồ án. Chúng
em kính chúc thầy sẽ thật nhiều sức khỏe trong chặn đường làm nghề giáo của
mình.
3 | P a g e
4 | P a g e
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1.1 LÝ THUYẾT VỀ DOCKER
1.1.1 Khái niệm về Docker
Docker một công cụ đóng gói phần mềm triển khai ứng dụng trong các
container. Các ứng dụng chạy trong các container được gọi các container Docker.
Docker giúp các lập trình viên chỉ cần chạy các container lên mà không cần phải lo về
việc cài các thư viện hoặc môi trường, điều này giúp các lập trình viên phát triển ứng
dụng 1 cách nhanh chóng, đảm bảo tính nhất quán giữa môi trường phát triển môi
trường triển khai.
1.1.2 Thành phần của Docker
Các thành phần cơ bản của Docker:
- Docker daemon: một tiến trình nền chạy trên một máy tính Docker host
( thiết bị cài Docker ), và quản lý các hoạt động Docker như tạo và quản lý các
container, images, networks và volumes.
- Docker client: một ứng dụng dòng lệnh hoặc giao diện người dùng đồ họa
(GUI) để tương tác với Docker daemon thực hiện các hoạt động Docker.
Docker client sử dụng Docker API để giao tiếp với Docker daemon.
- Docker images: một gói đóng gói của một ứng dụng các tài nguyên cần
thiết để chạy ứng dụng đó trong một container. Một image thể được tạo từ
một Dockerfile hoặc tải từ một kho chứa image trên internet như Docker Hub.
- Docker container: một môi trường đóng gói độc lập, chứa tất cả các thành
phần cần thiết để chạy một ứng dụng trong một môi trường lập, container
được tạo ra từ image sau khi đã đóng gói.
- Docker network: cho phép các container tương tác với nhau và với các dịch vụ
khác. Một Docker network được tạo ra để tạo một mạng ảo cho các container
chạy trên cùng một máy Docker host.
- Docker volume: Cho phép các container lưu trữ truy cập dữ liệu được sử
dụng bởi các ứng dụng. Volume giúp dữ liệu được bảo vệ giữ cho đồng bộ
giữa các container.
5 | P a g e
- Docker registry: một kho chứa image để lưu trữ các image được tạo bởi
người dùng Docker hoặc bởi các nhà cung cấp phần mềm. Docker Hub một
ví dụ về Docker registry công cộng, trong khi các tổ chức cũng có thể triển khai
một Docker registry riêng tư. Đây là nơichúng ta tải lên các image sau khi
đã build ( khá giống việc lưu trữ code trên Github ).
- Dockerfile: một tệp cấu hình định nghĩa các bước để xây dựng một image
Docker. Dockerfile chứa các chỉ thị để tải các phần mềm, công cụ cần thiết, cài
đặt các gói phụ thuộc, cấu hình ứng dụng ...
- Docker compose: công cụ được sử dụng để quản lý, triển khai tự động
hóa việc chạy nhiều container cùng một lúc.
1.1.3 Cấu trúc của một mô hình Docker
Docker sử dụng kiến trúc client – server. Docker client sử dụng một REST API
(thông qua UNIX socket, hoặc cổng mạng) để thể giao tiếp với Docker daemon,
tiến trình này thực hiện công việc tạo, chạy phân phối các Docker container.
Docker client daemon thể chạy trên cùng một hệ thống hoặc thể kết nối
Docker client với Docker daemon từ xa. Còn Docker registry sẽ nơi lưu trữ các
Docker image, ngoài ra Docker Hub 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 dùng thể cấu hình các registry riêng khác để
lưu trữ Docker image.
6 | P a g e
1.1.4 Môi trường thực thi Docker
Môi trường thực thi Docker (hay còn gọi runtime environment) một môi
trường cô lập, nhẹ và di động, được tạo ra từ một image Docker để chạy ứng dụng của
bạn. Nó cung cấp cho ứng dụng tất cả các tài nguyên cần thiết để hoạt động, bao gồm
hệ điều hành, thư viện, công cụ và các cấu hình.
Cách hoạt động của đầu tiên tạo một image Docker bằng cách viết một
Dockerfile. Dockerfile chứa các lệnh để xây dựng một môi trường hoàn chỉnh cho ứng
7 | P a g e
dụng. Sau đó khởi chạy container, từ image tạo một container. Container này một
lớp (instance) đang chạy của image và là nơi ứng dụng của bạn sẽ thực thi.
Các thành phần chính của môi trường thực thi Docker gồm:
Namespace: Mỗi container có một namespace riêng biệt cho các tài nguyên hệ
thống như PID, network, mount, IPC, UTS. Điều này giúp các container
không ảnh hưởng lẫn nhau.
Cgroups: Cơ chế để giới hạn tài nguyên của container, như CPU, memory, I/O.
Union file system: Hệ thống file ảo cho phép các lớp của image được chia sẻ và
chồng lên nhau.
Writeable layer: Một lớp trên cùng của container, nơi các thay đổi được ghi lại.
1.2 ỨNG DỤNG CỦA DOCKER
Một số ứng dụng thực tế của Docker:
Triển khai phần mềm
Triển khai ứng dụng web
Chạy các bản phân phối Linux nhẹ
Máy chủ lưu trữ
Tạo hình ảnh Linux tùy chỉnh
Tạo môi trường phát triển, phát triển ứng dụng
Kiểm thử phần mềm, ứng dụng
Sau đây một dụ minh họa thực tế cho việc tại sao ta cần dùng Docker trong lập
trình và sẽ dùng trong tình huống nào. Ví dụ ta có hai lập trình viên đang làm việc trên
một dự án sử dụng framework NestJS và yêu cầu sử dụng NodeJS. Bình thường thì cả
hai cần phải cài các thư viện cần thiết như Nodejs, npm…. Nhưng nếu người A sử
dụng MacOS cài phiên bản Node 14.x, còn người B dùng Windows cài phiên
bản Node 12.x, trong trường hợp này sẽ dễ phát sinh xung đột vì môi trường phát triển
không đồng nhất. Để tránh xung đột thì Docker sẽ giúp cung cấp một môi trường đồng
nhất giữa cả 2 bằng cách sử dụng image node:14.x, image này đã cung cấp đủ các
công cụ thư viện cần thiết để phát triển xây dựng triển khai ứng dụng Node.js.
Chính vì thế khi có nhiều lập trình viên cùng phát triển một dự án thì họ chỉ cần chạy
container lên mà không cần phải nghĩ về việc cài môi trường và các thư viện đi kèm.
8 | P a g e
1.3 ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA DOCKER
Docker một công cụ mạnh mẽ, nhưng không phải giải pháp hoàn hảo
cho mọi trường hợp. Vậy nên, Docker vẫn sẽ có ưu điểm và cả những nhược điểm, tuy
vậy sự hỗ trợ của Docker đã mang lại nhiều sự hữu ích hơn so với trước đây cho nên
ta cần biết lựa chọn sử dụng cho phù hợp với nhu cầu của cá nhân và tổ chức. Sau đây
là một vài ưu, nhược điểm của Docker
Ưu điểm:
Có thể kích hoạt nhiều hệ điều hành trên cùng một máy.
Nó rẻ hơn so với các phương pháp trước đây, do thiết lập sở hạ tầng ít hơn,
nhỏ gọn hơn.
Nếu có bất kỳ trạng thái thất bại nào cũng sẽ dễ dàng để phục hồi và bảo trì.
Cung cấp nhanh hơn các ứng dụng và tài nguyên cần thiết cho các nhiệm vụ.
Tăng năng suất, tiện lợi hiệu quả và đáp ứng cho ngành công nghệ thông tin
rất nhiều.
Nhược điểm:
Khi sử dụng nhiều container, việc quản phối hợp chúng thể trở nên
phức tạp, đặc biệt trong các môi trường lớn. Cấu hình Docker thể phức
tạp, đặc biệt khi cần phải tùy chỉnh nhiều khía cạnh khác nhau của môi trường.
Việc chạy nhiều container trên cùng một host có thể tạo ra các lỗ hổng bảo mật
nếu không được quản lý cẩn thận. Mặc dù container được cô lập, nhưng vẫn có
thể có các lỗ hổng bảo mật cho phép container truy cập vào các tài nguyên của
host.
Các Docker image có thể trở nên rất lớn, đặc biệt khi bao gồm nhiều lớp và thư
viện. Điều này thể làm chậm quá trình xây dựng triển khai tương tự,
đối với lần khởi động đầu tiên của một container thể khá chậm, đặc biệt
đối với các image lớn.
Phụ thuộc vào Docker, Việc sử dụng Docker có thể tạo ra sự phụ thuộc vào nền
tảng này, gây khó khăn cho việc chuyển đổi sang các công nghệ khác.
9 | P a g e
CHƯƠNG 2. CHƯƠNG TRÌNH
2.1 QUY TRÌNH THỰC THI CỦA MỘT HỆ THỐNG SỬ DỤNG DOCKER
2.1.1 Quy trình BUILD
Tạo Dockerfile: Đây là một tập tin văn bản chứa các lệnh để xây dựng một
image Docker. Nó định nghĩa các lớp, cài đặt phần mềm, sao chép file và các cấu hình
khác cần thiết cho ứng dụng của bạn.
Chạy lệnh build: Sử dụng lệnh docker build, cụ thể là câu lệnh (docker build -
t /tên muốn đặt cho image/.) để xây dựng image từ Dockerfile, điều đặc biệt là không
được thiếu dấu chấm cuối câu lệnh, nếu thiếu sẽ không thể chạy được trong terminal
hay cmd. Lệnh này sẽ đọc từng dòng trong Dockerfile và thực hiện các lệnh tương
ứng để tạo ra các lớp image.
Sau khi quá trình build hoàn tất thì sẽ tiếp tục tạo ra cointainer. Vì đã build
được docker nên chúng ta có thể bật command promt, windows power shell hoặc là
trên terminal của file vừa build được docker. Gõ dòng docker images để hiển thị
images hiện có. Bắt đầu chạy container thông qua lệnh: docker run -d -p 8000:80
/copy tên hoặc id của images mình muốn/ rồi nhấn enter. Lúc này trên màn hình sẽ trả
về id của container đó, ta cần vào docker để kiểm tra trên container của mình, nhấp
vào để xem trang web của mình có hiển thị lên hay không, nếu được có nghĩa đã thành
công.
2.1.2 Quy trình PUSH
Sau đây là quá trình push image lên Docker Hub:
Đầu tiên vào Docker Hub và chọn “Creat respository” để tạo kho chứa trực tiếp
tại Docker Hub.
Ta sẽ vào lại terminal hoặc các nền tảng có thể chạy các câu lệnh, gõ lệnh
docker images, xem phần container mình cần dùng có tag là gì thì ta sẽ copy hoặc ghi
nhớ để dùng cho bước tiếp theo.
Kế tiếp, gõ câu lệnh docker image push /tên_container_ muốn_ push/:/tag
name/
Tuy nhiên, nếu nhấn phím enter mà bị từ chối thì cần gõ câu lệnh docker login.
Sau đó gõ câu lệnh để push lên (docker image push /tên_container_muốn_push/:/tag
name/). Tới bước này nhưng vẫn bị từ chối thì chúng ta cần phải đổi tag name. Cách
đổi tag name có câu lệnh như sau:
docker tag /id_của_image_cần_push/ /tên_trên_respository_của_mình/ (ví dụ sau:
docker tag e76e5ae043e4 alex050104/html-demo-webvpp) rồi nhấn enter.
Và khi push lên lại thì ta sẽ dùng tag name vừa đổi và không cần dấu hai chấm
như ban đầu (ví dụ: docker image push alex050104/html-demo-webvpp).
2.1.3 Quy trình PULL, RUN)
Mở terminal hoặc command prompt để thực hiện các lệnh của Docker.
10 | P a g e
Nếu muốn push image lên Docker Hub hoặc sử dụng các repository riêng tư thì
cần đăng nhập bằng lệnh: docker login và sẽ có yêu cầu nhập username và password
của tài khoản Docker Hub.
Bắt đầu pull image bằng lệnh: docker pull /tên_người_dùng/ hoặc
/tên_image/: /tag/
Tiếp theo cần kiểm tra các image đã pull bằng câu lệnh: docker images.
Sau đó tạo một container từ image bằng lệnh: docker run -it
/image/:/tag/ /command/ (command ở đây là thực khi container khởi động, tuy nhiên
câu lệnh là tùy vào cái có trong phần mềm ta đang làm).
2.2 GIAO DIỆN THỰC HÀNH DOCKER
11 | P a g e
12 | P a g e
CHƯƠNG 3. ĐÁNH GIÁ
3.1 DANH SÁCH NHIỆM VỤ CHI TIẾT VÀ PHÂN CÔNG
STT Thành
viên
Nội dung phân công Đánh giá
mức độ
tham gia
(thang
điểm 10)
1 Lê Thị
Thúy
- Tìm hiểu khái niệm về Docker
- Tại sao nên dùng Docker
10
13 | P a g e
Uyên - Docker vs Vmware?
- Mô hình và các thành phần chính của Docker
- Tham khảo các video, tài liệu để code Docker
bằng Terminal hoặc CMD
- Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công
việc tiếp theo
2 Trần
Thiên
Bảo
- Tìm hiểu cấu trúc của mô hình Docker,
Docker Container, Docker Images, Docker
Compose, Docker Engine, Docker Hub
- Mỗi thành phần của Docker sau khi tìm hiểu
phải nêu rõ được công dụng và ví dụ cụ thể
- Lấy ví dụ trực quan về mô hình của Vmware
vs Docker => đưa ra kết luận nên sử dụng mô
hình nào? Nêu ra các ngữ cảnh khi nào sẽ sử
dụng Vmware và khi nào sẽ sử dụng Docker
- Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công
việc tiếp theo
10
3 Vĩnh
Bảo
Trọng
- Tìm hiểu các môi trường sử dụng Docker ?
(máy ảo, window, mac, linux, ubuntu…)
- Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công
việc tiếp theo
- Chuẩn bị slide thuyết trình, tìm kiếm nội
dung, hình ảnh, ví dụ cụ thể, đọc hiểu và phải
10
14 | P a g e
giải thích được
- Nghiên cứu mở rộng thêm về các lệnh khác
trong Docker (Docker ps, Docker attach,
Docker stop…)
- Tìm hiểu cách tải các images có sẵn trên
Docker Hub và sử dụng
4 Bùi
Thanh
Kim
Ngân
- Viết báo cáo, tổng hợp tư liệu, hình ảnh, code
trong quá trình làm nhóm để up lên file word,
trình bày rõ ràng, đúng định dạng, kiểm tra
chính tả, đảm bảo đúng yêu cầu môn học và
nộp bài đúng tiến độ
- Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công
việc tiếp theo
- Trong quá trình các thành viên khác code
Docker trên CMD, sẽ là người chịu trách
nhiệm kiểm tra cú pháp câu lệnh và fix lỗi(nếu
có) cho các thành viên, test dự án sau khi đã
được deploy lên Docker và push lên Docker
Hub xem đã thành công hay chưa? Sau đó lấy
dự án từ Hub về và chạy thử - bắt buộc phải
test kĩ càng thành công thì mới ghi báo cáo
- Kết nối Docker với CSDL, PHP, JS,
NodeJS… đảm bảo các image sử dụng trong
dự án khi gói vào container sẽ đầy đủ và
không thiếu xót.
10
3.2 ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN
3.2.1 Kết qu: đạt được
Sau quá trình làm việc thì nhóm đã hoàn thành được việc cài đặt
công cụ docker trong phần mềm dự án để nâng cao tính hiệu quả trong
quá trình thực hiện lập trình trong một đội nhóm. Cả nhóm đã phần nào
tìm hiểu được các tính năng cơ bản cũng như việc sử dụng Docker bằng
việc hiểu các bước thiết yếu cần phải có để cài được docker vào trong dự
án cũng như biết cách sử dụng các câu lệnh của Docker trong terminal
hoặc trực tiếp qua CMD.
15 | P a g e
Trong suốt 8 tuần, mặc dù đã hoàn tất được tiến trình tìm hiểu cũng
như ứng dụng được Docker thì chúng em vẫn chưa tìm hiểu về nhiều chức
năng chuyên sâu khác của Docker và chúng em cũng chưa nhận thấy các
chức năng đó cần thiết hay phù hợp để đưa vào dự án lần này.
3.2.2 Hạn chế
Tuy Docker là công cụ vô cùng hữu ích trong việc container hóa các ứng dụng,
giúp cho việc triển khai và quản trở nên dễ dàng hơn, nhưng vẫn tồn tại một số
hạn chế nhất định. Chẳng hạn như so với các tiến trình thông thường, việc khởi động
một container Docker thường mất nhiều thời gian n. Điều y do Docker phải
thực hiện các quá trình như tải hình ảnh, khởi động daemon và các dịch vụ bên trong
container. Mặc Docker cung cấp các chế để quản mạng giữa các container,
nhưng việc cấu hình mạng phức tạp vẫn có thể gây ra khó khăn. Đặc biệt khi làm việc
với các mạng overlay hoặc các cấu hình mạng nâng cao. Bên cạnh đó Docker cung
cấp các tính năng bảo mật cơ bản, nhưng việc đảm bảo an toàn cho các container vẫn
một thách thức. Các lỗ hổng bảo mật trong hình ảnh Docker, việc chia sẻ không
gian kernel với host có thể dẫn đến các cuộc tấn công. Hơn thế nữa, container nhẹ hơn
máy ảo, nhưng việc chạy nhiều container cùng lúc vẫn thể tiêu tốn khá nhiều tài
nguyên hệ thống, đặc biệtbộ nhớ. Ngoài ra còn có một số mặt hạn chế khác như
việc tạo ra một hình ảnh Docker có thể mất khá nhiều thời gian, đặc biệt là đối với các
ứng dụng lớnphức tạp. Để sử dụng Docker hiệu quả, người dùng cần có kiến thức
về Dockerfile, Docker Compose, mạng Docker các khái niệm liên quan. Điều này
có thể là một rào cản đối với những người mới bắt đầu. Việc gỡ lỗi các ứng dụng chạy
trong container thể phức tạp hơn so với các ứng dụng thông thường. Bởi các
container thường được cách ly với hệ thống host, việc truy cập vào các tiến trình
log của container có thể khó khăn hơn.
16 | P a g e
KẾT LUẬN
Nghiên cứu này đã tập trung vào việc ứng dụng công nghệ container hóa
Docker để xây dựng một nền tảng website chuyên biệt cho ngành hàng văn phòng
phẩm. Mục tiêu chính thông qua trải nghiệp để nghiên cứu áp dụng một giải
pháp hiệu quả, linh hoạt dễ mở rộng trong quá trình làm việc giữa nhiều lập trình
viên với nhau trong một dự án không gặp các bất lợi điều kiện hay môi
trường không đồng nhất với nhau lúc đầu.
Kết quả sau khi hoàn thành dự án cho thấy rằng việc ứng dụng Docker đã mang
lại hiệu quả đáng kể cho dự án. Docker đã giúp đỡ rất nhiều trong quá trình xây dựng
một nền tảng website đảm bảo được mặt ổn định, linh hoạt và dễ quản lý. Nhờ đó, quá
trình phát triển và triển khai website diễn ra nhanh chóng và hiệu quả hơn.
Mặc đã phân tích được những mặt tích cực tiêu cực về Docker, đã
mang lại nhiều lợi ích nhưng việc ứng dụng Docker cũng đi kèm với một số thách
thức nhất định. Việc quản một lượng lớn container thể trở nên phức tạp nếu
không công cụ quy trình phù hợp.vậy cần phải xác định từ ban đầu và xem
xét để ứng dụng hợp lý với nhu cầu của dự án, của tổ chức và cá nhân.
so với việc tám tuần để nghiên cứu về công cụ này vẫn chưa đủ để
chúng em thể hiểu về những tính năng, công dụng của Docker. Trong tương lai
chúng em mong muốn thể tiếp thu đầy đủ hơn về kiến thức của công cụ này
thể đưa vào thực tế khi triển khai các phần mềm dự án trong một đội nhóm với nhau
một cách hiệu quả và có chọn lọc.
17 | P a g e
TÀI LIỆU THAM KHẢO
https://aws.amazon.com/vi/docker/
https://www.youtube.com/watch?v=1k8pox8mkxc
https://www.youtube.com/watch?v=9D9rSlrYrDA
https://www.youtube.com/watch?v=jbd71z2Gdo4&t=455s
18 | P a g e

Preview text:

TRƯỜNG ĐẠI HỌC VĂN LANG
KHOA KỸ THUẬT CƠ-ĐIỆN VÀ MÁY TÍNH ĐỒ ÁN CUỐI KÌ:
MÔN NHẬP MÔN MẠNG MÁY TÍNH VÀ
ĐIỆN TOÁN ĐÁM MÂY ĐỀ TÀI:
TRIỂN KHAI THỰC THI WEBSITE BẰNG DOCKER
Sinh viên thực hiện: Mã số sinh viên
Họ và tên sinh viên 2274801030013 Trần Thiên Bảo 2374801030080 Lê Thị Thúy Uyên 2374801030071 Vĩnh Bảo Trọng 2374801030409 Bùi Thanh Kim Ngân
Lớp: 233_71SENC30063_02
Gi:ng viên hướng d>n: Ths. Nguyễn Quốc Dũng
H Ch Minh, ngày 18 thng 7 năm 2024 Mục lục
LỜI MỞ ĐẦU........................................................................................................... 3
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT............................................................................... 4
1.1 LÝ THUYẾT VỀ DOCKER................................................................................ 4
1.1.1 Khái niệm về Docker..................................................................................... 4
1.1.2 Thành phần của Docker................................................................................ 4
1.1.3 Cấu trúc của một mô hình Docker...................................................................5
1.1.4 Môi trường thực thi Docker...........................................................................6
1.2 ỨNG DỤNG CỦA DOCKER............................................................................... 7
1.3 ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA DOCKER.......................................................7
CHƯƠNG 2. CHƯƠNG TRÌNH...................................................................................9
2.1 QUY TRÌNH THỰC THI CỦA MỘT HỆ THỐNG SỬ DỤNG DOCKER....................9
2.1.1 Quy trình BUILD......................................................................................... 9
2.1.2 Quy trình PUSH.......................................................................................... 9
2.1.3 Quy trình PULL, RUN).................................................................................9
2.2 GIAO DIỆN THỰC HÀNH DOCKER.................................................................10
CHƯƠNG 3. ĐÁNH GIÁ.......................................................................................... 10
3.1 DANH SÁCH NHIỆM VỤ CHI TIẾT VÀ PHÂN CÔNG........................................10
3.2 ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN..................................................................12
3.2.1 Kết qu: đạt được........................................................................................12
3.2.2 Hạn chế.................................................................................................... 12
KẾT LUẬN............................................................................................................ 14
TÀI LIỆU THAM KHẢO......................................................................................... 15 2 | P a g e LỜI MỞ ĐẦU
Trong bối cảnh phát triển phần mềm ngày càng nhanh chóng và phức tạp, nhu
cầu về các giải pháp triển khai ứng dụng hiệu quả và linh hoạt trở nên cấp thiết.
Docker, với tư cách là một nền tảng container hóa hàng đầu, đã và đang đóng vai trò
quan trọng trong việc giải quyết vấn đề này. Theo một báo cáo gần đây, hơn 75% các
doanh nghiệp đang sử dụng hoặc đang có kế hoạch sử dụng Docker. Tuy nhiên, việc
quản lý một lượng lớn container trong các môi trường sản xuất phức tạp vẫn là một
thách thức lớn. Đồ án này sẽ tập trung vào việc xây dựng một nền tảng quản lý
container tự động hóa, giúp các tổ chức giảm thiểu chi phí và tăng cường hiệu quả hoạt động.
Docker cung cấp một cách tiếp cận mới để đóng gói, vận chuyển và chạy các
ứng dụng, giúp các nhà phát triển xây dựng và triển khai các ứng dụng một cách
nhanh chóng và dễ dàng hơn. Bằng cách đóng gói ứng dụng và tất cả các phụ thuộc
của nó vào một container, Docker đảm bảo rằng ứng dụng có thể chạy một cách nhất
quán trên bất kỳ máy chủ nào có cài đặt Docker.
Tuy nhiên, việc áp dụng Docker vào các dự án thực tế cũng đặt ra nhiều thách
thức, đặc biệt là trong việc quản lý và phối hợp các container, đảm bảo bảo mật và tối
ưu hóa hiệu suất. Đồ án này tập trung vào việc nghiên cứu và giải quyết một trong
những vấn đề đó, cụ thể là triển khai dự án lập trình web thông qua Docker.
Qua đồ án này, chúng em mong muốn sẽ được tìm hiểu và ứng dụng được vào
thực tế, tiếp thu thêm được những kiến thức mới và tạo ra được hiệu quả trong ngành
nghề lập trình. Bằng cách nghiêm túc thực hiện và không ngừng tìm hiểu để nâng cao
chất lượng của đồ án, chúng em tin rằng sẽ nêu được những điểm thu hút khi triển
khai được dự án thông qua Docker.
Nhóm chúng em xin cảm ơn giáo viên bộ môn là thầy Nguyễn Quốc Dũng đã
giảng dạy và hướng dẫn cho chúng em trong suốt kì học, cũng như thầy đã tạo nhiều
điều kiện và cơ hội để chúng em có thể học hỏi, phát huy và hoàn thành đồ án. Chúng
em kính chúc thầy sẽ có thật nhiều sức khỏe trong chặn đường làm nghề giáo của mình. 3 | P a g e 4 | P a g e
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1.1 LÝ THUYẾT VỀ DOCKER
1.1.1 Khái niệm về Docker
Docker là một công cụ đóng gói phần mềm và triển khai ứng dụng trong các
container. Các ứng dụng chạy trong các container được gọi là các container Docker.
Docker giúp các lập trình viên chỉ cần chạy các container lên mà không cần phải lo về
việc cài các thư viện hoặc môi trường, điều này giúp các lập trình viên phát triển ứng
dụng 1 cách nhanh chóng, đảm bảo tính nhất quán giữa môi trường phát triển và môi trường triển khai.
1.1.2 Thành phần của Docker
Các thành phần cơ bản của Docker:
- Docker daemon: Là một tiến trình nền chạy trên một máy tính Docker host
( thiết bị cài Docker ), và quản lý các hoạt động Docker như tạo và quản lý các
container, images, networks và volumes.
- Docker client: Là một ứng dụng dòng lệnh hoặc giao diện người dùng đồ họa
(GUI) để tương tác với Docker daemon và thực hiện các hoạt động Docker.
Docker client sử dụng Docker API để giao tiếp với Docker daemon.
- Docker images: Là một gói đóng gói của một ứng dụng và các tài nguyên cần
thiết để chạy ứng dụng đó trong một container. Một image có thể được tạo từ
một Dockerfile hoặc tải từ một kho chứa image trên internet như Docker Hub.
- Docker container: Là một môi trường đóng gói độc lập, chứa tất cả các thành
phần cần thiết để chạy một ứng dụng trong một môi trường cô lập, container
được tạo ra từ image sau khi đã đóng gói.
- Docker network: cho phép các container tương tác với nhau và với các dịch vụ
khác. Một Docker network được tạo ra để tạo một mạng ảo cho các container
chạy trên cùng một máy Docker host.
- Docker volume: Cho phép các container lưu trữ và truy cập dữ liệu được sử
dụng bởi các ứng dụng. Volume giúp dữ liệu được bảo vệ và giữ cho đồng bộ giữa các container. 5 | P a g e
- Docker registry: Là một kho chứa image để lưu trữ các image được tạo bởi
người dùng Docker hoặc bởi các nhà cung cấp phần mềm. Docker Hub là một
ví dụ về Docker registry công cộng, trong khi các tổ chức cũng có thể triển khai
một Docker registry riêng tư. Đây là nơi mà chúng ta tải lên các image sau khi
đã build ( khá giống việc lưu trữ code trên Github ).
- Dockerfile: Là một tệp cấu hình định nghĩa các bước để xây dựng một image
Docker. Dockerfile chứa các chỉ thị để tải các phần mềm, công cụ cần thiết, cài
đặt các gói phụ thuộc, cấu hình ứng dụng ...
- Docker compose: Là công cụ được sử dụng để quản lý, triển khai và tự động
hóa việc chạy nhiều container cùng một lúc.
1.1.3 Cấu trúc của một mô hình Docker
Docker sử dụng kiến trúc client – server. Docker client sử dụng một REST API
(thông qua UNIX socket, hoặc cổng mạng) để có thể giao tiếp với Docker daemon,
tiến trình này thực hiện công việc tạo, chạy và phân phối các Docker container.
Docker client và daemon có thể chạy trên cùng một hệ thống hoặc có thể kết nối
Docker client với Docker daemon từ xa. Còn Docker registry sẽ là nơi lưu trữ các
Docker image, ngoài ra 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 dùng có thể cấu hình các registry riêng tư khác để lưu trữ Docker image. 6 | P a g e
1.1.4 Môi trường thực thi Docker
Môi trường thực thi Docker (hay còn gọi là runtime environment) là một môi
trường cô lập, nhẹ và di động, được tạo ra từ một image Docker để chạy ứng dụng của
bạn. Nó cung cấp cho ứng dụng tất cả các tài nguyên cần thiết để hoạt động, bao gồm
hệ điều hành, thư viện, công cụ và các cấu hình.
Cách hoạt động của nó là đầu tiên tạo một image Docker bằng cách viết một
Dockerfile. Dockerfile chứa các lệnh để xây dựng một môi trường hoàn chỉnh cho ứng 7 | P a g e
dụng. Sau đó khởi chạy container, từ image tạo một container. Container này là một
lớp (instance) đang chạy của image và là nơi ứng dụng của bạn sẽ thực thi.
Các thành phần chính của môi trường thực thi Docker gồm:
 Namespace: Mỗi container có một namespace riêng biệt cho các tài nguyên hệ
thống như PID, network, mount, IPC, và UTS. Điều này giúp các container
không ảnh hưởng lẫn nhau.
 Cgroups: Cơ chế để giới hạn tài nguyên của container, như CPU, memory, I/O.
 Union file system: Hệ thống file ảo cho phép các lớp của image được chia sẻ và chồng lên nhau.
 Writeable layer: Một lớp trên cùng của container, nơi các thay đổi được ghi lại.
1.2 ỨNG DỤNG CỦA DOCKER
Một số ứng dụng thực tế của Docker:  Triển khai phần mềm
 Triển khai ứng dụng web
 Chạy các bản phân phối Linux nhẹ  Máy chủ lưu trữ
 Tạo hình ảnh Linux tùy chỉnh
 Tạo môi trường phát triển, phát triển ứng dụng
 Kiểm thử phần mềm, ứng dụng
Sau đây là một ví dụ minh họa thực tế cho việc tại sao ta cần dùng Docker trong lập
trình và sẽ dùng trong tình huống nào. Ví dụ ta có hai lập trình viên đang làm việc trên
một dự án sử dụng framework NestJS và yêu cầu sử dụng NodeJS. Bình thường thì cả
hai cần phải cài các thư viện cần thiết như Nodejs, npm…. Nhưng nếu người A sử
dụng MacOS và cài phiên bản Node 14.x, còn người B dùng Windows và cài phiên
bản Node 12.x, trong trường hợp này sẽ dễ phát sinh xung đột vì môi trường phát triển
không đồng nhất. Để tránh xung đột thì Docker sẽ giúp cung cấp một môi trường đồng
nhất giữa cả 2 bằng cách sử dụng image node:14.x, image này đã cung cấp đủ các
công cụ và thư viện cần thiết để phát triển xây dựng và triển khai ứng dụng Node.js.
Chính vì thế khi có nhiều lập trình viên cùng phát triển một dự án thì họ chỉ cần chạy
container lên mà không cần phải nghĩ về việc cài môi trường và các thư viện đi kèm. 8 | P a g e
1.3 ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA DOCKER
Docker là một công cụ mạnh mẽ, nhưng nó không phải là giải pháp hoàn hảo
cho mọi trường hợp. Vậy nên, Docker vẫn sẽ có ưu điểm và cả những nhược điểm, tuy
vậy sự hỗ trợ của Docker đã mang lại nhiều sự hữu ích hơn so với trước đây cho nên
ta cần biết lựa chọn sử dụng cho phù hợp với nhu cầu của cá nhân và tổ chức. Sau đây
là một vài ưu, nhược điểm của Docker Ưu điểm:
 Có thể kích hoạt nhiều hệ điều hành trên cùng một máy.
 Nó rẻ hơn so với các phương pháp trước đây, do thiết lập cơ sở hạ tầng ít hơn, nhỏ gọn hơn.
 Nếu có bất kỳ trạng thái thất bại nào cũng sẽ dễ dàng để phục hồi và bảo trì.
 Cung cấp nhanh hơn các ứng dụng và tài nguyên cần thiết cho các nhiệm vụ.
 Tăng năng suất, tiện lợi hiệu quả và đáp ứng cho ngành công nghệ thông tin là rất nhiều. Nhược điểm:
 Khi sử dụng nhiều container, việc quản lý và phối hợp chúng có thể trở nên
phức tạp, đặc biệt là trong các môi trường lớn. Cấu hình Docker có thể phức
tạp, đặc biệt khi cần phải tùy chỉnh nhiều khía cạnh khác nhau của môi trường.
 Việc chạy nhiều container trên cùng một host có thể tạo ra các lỗ hổng bảo mật
nếu không được quản lý cẩn thận. Mặc dù container được cô lập, nhưng vẫn có
thể có các lỗ hổng bảo mật cho phép container truy cập vào các tài nguyên của host.
 Các Docker image có thể trở nên rất lớn, đặc biệt khi bao gồm nhiều lớp và thư
viện. Điều này có thể làm chậm quá trình xây dựng và triển khai và tương tự,
đối với lần khởi động đầu tiên của một container có thể khá chậm, đặc biệt là
đối với các image lớn.
 Phụ thuộc vào Docker, Việc sử dụng Docker có thể tạo ra sự phụ thuộc vào nền
tảng này, gây khó khăn cho việc chuyển đổi sang các công nghệ khác. 9 | P a g e
CHƯƠNG 2. CHƯƠNG TRÌNH
2.1 QUY TRÌNH THỰC THI CỦA MỘT HỆ THỐNG SỬ DỤNG DOCKER 2.1.1 Quy trình BUILD
Tạo Dockerfile: Đây là một tập tin văn bản chứa các lệnh để xây dựng một
image Docker. Nó định nghĩa các lớp, cài đặt phần mềm, sao chép file và các cấu hình
khác cần thiết cho ứng dụng của bạn.
Chạy lệnh build: Sử dụng lệnh docker build, cụ thể là câu lệnh (docker build -
t /tên muốn đặt cho image/.) để xây dựng image từ Dockerfile, điều đặc biệt là không
được thiếu dấu chấm cuối câu lệnh, nếu thiếu sẽ không thể chạy được trong terminal
hay cmd. Lệnh này sẽ đọc từng dòng trong Dockerfile và thực hiện các lệnh tương
ứng để tạo ra các lớp image.
Sau khi quá trình build hoàn tất thì sẽ tiếp tục tạo ra cointainer. Vì đã build
được docker nên chúng ta có thể bật command promt, windows power shell hoặc là
trên terminal của file vừa build được docker. Gõ dòng docker images để hiển thị
images hiện có. Bắt đầu chạy container thông qua lệnh: docker run -d -p 8000:80
/copy tên hoặc id của images mình muốn/ rồi nhấn enter. Lúc này trên màn hình sẽ trả
về id của container đó, ta cần vào docker để kiểm tra trên container của mình, nhấp
vào để xem trang web của mình có hiển thị lên hay không, nếu được có nghĩa đã thành công. 2.1.2 Quy trình PUSH
Sau đây là quá trình push image lên Docker Hub:
Đầu tiên vào Docker Hub và chọn “Creat respository” để tạo kho chứa trực tiếp tại Docker Hub.
Ta sẽ vào lại terminal hoặc các nền tảng có thể chạy các câu lệnh, gõ lệnh
docker images, xem phần container mình cần dùng có tag là gì thì ta sẽ copy hoặc ghi
nhớ để dùng cho bước tiếp theo.
Kế tiếp, gõ câu lệnh docker image push /tên_container_ muốn_ push/:/tag name/
Tuy nhiên, nếu nhấn phím enter mà bị từ chối thì cần gõ câu lệnh docker login.
Sau đó gõ câu lệnh để push lên (docker image push /tên_container_muốn_push/:/tag
name/). Tới bước này nhưng vẫn bị từ chối thì chúng ta cần phải đổi tag name. Cách
đổi tag name có câu lệnh như sau:
docker tag /id_của_image_cần_push/ /tên_trên_respository_của_mình/ (ví dụ sau:
docker tag e76e5ae043e4 alex050104/html-demo-webvpp) rồi nhấn enter.
Và khi push lên lại thì ta sẽ dùng tag name vừa đổi và không cần dấu hai chấm
như ban đầu (ví dụ: docker image push alex050104/html-demo-webvpp).
2.1.3 Quy trình PULL, RUN)
Mở terminal hoặc command prompt để thực hiện các lệnh của Docker. 10 | P a g e
Nếu muốn push image lên Docker Hub hoặc sử dụng các repository riêng tư thì
cần đăng nhập bằng lệnh: docker login và sẽ có yêu cầu nhập username và password của tài khoản Docker Hub.
Bắt đầu pull image bằng lệnh: docker pull /tên_người_dùng/ hoặc /tên_image/: /tag/
Tiếp theo cần kiểm tra các image đã pull bằng câu lệnh: docker images.
Sau đó tạo một container từ image bằng lệnh: docker run -it
/image/:/tag/ /command/ (command ở đây là thực khi container khởi động, tuy nhiên
câu lệnh là tùy vào cái có trong phần mềm ta đang làm).
2.2 GIAO DIỆN THỰC HÀNH DOCKER 11 | P a g e 12 | P a g e CHƯƠNG 3. ĐÁNH GIÁ
3.1 DANH SÁCH NHIỆM VỤ CHI TIẾT VÀ PHÂN CÔNG STT Thành Nội dung phân công Đánh giá viên mức độ tham gia (thang điểm 10) 1 Lê Thị
- Tìm hiểu khái niệm về Docker 10 Thúy - Tại sao nên dùng Docker 13 | P a g e Uyên - Docker vs Vmware?
- Mô hình và các thành phần chính của Docker
- Tham khảo các video, tài liệu để code Docker bằng Terminal hoặc CMD - Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công việc tiếp theo 2 Trần
- Tìm hiểu cấu trúc của mô hình Docker, 10 Thiên
Docker Container, Docker Images, Docker Bảo
Compose, Docker Engine, Docker Hub
- Mỗi thành phần của Docker sau khi tìm hiểu
phải nêu rõ được công dụng và ví dụ cụ thể
- Lấy ví dụ trực quan về mô hình của Vmware
vs Docker => đưa ra kết luận nên sử dụng mô
hình nào? Nêu ra các ngữ cảnh khi nào sẽ sử
dụng Vmware và khi nào sẽ sử dụng Docker - Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công việc tiếp theo 3 Vĩnh
- Tìm hiểu các môi trường sử dụng Docker ? 10 Bảo
(máy ảo, window, mac, linux, ubuntu…) Trọng - Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công việc tiếp theo
- Chuẩn bị slide thuyết trình, tìm kiếm nội
dung, hình ảnh, ví dụ cụ thể, đọc hiểu và phải 14 | P a g e giải thích được
- Nghiên cứu mở rộng thêm về các lệnh khác
trong Docker (Docker ps, Docker attach, Docker stop…)
- Tìm hiểu cách tải các images có sẵn trên Docker Hub và sử dụng 4 Bùi
- Viết báo cáo, tổng hợp tư liệu, hình ảnh, code 10 Thanh
trong quá trình làm nhóm để up lên file word, Kim
trình bày rõ ràng, đúng định dạng, kiểm tra Ngân
chính tả, đảm bảo đúng yêu cầu môn học và nộp bài đúng tiến độ - Dockerfile? NGINX?
- Cài đặt và deploy 1 dự án bất kì lên Docker,
sau đó chạy thử xem localhost có hoạt động
được khi publish lên Docker không? Sau khi
thành công nhờ một thành viên bất kì lấy dự
án từ Docker Hub về và sử dụng. Bắt buộc
phải làm thành công thì mới chuyển sang công việc tiếp theo
- Trong quá trình các thành viên khác code
Docker trên CMD, sẽ là người chịu trách
nhiệm kiểm tra cú pháp câu lệnh và fix lỗi(nếu
có) cho các thành viên, test dự án sau khi đã
được deploy lên Docker và push lên Docker
Hub xem đã thành công hay chưa? Sau đó lấy
dự án từ Hub về và chạy thử - bắt buộc phải
test kĩ càng thành công thì mới ghi báo cáo
- Kết nối Docker với CSDL, PHP, JS,
NodeJS… đảm bảo các image sử dụng trong
dự án khi gói vào container sẽ đầy đủ và không thiếu xót.
3.2 ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN
3.2.1 Kết qu: đạt được

Sau quá trình làm việc thì nhóm đã hoàn thành được việc cài đặt
công cụ docker trong phần mềm dự án để nâng cao tính hiệu quả trong
quá trình thực hiện lập trình trong một đội nhóm. Cả nhóm đã phần nào
tìm hiểu được các tính năng cơ bản cũng như việc sử dụng Docker bằng
việc hiểu các bước thiết yếu cần phải có để cài được docker vào trong dự
án cũng như biết cách sử dụng các câu lệnh của Docker trong terminal hoặc trực tiếp qua CMD. 15 | P a g e
Trong suốt 8 tuần, mặc dù đã hoàn tất được tiến trình tìm hiểu cũng
như ứng dụng được Docker thì chúng em vẫn chưa tìm hiểu về nhiều chức
năng chuyên sâu khác của Docker và chúng em cũng chưa nhận thấy các
chức năng đó cần thiết hay phù hợp để đưa vào dự án lần này. 3.2.2 Hạn chế
Tuy Docker là công cụ vô cùng hữu ích trong việc container hóa các ứng dụng,
giúp cho việc triển khai và quản lý trở nên dễ dàng hơn, nhưng nó vẫn tồn tại một số
hạn chế nhất định. Chẳng hạn như so với các tiến trình thông thường, việc khởi động
một container Docker thường mất nhiều thời gian hơn. Điều này là do Docker phải
thực hiện các quá trình như tải hình ảnh, khởi động daemon và các dịch vụ bên trong
container. Mặc dù Docker cung cấp các cơ chế để quản lý mạng giữa các container,
nhưng việc cấu hình mạng phức tạp vẫn có thể gây ra khó khăn. Đặc biệt khi làm việc
với các mạng overlay hoặc các cấu hình mạng nâng cao. Bên cạnh đó Docker cung
cấp các tính năng bảo mật cơ bản, nhưng việc đảm bảo an toàn cho các container vẫn
là một thách thức. Các lỗ hổng bảo mật trong hình ảnh Docker, việc chia sẻ không
gian kernel với host có thể dẫn đến các cuộc tấn công. Hơn thế nữa, container nhẹ hơn
máy ảo, nhưng việc chạy nhiều container cùng lúc vẫn có thể tiêu tốn khá nhiều tài
nguyên hệ thống, đặc biệt là bộ nhớ. Ngoài ra còn có một số mặt hạn chế khác như là
việc tạo ra một hình ảnh Docker có thể mất khá nhiều thời gian, đặc biệt là đối với các
ứng dụng lớn và phức tạp. Để sử dụng Docker hiệu quả, người dùng cần có kiến thức
về Dockerfile, Docker Compose, mạng Docker và các khái niệm liên quan. Điều này
có thể là một rào cản đối với những người mới bắt đầu. Việc gỡ lỗi các ứng dụng chạy
trong container có thể phức tạp hơn so với các ứng dụng thông thường. Bởi vì các
container thường được cách ly với hệ thống host, việc truy cập vào các tiến trình và
log của container có thể khó khăn hơn. 16 | P a g e KẾT LUẬN
Nghiên cứu này đã tập trung vào việc ứng dụng công nghệ container hóa
Docker để xây dựng một nền tảng website chuyên biệt cho ngành hàng văn phòng
phẩm. Mục tiêu chính là thông qua trải nghiệp để nghiên cứu và áp dụng một giải
pháp hiệu quả, linh hoạt và dễ mở rộng trong quá trình làm việc giữa nhiều lập trình
viên với nhau trong một dự án mà không gặp các bất lợi dù điều kiện hay có môi
trường không đồng nhất với nhau lúc đầu.
Kết quả sau khi hoàn thành dự án cho thấy rằng việc ứng dụng Docker đã mang
lại hiệu quả đáng kể cho dự án. Docker đã giúp đỡ rất nhiều trong quá trình xây dựng
một nền tảng website đảm bảo được mặt ổn định, linh hoạt và dễ quản lý. Nhờ đó, quá
trình phát triển và triển khai website diễn ra nhanh chóng và hiệu quả hơn.
Mặc dù đã phân tích được những mặt tích cực và tiêu cực về Docker, nó đã
mang lại nhiều lợi ích nhưng việc ứng dụng Docker cũng đi kèm với một số thách
thức nhất định. Việc quản lý một lượng lớn container có thể trở nên phức tạp nếu
không có công cụ và quy trình phù hợp. Vì vậy cần phải xác định từ ban đầu và xem
xét để ứng dụng hợp lý với nhu cầu của dự án, của tổ chức và cá nhân.
Và so với việc có tám tuần để nghiên cứu về công cụ này là vẫn chưa đủ để
chúng em có thể hiểu rõ về những tính năng, công dụng của Docker. Trong tương lai
chúng em mong muốn có thể tiếp thu đầy đủ hơn về kiến thức của công cụ này và có
thể đưa vào thực tế khi triển khai các phần mềm dự án trong một đội nhóm với nhau
một cách hiệu quả và có chọn lọc. 17 | P a g e TÀI LIỆU THAM KHẢO
https://aws.amazon.com/vi/docker/
https://www.youtube.com/watch?v=1k8pox8mkxc
https://www.youtube.com/watch?v=9D9rSlrYrDA
https://www.youtube.com/watch?v=jbd71z2Gdo4&t=455s 18 | P a g e