Nó cho phép tạo các môi trường độc lập và tách biệt để khởi chạy và phát triển ứng dụng và môi trường này được gọi là container.. Khi cần triển khai lên bất kỳ server nào chỉ cần run con
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
Nguyễn Thanh Thọ – 17521093 Đồng Việt Tùng - 17521231
Trang 2LỜI CẢM ƠN
Lời đầu tiên, chúng em xin chân thành cảm ơn thầy Nguyễn Công Hoan – giảng viên phụ trách – đã hướng dẫn tận tình chúng em trong thời gian thực hiện đồ án Nhờ có
sự giúp đỡ tận tình của thầy chúng em có thể hoàn thành được đồ án một cách tốt nhất
Tuy chúng em đã cố gắng hạn chế những sai sót hết mức có thể nhưng vì kiến thứccòn hạn hẹp nên chúng em khó tránh khỏi những sai sót trong quá trình thực hiện cũng như là lúc báo cáo đồ án Do đó, chúng em mong nhận được ý kiến đóng góp từ thầy để chúng em có thể khắc phục, sửa chữa
Chúng em xin chân thành cảm ơn thầy!
Trang 3LỜI NHẬN XÉT CỦA GIẢNG VIÊN
Trang 4
MỤC LỤC
DANH MỤC HÌNH
Hình 1.1: Kiến trúc Docker 9
Hình 1.2: Trang Docker hub 10
Hình 1.3: So sánh kiến trúc của container và Virtual Machines 11
Hình 1.4: Kiến trúc phân lớp của container 12
Hình 2.1: Build dockerfile cho VueJs 18
Hình 2.2: Run dockerfile 18
Hình 3.1: Sơ đồ Use case tổng quát 23
Hình 3.2: Đặc tả Use case quản lý học viên 24
Hình 3.3: Đặc tả Use case quản lý khóa học 26
Hình 3.4: Đặc tả Use case quản lý tài khoản người dùng 28
Hình 3.5: Đặc tả Use case quản lý speaker 30
Hình 3.6: Đặc tả Use case tìm kiếm khóa học 31
Hình 3.7: Đặc tả Use case quản lý khóa học cho User 33
Hình 3.8: Đặc tả Use case quản lý khóa học cho Speaker 35
Hình 3.9: Đặc tả Use case quên mật khẩu 36
Hình 3.10: Đặc tả Use case cập nhật thông tin tài khoản 38
Hình 3.11: Đặc tả Use case livestream 39
Hình 3.12: Đặc tả Use case quản lý buổi học 40
Hình 3.13: Đặc tả Use case xem livestream 41
Hình 3.14: Đặc tả Use case đăng ký trở thành speaker 43
Trang 6TÓM TẮT ĐỒ ÁN 2
Hiện nay, Docker dần trở thành một công cụ không thể thiếu cho các lập trình viên, đặc biệt là các lập trình viên chuyên về web Do đó, mục tiêu của đồ án này là tìm hiểu về Docker, kiến trúc công nghệ và các chức năng nổi bật của Docker Sau đó thông qua việc tích hợp Docker vào quá trình phát triển một website để làm bật lên những ưu điểm của Docker
Website được dùng làm ứng dụng minh họa cho công nghệ Docker là website học tiếng Anh Trong quá trình phát triển, chúng em sẽ sử dụng các máy với các hệ điều hành cũng như môi trường phát triển khác nhau Sau đó sử dụng Docker để hỗ trợ cho việc phát triển website Từ đó rút ra được những lợi ích mà Docker mang lại
Sau quá trình sử dụng Docker ở đồ án 2, chúng em nhận thấy việc sử dụng Docker
đã giúp chúng em giảm thiểu đáng kể những lỗi không đáng có do bất đồng bộ giữa các môi trường cài đặt, kiểm thử, phát triển
Trang 7Chương 1: Kiến thức về Docker1.1 Giới thiệu sơ lược về Docker
1.1.1 Docker là gì?
Docker là một nền tảng cho nhà phát triển và sysadmin để phát triển, triển khai cácứng dụng với container Nó cho phép tạo các môi trường độc lập và tách biệt để khởi chạy và phát triển ứng dụng và môi trường này được gọi là container Khi cần triển khai lên bất kỳ server nào chỉ cần run container của Docker thì ứng dụng của bạn sẽ được hoạtđộng ngay lập tức
1.1.2 Lịch sử ra đời
• Docker được thành lập bởi ông Solomon Hykes and Sebastien Pahl Nó là sản
phẩm của nhóm startup Y Combinator phát triển và được công bố năng 2011.
• Lúc đầu Docker project là dự án nội bộ của công ty dotCloud, service ở Pháp
platform-as-a-• Lần đầu tiên docker được công bố dưới dạng open-source là tháng 3 năm 2013
• Từ phiên bản 0.9 thì docker đã dùng những component riêng được biết bằng Go ( Golang ) để thay thế cho việc dùng LXC(linux system) làm môi trường thực thi
• Vào năm 2017 thì docker đã tạo ra Moby project để phát triển vấn đề đa nhân thaycho việc dùng docker engine
có thể support cho EC2 của Amazon
• Tháng 12-2014, IBM công bố hợp tác với Docker và tích hợp docker vào Cloud của IBM
Trang 8• Tháng 6-2015, Docker và 1 số công ty như: CoreOS, Google, Microsoft, AWS, đãcông bố liên kết với nhau để cung cấp giải pháp tiêu chuẩn của hệ điều hành cho software containers.
• Tháng 5-2016 nghiên cứu cho thấy những tổ chức chính tham gia đónng góp cho docker là: The Docker Teamm Cisco, Google, Huawei,IBM, Microsoft and Red Hat
• Tháng 6-2016, Microsoft công bố docker có thể sử dụng trên Windown 10
• Tháng 5-2019 WSL2 của windows có thể hỗ trợ chạy Docker
1.2 Kiến trúc tổng thể
Hình 1.1: Kiến trúc Docker
Docker có 2 thành phần chính: Docker Engine và Docker Hub Docker Engine là giải pháp ảo hóa (virtualization) dựa trên công nghệ container, còn tại Docker Hub là platform Software-as-a-Service để chia sẻ images
1.2.1 Docker Engine
Docker Engine là ứng dụng dựa trên kiến trúc client-server với các thành phần chính:
• Docker daemon đóng vai trò như một server Docker daemon có thể build, run và distribute docker container
Trang 9Docker client sẽ giao tiếp với docker daemon thông qua REST API, cả 2 sẽ kết nối với nhau thông qua UNIX socket hoặc qua giao tiếp mạng Việc giao tiếp theo phương thức này cho phép Docker Client và Docker Daemon có thể chạy trên cùng một hệ thống hoặc khác hệ thống.
1.2.2 Docker Hub
Docker hub là nơi lưu trữ các image (public hoặc private) Ở đây người dùng có thể chia sẻ các customized image Ngoài ra, người dùng có thể tìm và tải các image thôngqua docker client
Hình 1.2: Trang Docker hub
1.2.3 Một số thuật ngữ
• Image: Là một package chứa tất cả các thông tin, thư viện, framework, cần thiết
để tạo ra một container Thông thường, các image được tạo ra dựa trên các image cha (based image) – image cha được cung cấp sẵn bởi docker
• Container: Về cơ bản, container là một công nghệ ảo hóa nhưng thay vì phải giả lập phần cứng như Vmware thì container sẽ chia sẻ hệ điều hành với host Mỗi container đều chạy độc lập với các container khác và hệ thống mà docker đang chạy Do đó người dùng có thể thêm, xóa, sửa container; Kết nối với network;
Trang 10Thậm chí là tạo một image dựa trên trạng thái hiện tại của container mà không ảnhhưởng tới hệ thống host và các container khác
Hình 1.3: So sánh kiến trúc của container và Virtual Machines
• Daemon: là một loại chương trình trên các hệ điều hành Like-Unix hoạt động ẩn
mà không cần sự kiểm soát bởi user
• Docker Registry: là nơi lưu trữ riêng của Docker Images Images được push vào registry và client sẽ pull images từ registry Có thể sử dụng registry của riêng bạn hoặc registry của nhà cung cấp như : AWS, Google Cloud, Microsoft Azure
1.3 Cách thức hoạt động
Để cho mỗi container có thể chạy như một process độc lập và chiếm không gian ít thì docker sử dụng kiến trúc phân lớp (layer) Những layer này còn được gọi là layer trung gian, chúng được tạo từ những câu lệnh trong Dockerfile khi build một docker image
Ví dụ:
node:stable
Trang 11Sau khi build xong các câu lệnh, Docker sẽ tạo ra một lớp trắng mới Người dùng
có thể truy cập tới layer này sử dụng câu lệnh docker exec –it <container> <command> Bằng cách này người dùng có thể thay đổi image và có thể commit những thay đổi đó bằng câu lệnh docker commit
Hình 1.4: Kiến trúc phân lớp của container
1.4 Docker mang lại lợi ích gì? Cho ai? Trong hoàn cảnh nào?
1.4.1 Lợi ích và hoàn cảnh sử dụng
• Việc sử dụng Docker cho phép ta vận chuyển mã nhanh hơn, tiêu chuẩn hóa hoạt động của ứng dụng, di chuyển mã một cách trơn tru và tiết kiệm tiền bằng cách cảithiện khả năng tận dụng tài nguyên
Trang 12• Với Docker, ta sẽ được nhận một đối tượng duy nhất có khả năng chạy ổn định ở bất kỳ đâu Cú pháp đơn giản và không phức tạp của Docker sẽ cho ta quyền kiểm soát hoàn toàn.
• Thứ tư là dễ dàng automate (tự động hóa) việc quản lý các docker container
thông qua Kubernetes hoặc Docker Swarm
• Container Docker giúp cho việc chạy nhiều mã hơn trên từng máy chủ trở nên dễ dàng hơn, cải thiện khả năng tận dụng và tiết kiệm tiền bạc cho chúng ta, giúp dự
án có khả năng mở rộng cao
1.4.2 Ai sử dụng Docker
• Business Analysist: thường dùng docker để chạy môi trường demo cho khách hàng
• QA & QC: thường dùng docker để chạy môi trường test để kiểm thử sản phầm
• Software Architect dùng để kiểm thử những công nghệ và tính ổn định của các công nghệ trên nhiều nền tảng khác
1.5 Một số công cụ phổ biến
1.5.1 Docker Compose
Docker Compose là một công cụ được dùng để quản lý và chạy các Docker
Container Docker Compose cho phép ta cấu hình các container trong một file YAML duynhất và chạy tất cả các container chỉ với một câu lệnh
1.5.2 Docker Swarm
Docker Swarm là một công cụ giúp gom cụm các Docker Docker Swarm có thể gom nhiều Docker Engine lại với nhau thành một Docker Engine “ảo” Tức là bất cứ công cụ nào giao tiếp với Docker Engine thì cũng có thể giao tiếp với Docker Swarm nhưbình thường
1.6 So sánh Docker với các công nghệ tương tự
Containers
So sánh Mô phỏng Một phần mở Sử dụng nhân được vá Docker Engine
Trang 13cụ để ảo hóa cho người dùng Nó sử dụng Môi trường ảo để lưu trữ các hệ thống Khách,
có nghĩa là nó
sử dụng vùng chứa cho toàn
bộ hệ điều hành, không phải các ứng dụng và quy trình riêng lẻ
năng ảo hóa cấp hệ điều hành Mỗi Máy chủ riêng ảo được chạy như một quy trình riêng biệt trên cùng một hệ thống máy chủ lưu trữ và có hiệu quả cao do khôngcần mô phỏng Tuy nhiên, nó là cổ điển về
số lượng phát hành, vì chưa có bản nào kể từ năm 2007
Windows Server 2016 truy cập trực tiếp vào nhân windows Do
đó vùng chứa Docker gốc không thể chạy trên Vùng chứa của Windows Thay vào đó, một định dạng vùng chứa khác,WSC (Vùng chứa Windows Server), sẽ được
Nhiều VPS lưu trữ và quản trị, và hỗ trợ Legacy
Trang 14DreamHost, Amoebasoft, OpenHosting Inc., Lycos, Pháp, Mosaix Communications, Inc.
Trang 15Chương 2: Áp dụng Docker2.1 Setup Dockerfile
2.1.1 NestJs – backend
FROM node: 12.13 -alpine As development
WORKDIR /usr/src/app
COPY package *.json /
RUN npm install –only=development
COPY
RUN npm run build
FROM node: 12.13 -alpine as production
ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV}
Trang 16WORKDIR /usr/src/app
COPY package *.json /
RUN npm install –only=production
COPY
COPY –from=development /usr/src/app/dist /dist
CMD [“node”, “dist/main”]
Giải thích thông số
FROM — chỉ định image gốc: python, unbutu, alpine…
LABEL — cung cấp metadata cho image Có thể sử dụng để add thông tin maintainer Đểxem các label của images, dùng lệnh docker inspect
ENV — thiết lập một biến môi trường
RUN — Có thể tạo một lệnh khi build image Được sử dụng để cài đặt các package vào container
COPY — Sao chép các file và thư mục vào container
ADD — Sao chép các file và thư mục vào container
Trang 17CMD — Cung cấp một lệnh và đối số cho container thực thi Các tham số có thể được ghi đè và chỉ có một CMD.
WORKDIR — Thiết lập thư mục đang làm việc cho các chỉ thị khác như: RUN, CMD, ENTRYPOINT, COPY, ADD,…
ARG — Định nghĩa giá trị biến được dùng trong lúc build image
ENTRYPOINT — cung cấp lệnh và đối số cho một container thực thi
EXPOSE — khai báo port lắng nghe của image
VOLUME — tạo một điểm gắn thư mục để truy cập và lưu trữ data
Run project với nestjs
Bước 1: config file Dockerfile
Bước 2: docker build –t <<app-name>>
Bước 3: docker run –p 8080:8080 app-name
Trang 18RUN npm run build
EXPOSE 8080
CMD “npm”,”run”,”serve”]
Run Project cho VueJs
Bước 1: docker build –t <<app-name>>
Hình 2.1: Build dockerfile cho VueJs
Bước 2: docker run -it -p 8080:8080 -v /app/node_modules rm test:latest
Trang 19Hình 2.2: Run dockerfile
2.2 Setup Docker-Compose
2.2.1 Quy trình cơ bản
Cơ bản quy trình dùng docker compose gồm ba bước:
1 Xác định môi trường ứng dụng của bạn bằng Dockerfile để nó có thể được lưu trữ
ở mọi nơi
2 Xác định các dịch vụ tạo nên ứng dụng của bạn trong docker-compose.yml để
chúng có thể chạy cùng nhau trong một môi trường biệt lập
3 Chạy docker-compose up và bắt đầu chạy toàn bộ ứng dụng của bạn.
Trang 20Ghi chú:
services: để khai báo những service có trong docker-compose
build: để khai báo đường dẫn tới service và có thể thêm đường dẫn đến docker filereset: always dùng khi db gặp sự cố thì tự khởi động lại
image: khai báo tên image khi build
container_name: khai báo tên container khi build
port: ánh xạ port từ container sang port sang máy local
environment: tương tự như file env để setup môi trường
links: để chỉ ra liên kết của các image với nhau
volumes: là nơi chứa data
Trang 21Chương 3: Phát triển Website học tiếng anh3.1 Mô tả ứng dụng
Website là cầu nối giữa người dạy và người học Cho phép người học tìm kiếm và đăng
ký vào một khóa học tùy theo trình độ của mình Người học có thể xem bài học qua videohoặc là xem livestream giảng dạy trực tiếp nếu người dùng sử dụng gói tài khoản cao cấp hơn
Trang 223.2 Sơ đồ Use case
3.2.1 Tổng quát
Trang 24Hình 3.1: Sơ đồ Use case tổng quát
Trang 26Exception Flow
Trang 27Business Rules
Non-Functional Requirement
Trang 29Basic Flow
Alternative Flow
Exception Flow
Trang 30Business Rules
Non-Functional Requirement
Trang 313.2.2.3 Quản lý tài khoản người dùng
Hình 3.4: Đặc tả Use case quản lý tài khoản người dùng
Use case ID
Use case name
Trang 33Exception Flow
Trang 35Use case name
Trang 36Exception Flow
Business Rules
Non-Functional Requirement
Trang 38Basic Flow
Alternative Flow
Trang 39Exception Flow
Business Rules
Non-Functional Requirement
Trang 42Exception Flow
Business Rules
Non-Functional Requirement
Trang 43Hình 3.8: Đặc tả Use case quản lý khóa học cho Speaker
Trang 44Exception Flow
Trang 473.2.2.8 Cập nhật thông tin tài khoản
Hình 3.10: Đặc tả Use case cập nhật thông tin tài khoản
Trang 54Basic Flow
Alternative Flow
Exception Flow
Trang 57Business Rules
Non-Functional Requirement
3.3 Sơ đồ Lớp
Hình 3.15: Sơ đồ lớp
Trang 58Chương 4: Kết luận và Hướng phát triển4.1 Kết quả đạt được
- Website đã có những chức năng cơ bản
- Chúng em đã áp dụng thành công việc sử dụng Docker vào quá trình phát triển
4.2 Hạn chế
- Do thời gian có hạn nên vẫn còn nhiều chức năng chưa được hoàn thành
- Website vẫn đang chạy ở localhost
4.3 Hướng phát triển
- Hoàn thành các chức năng chưa được phát triển
- Triển khai Website lên server và cấp domain cho website
Trang 59Chương 5: Tài liệu tham khảo
[1] https://docs.docker.com/
[2] docker-introduction/docker-terminology
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/container-[3] A Survey on Docker and its Significance in Cloud Environment - Amith Raj M.P , Ashwini M.L , Bhagyashree Das , Vaidehi M
[4]
https://viblo.asia/p/tim-hieu-chi-tiet-ve-docker-swarm-phan-1-eW65GW795DO#_kien-truc-docker-swarm 2