1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tìm hiểu docker và xây dựng mô hình cicd

24 10 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 Mô Hình Cicd
Tác giả Trần Ngọc Sơn, Lê Bảo Tài, Vương Trường Chung, Trương Hồ An
Người hướng dẫn Thầy Lương Minh Huấn
Trường học Trường Đại Học Sài Gòn
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ Án Môn Học
Năm xuất bản 2023
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 24
Dung lượng 787,12 KB

Nội dung

Docker ra đời để giải quyết vấn đề trên.Bằng cách đơn giản hóa quá trình triển khai có nghĩa là Docker được sử dụng để đóng gói ứng dụng và môi trường thực thi của nó vào một container d

Trang 1

ỦY BAN NHÂN DÂN TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC SÀI GÒN

Khoa Công nghệ thông tin

ĐỒ ÁN MÔN HỌC

Tìm hiểu Docker và xây dựng mô hình CICD

Tên thành viên :

Trần Ngọc Sơn: 3120410454

Lê Bảo Tài: 3120410457

Vương Trường Chung: 3120410068 Trương Hồ An:3120410024

THÀNH PHỐ HỒ CHÍ MINH, THÁNG 12 NĂM 2023

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 Lương Minh Huấn– 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ức cò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

Contents

Chương 1: Kiến thức về Docker 5

1.1 Giới thiệu sơ lược về Docker 5

Tại sao lại có Docker 5

Docker là gì? 5

Lịch sử ra đời 5

Roadmap phát triển 5

1.2 Kiến trúc tổng thể 7

Docker Engine 7

Docker Hub 8

Một số thuật ngữ 8

1.3 Cách thức hoạt động 9

1.4 Docker mang lại lợi ích gì? Cho ai? Trong hoàn cảnh nào? 10

Lợi ích và hoàn cảnh sử dụng 10

Ai sử dụng Docker 10

1.5 Một số công cụ phổ biến 10

Docker Compose 11

Docker Swarm 11

1.6 So sánh Docker với các công nghệ tương tự 11

Chương 2: Áp dụng Docker 12

2.1 Setup Dockerfile 12

NestJs – backend 12

VueJs – frontend 13

2.2 Setup Docker-Compose 14

Quy trình cơ bản 14

Docker-compose file 15

Chương 3: Mô hình CI/CD 16

CICD là gì ? 16

Triển khai CICD đơn giản 16

Jenkins 17

Tại sao lại có Jenkins? 17

Jenkins là gì? 17

Trang 4

Thành phần của Jenkins 17

Ứng dụng của Jenkins 18

AWS 19

AWS là gì ? 19

Các tính năng vượt trội 19

Dịch vụ quan trọng trên AWS 20

Ansible: 21

Ansible là gì? 21

Thành phần của Ansible 21

Ứng dụng của Ansible 22

Trang 5

Chương 1: Kiến thức về Docker

1.1 Giới thiệu sơ lược về Docker

Tại sao lại có Docker

Trong quá trình phát triển phần mềm, có thể xuất hiện nhiều vấn đề của sự không tương thích giữa các máy tính của các nhà phát triển và môi trường triển khai

Docker ra đời để giải quyết vấn đề trên.Bằng cách đơn giản hóa quá trình triển khai có nghĩa là

Docker được sử dụng để đóng gói ứng dụng và môi trường thực thi của nó vào một container duy nhất, đảm bảo rằng ứng dụng sẽ chạy đúng trên môi trường hoặc một máy tính

Docker là gì?

Docker là một nền tảng cho developers và sysadmin để develop, deploy và run application 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 deploy lên bất kỳ server nào chỉ cần run container của Docker thì application của bạn sẽ được khởi chạy ngay lập tức

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, platform-as-a- service ở Pháp

• 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 thay cho việc dùng docker engine

Roadmap phát triển

• Tháng 9-2013 Red hat và docker công bố hợp tác xoay quanh Fedora, RHEL, OpenShift

• Tháng 10-2014 công bố tích hợp Docker engine vào windows server và hỗ trợ native cho

docker client trong windows

• Tháng 11-2014 Docker công bố hợp tác với Stratoscale(công ty làm về data center

operating system Vmware là 1 trong các sản phẩm).Ngoài ra, Docker container đã có thể

support cho EC2 của Amazon

Trang 6

• 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 7

• 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

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 8

• Một REST API đóng vai trò như interface để giao tiếp với docker daemon

• Một command line interface (CLI) đóng vai trò như một client

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

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ông qua docker client

Hình 1.2: Trang Docker hub

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; 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 ảnh hưởng tới hệ thống host và các container khác

Trang 9

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ụ:

Với mỗi câu lệnh trên, docker sẽ tạo ra một layer nằm chồng lên container image Các layer sẽ được hash, có nghĩa là docker sẽ lưu các layer vào bộ nhớ cache Điều này sẽ tối ưu thời gian build cho các layer mà không thay đổi giữa những lần build Tức là người dùng sẽ không phải rebuild và copy các file ở bước COPY nếu như câu lệnh COPY không thay đổi

Trang 10

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?

• 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

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

Trang 11

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 duy nhất và chạy tất cả các container chỉ với một câu lệnh

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ự

So sánh với

Docker Mô phỏng trải nghiệmvận hànhMáy ảo

nhưng vềvùng chứa vàlàm như vậymà không tốnchi phí môphỏng tàinguyên phầncứng

Mặc dùdaemon LXDyêu cầu nhânLinux, nó

cóthể được cấuhình để truycập bằng máykhách

Windowshoặc macOS

Một phần mởrộng của nhânLinux, cungcấp các côngcụ để ảo hóacho ngườidùng

Nó sửdụng Môitrường ảo đểlưu trữ các hệthống Khách,

có nghĩa là nósử dụng vùngchứa cho toànbộ hệ điềuhành, khôngphải các ứngdụng và quytrình riêng lẻ

Sử dụng nhân được váđể cung cấp các tínhnăng ảo hóa cấp hệđiều hành Mỗi Máychủ riêng ảo đượcchạy như một quytrình riêng biệt trêncùng một hệ thốngmáy chủ lưu trữ và cóhiệu quả cao do khôngcần mô phỏng Tuynhiên, nó là cổ điển về

CI / CD và DevOps, Vùng chứa và dữ liệu lớn, Bộ Ứng dụng Người dùng Biệt lập Lưu trữ, Hợp nhất máy chủ

Nhiều VPS lưu trữ và quản trị,

DreamHost, Amoebasoft, OpenHosting Inc., Lycos, Pháp,MosaixCommunications, Inc

Trang 12

RUN npm run build

FROM node:12.13-alpine as production

ARG NODE_ENV=production ENV

Trang 13

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

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 14

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

2.2 Setup Docker-Compose

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 15

Docker-compose file

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 file reset: 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 16

Chương 3: Mô hình CI/CD

3.1 CICD là gì ?

CI/CD là viết tắt của Continuous Integration và Continuous Delivery (hoặc Continuous Deployment), đây

là một phương pháp trong quy trình phát triển phần mềm để tự động hóa quá trình kiểm thử và triển khai

mã nguồn

1 Continuous Integration (CI): Là quá trình tích hợp tự động mã nguồn từ các thành viên của nhóm phát triển Mỗi khi có thay đổi trong mã nguồn, CI sẽ tự động kích hoạt quá trình kiểm thử tự động để đảm bảo rằng mã mới không làm hỏng tính ổn định của hệ thống

2 Continuous Delivery (CD): Là quá trình tự động hóa việc triển khai (deploy) mã nguồn từ môi trường phát triển đến môi trường sản phẩm một cách liên tục Mục tiêu là để có thể triển khai các thay đổi

mà không cần sự can thiệp thủ công, giúp giảm thiểu lỗi và tăng tính ổn định của hệ thống

3 Continuous Deployment (CD): Tương tự như Continuous Delivery, nhưng với Continuous

Deployment, các thay đổi sẽ được triển khai tự động đến môi trường sản phẩm mà không cần sự can thiệp thủ công Điều này có nghĩa là mọi thay đổi qua các bước kiểm thử sẽ tự động triển khai nếu tất cả các bước kiểm thử đều thành công

Quy trình CI/CD giúp tăng cường sự linh hoạt, tính ổn định và tăng tốc trong quá trình phát triển phần mềm bằng cách giảm thời gian và công sức cần thiết cho các bước kiểm thử và triển khai

Triển khai CICD đơn giản

Triển khai CI/CD có thể được thực hiện theo một số bước cơ bản Dưới đây là hướng dẫn giả sử bạn đang bắt đầu từ một dự án phần mềm và muốn triển khai CI/CD:

Continuous Integration (CI):

Quản lý mã nguồn:

Trang 17

• Sử dụng một hệ thống quản lý mã nguồn như Git để theo dõi và quản lý mã nguồn

Automated Builds:

• Cấu hình công cụ tự động hóa quy trình xây dựng (build) như Jenkins, Travis CI, hoặc GitLab CI

để tự động xây dựng mã nguồn mỗi khi có thay đổi

Automated Tests:

• Thêm bộ kiểm thử tự động (automated tests) vào quy trình xây dựng để đảm bảo tính ổn định của

mã nguồn Các loại kiểm thử có thể bao gồm unit tests, integration tests, và end-to-end tests Continuous Delivery/Continuous Deployment (CD):

Quy trình Triển khai (Deployment Pipeline):

• Xây dựng một quy trình triển khai tự động, từ môi trường phát triển cho đến môi trường thử nghiệm và môi trường sản phẩm

Tại sao lại có Jenkins?

Trong quá trình phát triển phần mềm, đặc biệt là trong mô hình Agile và DevOps, việc tích hợp liên tục

và triển khai liên tục trở nên quan trọng Jenkins được thiết kế để tự động hóa các bước này, giúp tăng cường chất lượng phần mềm, giảm thời gian triển khai và tạo điều kiện cho quá trình phát triển linh hoạt hơn

Ngày đăng: 11/03/2024, 10:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w