1. Trang chủ
  2. » Cao đẳng - Đại học

Tìm hiểu docker và xây dựng ứng dụng

59 36 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm Hiểu Docker Và Xây Dựng Ứng Dụng
Tác giả Nguyễn Thanh Thọ, Đồng Việt Tùng
Người hướng dẫn Ths. Nguyễn Công Hoan
Trường học Đại Học Quốc Gia Tp. Hồ Chí Minh
Chuyên ngành Công Nghệ Phần Mềm
Thể loại Đồ Án
Năm xuất bản 2021
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 59
Dung lượng 1,21 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

LỜ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 3

LỜ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 6

TÓ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 7

Chươ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 9

Docker 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 10

Thậ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 11

Sau 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 13

cụ để ả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 14

DreamHost, Amoebasoft, OpenHosting Inc., Lycos, Pháp, Mosaix Communications, Inc.

Trang 15

Chươ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 16

WORKDIR /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 17

CMD — 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 18

RUN 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 19

Hì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 20

Ghi 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 21

Chươ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 22

3.2 Sơ đồ Use case

3.2.1 Tổng quát

Trang 24

Hình 3.1: Sơ đồ Use case tổng quát

Trang 26

Exception Flow

Trang 27

Business Rules

Non-Functional Requirement

Trang 29

Basic Flow

Alternative Flow

Exception Flow

Trang 30

Business Rules

Non-Functional Requirement

Trang 31

3.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 33

Exception Flow

Trang 35

Use case name

Trang 36

Exception Flow

Business Rules

Non-Functional Requirement

Trang 38

Basic Flow

Alternative Flow

Trang 39

Exception Flow

Business Rules

Non-Functional Requirement

Trang 42

Exception Flow

Business Rules

Non-Functional Requirement

Trang 43

Hình 3.8: Đặc tả Use case quản lý khóa học cho Speaker

Trang 44

Exception Flow

Trang 47

3.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 54

Basic Flow

Alternative Flow

Exception Flow

Trang 57

Business Rules

Non-Functional Requirement

3.3 Sơ đồ Lớp

Hình 3.15: Sơ đồ lớp

Trang 58

Chươ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 59

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

Ngày đăng: 05/09/2021, 20:49

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Kiến trúc Docker - Tìm hiểu docker và xây dựng ứng dụng
Hình 1.1 Kiến trúc Docker (Trang 8)
Hình 1.2: Trang Docker hub - Tìm hiểu docker và xây dựng ứng dụng
Hình 1.2 Trang Docker hub (Trang 9)
Hình 1.3: So sánh kiến trúc của container và Virtual Machines - Tìm hiểu docker và xây dựng ứng dụng
Hình 1.3 So sánh kiến trúc của container và Virtual Machines (Trang 10)
Hình 1.4: Kiến trúc phân lớp của container - Tìm hiểu docker và xây dựng ứng dụng
Hình 1.4 Kiến trúc phân lớp của container (Trang 11)
Container. Docker Compose cho phép ta cấu hình các container trong một file YAML duy nhất và chạy tất cả các container chỉ với một câu lệnh - Tìm hiểu docker và xây dựng ứng dụng
ontainer. Docker Compose cho phép ta cấu hình các container trong một file YAML duy nhất và chạy tất cả các container chỉ với một câu lệnh (Trang 12)
Hình 2.1: Build dockerfile cho VueJs - Tìm hiểu docker và xây dựng ứng dụng
Hình 2.1 Build dockerfile cho VueJs (Trang 18)
Hình 2.2: Run dockerfile - Tìm hiểu docker và xây dựng ứng dụng
Hình 2.2 Run dockerfile (Trang 19)
Hình 3.1: Sơ đồ Use case tổng quát - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.1 Sơ đồ Use case tổng quát (Trang 24)
Hình 3.3: Đặc tả Use case quản lý khóa học - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.3 Đặc tả Use case quản lý khóa học (Trang 28)
Hình 3.4: Đặc tả Use case quản lý tài khoản người dùng - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.4 Đặc tả Use case quản lý tài khoản người dùng (Trang 31)
Hình 3.5: Đặc tả Use case quản lý speaker - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.5 Đặc tả Use case quản lý speaker (Trang 34)
Hình 3.6: Đặc tả Use case tìm kiếm khóa học - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.6 Đặc tả Use case tìm kiếm khóa học (Trang 37)
Hình 3.7: Đặc tả Use case quản lý khóa học cho User - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.7 Đặc tả Use case quản lý khóa học cho User (Trang 40)
Hình 3.8: Đặc tả Use case quản lý khóa học cho Speaker - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.8 Đặc tả Use case quản lý khóa học cho Speaker (Trang 43)
Hình 3.9: Đặc tả Use case quên mật khẩu - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.9 Đặc tả Use case quên mật khẩu (Trang 45)
Hình 3.10: Đặc tả Use case cập nhật thông tin tài khoản - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.10 Đặc tả Use case cập nhật thông tin tài khoản (Trang 47)
Hình 3.11: Đặc tả Use case livestream - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.11 Đặc tả Use case livestream (Trang 49)
Hình 3.12: Đặc tả Use case quản lý buổi học - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.12 Đặc tả Use case quản lý buổi học (Trang 51)
Hình 3.13: Đặc tả Use case xem livestream - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.13 Đặc tả Use case xem livestream (Trang 53)
Hình 3.14: Đặc tả Use case đăng ký trở thành speaker - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.14 Đặc tả Use case đăng ký trở thành speaker (Trang 55)
Hình 3.15: Sơ đồ lớp - Tìm hiểu docker và xây dựng ứng dụng
Hình 3.15 Sơ đồ lớp (Trang 57)

TỪ KHÓA LIÊN QUAN

w