GIỚI THIỆU CHUNG
Lý do chọn đề tài
Trong thời đại công nghệ hiện đại, sự phát triển nhanh chóng của nhiều ngôn ngữ lập trình mới yêu cầu phần mềm hỗ trợ và môi trường riêng biệt Một số ngôn ngữ như Java và Python có khả năng chạy trên nhiều nền tảng, trong khi C# và Swift lại phụ thuộc vào môi trường cụ thể Việc cài đặt nhiều môi trường cho ứng dụng có thể gây ra các vấn đề như xung đột phần mềm và khác biệt phiên bản Nếu chỉ khó cài đặt thì có thể chấp nhận, nhưng xung đột phần mềm ảnh hưởng đến hoạt động của ứng dụng là điều không thể chấp nhận Để khắc phục tình trạng này, công nghệ ảo hóa như Docker ra đời, cho phép phát triển, triển khai và chạy ứng dụng trong các container, giúp giảm thiểu rủi ro và tạo ra môi trường vận hành ổn định cho ứng dụng.
Phạm vi nghiên cứu
Đồ án nghiên cứu tập trung vào ảo hóa Docker, bao gồm công nghệ đóng gói thư viện và ứng dụng, cùng với việc quản lý, triển khai và bảo mật các container Nghiên cứu cũng áp dụng các kết quả và kiến thức vào một ứng dụng thực tế để nâng cao hiểu biết và khả năng áp dụng trong thực tiễn.
Nội dung nghiên cứu
Trong bài viết này, chúng ta sẽ khám phá công nghệ ảo hóa và định nghĩa về Docker cùng với các khái niệm liên quan như container Bên cạnh đó, chúng ta sẽ phân tích ưu và nhược điểm của Docker, các tính năng nổi bật, các trường hợp sử dụng thực tiễn và những điều cần lưu ý khi triển khai Docker.
Kết quả hướng tới
Mục tiêu chính của tôi trong đề tài này là mở rộng kiến thức về quản trị hệ thống thông qua Docker Qua quá trình tìm hiểu và áp dụng thực tế, tôi mong muốn phát triển khả năng xây dựng môi trường cô lập ứng dụng bằng Docker và Docker Compose Tôi hy vọng rằng tài liệu và khái niệm mà tôi đã soạn thảo sẽ trở thành nguồn tham khảo hữu ích cho các sinh viên khác, giúp họ tìm hiểu sâu hơn về những lợi ích mà Docker mang lại.
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:
DOCKER
Giới thiệu về Virtualization (Công nghệ ảo hoá)
Virtualization là một quá trình giúp tối ưu hoá hơn phần cứng của máy tính và là nguồn gốc của điện toán đám mây
Công nghệ hỗ trợ các lập trình viên phát triển dịch vụ IT thông qua việc tạo ra các môi trường ảo, cho phép họ mã hóa và sử dụng phần mềm để xây dựng một lớp ảo trên phần cứng của máy tính hoặc server.
Công nghệ này đặc biệt cho phép khai thác sức mạnh như một máy thực hoạt động với công suất tối đa, nhờ vào khả năng phân vùng tài nguyên cho nhiều người dùng hoặc môi trường khác nhau.
Trong phương thức truyền thống, hệ thống bao gồm ba máy chủ: một máy chủ email, một máy chủ web và một máy chủ chạy các ứng dụng lỗi thời Mỗi máy chủ phục vụ một mục đích riêng biệt, nhưng chỉ hoạt động với 30% công suất tối đa, thay vì phát huy hết khả năng của chúng.
Công nghệ ảo hóa cho phép tích hợp các ứng dụng lỗi thời vào mail server, tối ưu hóa hiệu suất sử dụng tài nguyên Người dùng có thể thêm các tác vụ khác để tận dụng tối đa khả năng của server, từ đó giảm chi phí phát sinh do phải sử dụng nhiều server Điều này giúp mỗi server thực hiện nhiều nhiệm vụ khác nhau thay vì chỉ tập trung vào một tác vụ duy nhất.
Hình 1.1 – Sử dụng 3 máy servers với mục đích khác nhau
Công nghệ ảo hoá hiện nay đã trở thành tiêu chuẩn trong kiến trúc doanh nghiệp IT và đóng vai trò quan trọng trong sự phát triển của nền kinh tế đám mây Bằng cách sử dụng phần cứng máy tính hiện có, các công ty cung cấp dịch vụ có thể cung cấp các giải pháp đám mây hiệu quả về chi phí, tương ứng với tài nguyên máy tính cần thiết cho khối lượng công việc của người dùng Điều này tạo ra một thị trường phong phú và có lợi cho cả nhà cung cấp và người tiêu dùng.
Sử dụng nhiều server phần cứng riêng lẻ cho các tác vụ khác nhau có thể dẫn đến lãng phí tài nguyên và hạn chế khả năng thực hiện các công việc khác Việc hợp nhất các ứng dụng vào môi trường ảo hóa không chỉ giúp tiết kiệm chi phí mà còn giảm đáng kể chi phí cho máy chủ, mang lại lợi ích lớn cho công ty của bạn.
• Giảm thời gian chết và tăng khả năng phục hồi
Khi máy vật lý của một công ty gặp sự cố, việc sửa chữa có thể tốn hàng giờ hoặc thậm chí hàng ngày Tuy nhiên, trong môi trường ảo, quá trình này trở nên dễ dàng hơn Bạn có thể sao chép hoặc clone máy ảo gặp sự cố, thực hiện sửa chữa và khôi phục chỉ trong vài phút Điều này không chỉ giúp tăng khả năng phục hồi mà còn cải thiện tính liên tục trong kinh doanh.
• Hiệu quả và năng suất cao:
Việc sử dụng ít server giúp đội ngũ IT giảm thiểu thời gian bảo trì phần cứng và cơ sở hạ tầng CNTT Cài đặt, cập nhật và duy trì môi trường trên một server với các máy ảo trở nên dễ dàng hơn so với việc chuyển đổi giữa các server Điều này không chỉ tiết kiệm thời gian mà còn nâng cao hiệu quả và năng suất cho đội ngũ của bạn.
• Tự chủ kiểm soát và DevOps
Các dev có thể thiết lập máy ảo và làm việc với nó mà không ảnh hưởng đến quá trình phát triển phần mềm của họ
Khi một bản cập nhật phần mềm được phát hành, phương pháp truyền thống yêu cầu người dùng phải tìm kiếm máy mới, tải nhiều thư viện và modules, cũng như thiết lập môi trường để kiểm thử tính năng mới Tuy nhiên, công nghệ ảo hóa đã đơn giản hóa quy trình này, cho phép các lập trình viên và tester chỉ cần clone máy chủ ảo cho phần mềm trên thiết bị của họ, kiểm thử môi trường và kéo lại quá trình phát triển phần mềm Điều này không chỉ giúp tăng tốc độ mà còn nâng cao tính linh hoạt của phần mềm.
• Tối ưu chi phí và bảo vệ môi trường
Việc các công ty giảm số lượng server nhờ công nghệ này sẽ giúp đơn giản hóa quản lý trung tâm dữ liệu, tiết kiệm chi phí cho các dự án khác và đồng thời giảm đáng kể lượng khí thải carbon từ các server.
1.3 Hardware Virtualization (Ảo hoá phần cứng)
Hardware virtualization là phương pháp tạo ra phiên bản ảo của máy tính vật lý và hệ điều hành, sử dụng siêu giám sát (hypervisor) để quản lý máy ảo Công nghệ này cung cấp phần cứng trừu tượng cho nhiều hệ điều hành khác nhau, tối ưu hóa việc chia sẻ tài nguyên phần cứng, đồng thời đảm bảo hiệu năng và giảm chi phí.
1.3.2 Khác biệt giữa công nghệ ảo hoá và ảo hoá phần cứng
- Công nghệ ảo hoá: Là khải niệm chung cho việc tạo ra một phiên bản ảo cho một thứ gì đó
- Ảo hoá phần cứng: Là sự cấu tạo phiên bản ảo cho tài nguyên máy tính vật lí
1.3.3 Các thành phần của ảo hoá phần cứng
Lớp phần cứng, hay máy chủ ảo hóa, bao gồm các linh kiện vật lý như CPU, bộ nhớ, hệ thống mạng và ổ cứng Để hỗ trợ chạy nhiều hệ điều hành khách, lớp này yêu cầu CPU lõi x86 với một hoặc nhiều bộ xử lý.
Siêu giám sát tạo ra một lớp ảo hóa giữa hệ điều hành và phần cứng máy chủ, cho phép nhiều instance của hệ điều hành khác nhau chạy song song trên cùng một máy Nó tách biệt hệ điều hành và ứng dụng khỏi phần cứng cơ bản, giúp các máy ảo sử dụng tài nguyên hiệu quả hơn.
Máy ảo là phần mềm giả lập môi trường phần cứng, cho phép chạy các ứng dụng trên máy tính vật lý Nó bao gồm phần cứng ảo, hệ điều hành khách và các phần mềm hoặc ứng dụng hoạt động trên đó.
1.3.4 Cách thức hoạt động của công nghệ ảo hoá phần cứng Đầu tiên, công nghệ này cho phép một máy tính vật lí hoạt động dưới dạng nhiề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 hoá phần cứng được gọi là ảo hoá máy chủ Ảo hoá phần cứng làm cho nó có thể sử dụng tối đa hiệu năng và tài nguyên của máy vật lý, và thông qua việc cô lập các máy ảo, có thể bảo vệ dữ liệu khỏi các malware
1.3.5 Các loại ảo hoá phần cứng
Giới thiệu về Docker
Docker là nền tảng ảo hóa hệ điều hành mở, giúp phát triển, vận chuyển và chạy ứng dụng một cách dễ dàng Nó tối ưu hóa quy trình đóng gói, phân phối và sử dụng phần mềm, cho phép quản lý cơ sở hạ tầng tương tự như ứng dụng người dùng Nhờ vào phương pháp vận chuyển, kiểm tra và triển khai mã nhanh chóng của Docker, người dùng có thể giảm thiểu thời gian chờ đợi giữa việc viết mã và chạy sản phẩm cuối cùng.
Khi một BA phần mềm viết hướng dẫn sản phẩm, chẳng hạn như cách cài đặt thư viện và môi trường trong file “readme.txt”, việc sử dụng Docker để phân phối sản phẩm sẽ giúp đơn giản hóa quy trình Thay vì trình bày nhiều bước phức tạp, họ chỉ cần tóm gọn tất cả hướng dẫn thành một dòng lệnh duy nhất với một phụ thuộc cần thiế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 độc lập trên một máy chủ vật lý, tối ưu hóa tài nguyên và tiết kiệm không gian lưu trữ Các container này khởi động và tắt nhanh chóng, nâng cao hiệu suất và khả năng đáp ứng cho các ứng dụng.
• Linh hoạt và di động:
Docker mang lại khả năng đóng gói và chạy ứng dụng trên mọi môi trường cài đặt Docker, từ máy tính cá nhân đến máy chủ vật lý và các dịch vụ đám mây công cộng, đám mây riêng Điều này tạo ra sự linh hoạt và di động cho ứng dụng, giúp dễ dàng triển khai và chuyển đổi giữa các môi trường khác nhau.
• Tích hợp và phát triển linh hoạt:
Docker tương thích tốt với các công cụ phát triển hiện có như quản lý mã nguồn, tự động hóa và liên kết, giúp tối ưu hóa quy trình phát triển Sự tích hợp này mang lại tính linh hoạt và tiết kiệm thời gian, từ đó thúc đẩy nhanh chóng 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ông cụ quản lý hiệu quả cho việc triển khai và quản lý ứng dụng trên đám mây Nhờ vào các dịch vụ như Docker Swarm và Kubernetes, người dùng có thể tự động hóa quy trình triển khai, mở rộng và quản lý ứng dụng, từ đó tối ưu hóa hiệu suất và nâng cao độ tin cậy trong môi trường đám mây.
• Hệ sinh thái phong phú:
Docker sở hữu một hệ sinh thái đa dạng với hàng ngàn hình ảnh có sẵn trên Docker Hub, cho phép người dùng dễ dàng tìm kiếm và tải về các hình ảnh container Bên cạnh đó, cộng đồng Docker rất lớn, cung cấp nhiều công cụ và tài liệu hỗ trợ, giúp người dùng nhanh chóng làm quen và giải quyết các vấn đề liên quan đến Docker.
Docker không phải là ngôn ngữ lập trình hay framework phát triển phần mềm, mà là công cụ hỗ trợ cài đặt, gỡ bỏ, nâng cấp, phân phối và chạy ứng dụng Là một công cụ mã nguồn mở, Docker cho phép cộng đồng đóng góp và hưởng lợi từ nhiều khía cạnh khác nhau.
Vào năm 1979, các hệ điều hành UNIX đã giới hạn phạm vi tài nguyên của chương trình thông qua các môi trường thực thi gọi là jail Đến năm 2005, với sự ra mắt của Solaris 10 và Solaris Containers từ Sun, thuật ngữ "container" đã trở nên phổ biến hơn, nhằm mục đích cô lập tất cả quá trình khỏi mọi nguồn khác, chỉ cho phép truy cập vào những nơi được chỉ định.
Docker cho phép đóng gói và chạy ứng dụng trong môi trường container, đảm bảo tính cô lập và bảo mật Điều này giúp người dùng chạy nhiều container trên một máy chủ mà không bị ảnh hưởng lẫn nhau Các container nhẹ và chứa đầy đủ mọi thứ cần thiết để vận hành ứng dụng, giúp người dùng không phải phụ thuộc vào cấu hình của máy chủ Hơn nữa, việc chia sẻ container trở nên dễ dàng, đảm bảo rằng tất cả người dùng đều nhận được cùng một phiên bản hoạt động nhất quán.
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, ứng dụng sẽ được triển khai vào môi trường sản xuất dưới dạng container hoặc dịch vụ được sắp xếp Quá trình này diễn ra tương tự, bất kể môi trường sản xuất là trung tâm dữ liệu cục bộ, nhà cung cấp đám mây, hay sự kết hợp giữa hai loại hình 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 thường tốn nhiều thời gian và tài nguyên Docker đã xuất hiện như một giải pháp tối ưu hóa quy trình này bằng cách sử dụng công nghệ container, cho phép các chương trình chạy trực tiếp trên hạt nhân Linux của máy chủ Điều này giúp loại bỏ sự cần thiết của các hệ điều hành dư thừa và rút ngắn thời gian khởi động Đặc biệt, Docker có khả năng chạy trong máy ảo nếu máy đó sử dụng hạt nhân Linux hiện đại, mang lại nhiều lợi ích cho việc triển khai ứng dụng.
17 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óa phần cứng, mà là công cụ giúp bạn sử dụng công nghệ container tích hợp sẵn trong kernel của hệ điều hành.
2.2.3 Chạy phần mềm trong Container:
Trước khi tìm hiểu về mô hình hóa Container, chúng ta cần xem hình 1.1 để hiểu cách phần mềm hoạt động trên máy tính bình thường Giao diện Command line (CLI) hoạt động trong bộ nhớ không gian người dùng (user space), và phần mềm trong không gian này không thể chỉnh sửa bộ nhớ không gian nhân (kernel space memory) Điều này có nghĩa là phần mềm sẽ sử dụng toàn bộ tài nguyên của máy tính để chạy hai phần mềm đó.
Hình 2.1 minh họa ngăn xếp máy tính cơ bản khi thực thi hai chương trình từ dòng lệnh Trong hình 1.2, chúng ta nhận thấy ba chương trình: Web server, Hello World và Database hoạt động trong các container, chỉ chiếm một nửa dung lượng máy tính Điều này được thực hiện thông qua hai chương trình của Docker, bao gồm CLI và Daemon, mà sẽ được giải thích thêm.
2 thuật ngữ này ở phần sau)
XÂY DỰNG HỆ THỐNG
Về ứng dụng website ghi chú
Nếu bạn cần một trang web đơn giản để truy cập và lưu trữ ghi chú một cách nhanh chóng và thuận tiện, thì website này chính là lựa chọn hoàn hảo cho bạn.
Trang web với các chức năng đơn giản giúp người dùng dễ dàng làm quen và sử dụng mà không cần nhiều thời gian học Giao diện thân thiện cùng các tính năng rõ ràng tạo điều kiện thuận lợi cho việc tạo và quản lý ghi chú nhanh chóng và hiệu quả.
Trang web với các chức năng đơn giản giúp người dùng dễ dàng tìm hiểu và sử dụng mà không tốn nhiều thời gian Quá trình tạo, chỉnh sửa và xóa ghi chú diễn ra nhanh chóng và trực quan, từ đó tiết kiệm thời gian và nâng cao hiệu suất làm việc.
• Tập trung vào nhiệm vụ chính:
Trang web quản lý ghi chú tập trung vào việc quản lý ghi chú hiệu quả với các chức năng đơn giản Thay vì tích hợp nhiều tính năng phức tạp, nó giúp người dùng dễ dàng tạo, tổ chức và tìm kiếm ghi chú một cách thuận tiện.
Trang web quản lý ghi chú với thiết kế đơn giản và ít lỗi đảm bảo tính ổn định và đáng tin cậy Người dùng có thể yên tâm lưu trữ và quản lý ghi chú mà không lo về sự cố hoặc mất dữ liệu.
• Linh hoạt và tiện lợi:
Một trang web quản lý ghi chú đơn giản cho phép người dùng truy cập từ nhiều thiết bị và nền tảng khác nhau, mang lại sự linh hoạt và tiện lợi trong việc quản lý ghi chú mọi lúc, mọi nơi.
Xây dựng kiến trúc hệ thống
3.1.1 Xác định yêu cầu hệ thống
Từ dữ liệu thu thập được trong quá trình khảo sát, có thể xác định được, ứng dụng sẽ gồm những chức năng chính sau đây:
+ Đăng ký và đăng nhập
+ Cộng tác thời gian thực + Truy cập và chỉnh sửa note
3.1.2 Phân tích yêu cầu hệ thống
– Đăng ký và Đăng nhập:
Khách hàng có thể đăng nhập vào ứng dụng bằng tài khoản đã đăng ký hoặc thông qua tài khoản Google Sau khi hoàn tất quá trình đăng nhập, người dùng sẽ có quyền truy cập đầy đủ vào các tính năng của ứng dụng.
– Truy cập và chỉnh sửa note:
Người dùng có thể truy cập và chỉnh sửa note của họ như bình thường, bao gồm các thao tác thêm, xoá, sửa văn bản
Người dùng có thể quản lý các note của họ với các thao tác cơ bản như là tạo note mới, xoá note, tìm kiếm note.
Phân tích thiết kế hệ thống
3.2.1.1 Sơ đồ các use case
STT Tên Actor Ý nghĩa/Ghi chú
1 User Người sử dụng phần mềm để ghi chú
3.2.1.3 Mô tả chi tiết use case
– Mục đích: Đảm bảo xác thực thông tin người dùng và an toàn bảo mật hệ thống
Người dùng có thể đăng nhập vào hệ thống để trải nghiệm các tính năng của chế độ Online Nếu đây là lần đầu truy cập, hệ thống sẽ tự động tạo tài khoản và đăng nhập cho người dùng.
– Mục đích: Đăng xuất khỏi hệ thống
– Mô tả: Người dùng click vào nút đăng xuất để thoát tài khoản ra khỏi hệ thống
3.2.1.3.3 Use case Quản lý note
– Mục đích: Xử lí và thao tác với các note được lưu trữ ở trên trang web
– Mô tả: Người dùng có thể quản lí và thao tác note của họ (Thêm, xoá, sửa, tìm kiếm và lưu) ở trên hệ thống web đó
3.2.2.1 Tổng quan sơ đồ lớp
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 accountid string PK Mã tài khoản
2 googleid string Mã tài khoản google
3 displayName string Tên hiển thị
4 firstName string Tên người dùng
5 lastName string Họ người dùng
6 createdAt date Ngày tạo tài khoản
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
3 editInfo() bool Chỉnh sửa thông tin cá nhân
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 noteid string PK Mã ghi chú
2 accountid string FK Mã tài khoản
4 body string Nội dung ghi chú
5 createdAt date Ngày khởi tạo
6 updatedAt date Ngày cập nhật mới nhất
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 createNote() bool Tạo ghi chú mới
2 editNote() bool Chỉnh sửa ghi chú
3 deleteNote() Bool Xoá ghi chú
Thiết kế giao diện
3.3.1.1 Giao diện trang chủ Đây là giao diện khi mở trang web, trang chủ sẽ hiển thị màn hình chào mời người dùng đăng nhập để sử dụng ứng dụng ghi chú Phần góc trên và giữa màn hình sẽ cho người dùng đăng nhập vào hệ thống, còn phần dưới cho người dùng thông tin của trang web
3.3.1.2 Giao diện đăng nhập Đây là giao diện đăng ký, cho phép người dùng sử dụng tài khoản Google để đăng nhập vào website
3.3.1.3 Giao diện danh sách ghi chú (Khi chưa tạo ghi chú nào cả) Đây là giao diện hiển thị danh sách các ghi chú mà người dùng đã tạo Tuy nhiên, hiện tại chưa có ghi chú nào được tạo cả nên màn hình thay vào đó sẽ trở thành màn hình chào mời người dùng tạo ghi chú mới
3.3.1.4 Giao diện soạn ghi chú Đây là giao diện cho phép người dùng soạn một ghi chú mới, gồm tiêu đề và nội dung ghi chú Sau khi người dùng ghi chú xong, người dùng có thể ấn vào nút Add Note ở bên dưới để thêm vào danh sách ghi chú
3.3.1.5 Giao diện danh sách ghi chú (sau khi có ít nhất một ghi chú) Đây là giao diện hiển thị ra danh sách các ghi chú mà người dùng đã tạo ra Phần ghi chú trong danh sách sẽ hiển thị phần tiêu đề và một phần nội dung có sẵn Muốn coi chi tiết ghi chú thì người dùng chỉ cần ấn vào ghi chú để xem đầy đủ
3.3.1.6 Giao diện chỉnh sửa ghi chú
Giao diện này tương tự như giao diện tạo ghi chú, với điểm khác biệt là có nút xoá ghi chú và nút cập nhật ghi chú thay cho nút thêm ghi chú Khi người dùng nhấn vào nút Xoá ghi chú, một màn hình pop-up sẽ xuất hiện để xác nhận ý định xoá ghi chú của người dùng.