ĐỀ TÀI DOCKER TRONG C# MÔN CÔNG NGHỆ .NET

26 72 0
ĐỀ TÀI DOCKER TRONG C# MÔN CÔNG NGHỆ .NET

Đ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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM ĐỀ TÀI: DOCKER TRONG C# MÔN: CÔNG NGHỆ NET Giảng viên hướng dẫn: Huỳnh Hồ Thị Mộng Trinh Sinh viên thực hiện: Nguyễn Công Phi – 19522006 Lương Thiện Phước – 19522055 Bùi Như Phước - 19522052 LỜI CẢM ƠN Chúng em xin gửi lời cảm ơn chân thành đến cô Huỳnh Hồ Thị Mộng Trinh giảng viên môn “Công nghệ Net” khoa Công nghệ phần mềm tận tâm hướng dẫn chúng em trang bị cho chúng em kiến thức, kĩ cần có để hồn thành đề tài nghiên cứu Tuy nhiên trình nghiên cứu đề tài, kiến thức chun ngành cịn hạn chế chưa có kinh nghiệm làm việc thực nên chúng em cịn nhiều thiếu sót tìm hiểu, đánh giá trình bày đề tài Rất mong nhận quan tâm, góp ý để đề tài chúng em đầy đủ hoàn chỉnh Chúng em xin chân thành cảm ơn Nhóm thực đề tài Mục lục I Giới thiệu chung: .3 Đặt vấn đề: Định nghĩa: II Công nghệ Docker: Containerlization: .4 Lịch sử container III 2.1 Định nghĩa: 2.2 Lịch sử hình thành Container Các thành phần docker .10 Các thành phần 10 1.1 Docker Engine: 10 1.3 Docker Registry/Docker Hub 13 Một số lệnh bản: 13 2.1 Các câu lệnh: 13 2.3 IV Một số option thường dùng với docker run: .15 Docker C# 16 Docker C# làm gì: 16 Giải thích dockerfile 17 2.1 Cấu trúc dockerfile: .17 Giải thích dockercompose 19 3.1 Khái niệm 19 V 3.2 Đặc điểm 20 3.3 Lợi ích 20 Kết luận 20 Độ hữu dụng docker 20 Ưu nhược điểm 21 VI 2.1 Ưu điểm .21 2.2 Nhược điểm 21 Bảng phân công công việc 22 Tài liệu tham khảo 23 I Giới thiệu chung: Đặt vấn đề: - Khi phát triển bảo trì ứng dụng, thơng thường cần cài đặt số môi trường, thư viện, phụ thuộc cho chương trình đó, việc khó khăn chuyển mơi trường, đặc biệt với môi trường yêu cầu hệ điều hành khác lại thêm rắc rối, Docker cơng cụ để đơn giản hóa điều Chỉ với vài dịng lệnh, nhanh chóng tạo mơi trường ảo hố chứa đầy đủ cài đặt cần thiết cho dự án Nhưng khơng dừng lại đó, cơng dụng Docker nhiều ngày sử dụng phổ biến khắp nơi Định nghĩa: - Docker tảng cung cấp cho công cụ, service để developers, adminsystems phát triển, thực thi, chạy ứng dụng với containers Hay nói cách khác tảng để cung cấp cách để building, deploy run ứng dụng cách dễ dàng tảng ảo hóa - Phần lớn nói về Docker, ta thường hiểu là Cơng nghệ Docker Nó phần mềm chạy Linux Windows, cho phép dựng, kiểm thử triển khai ứng dụng cách nhanh chóng Docker đóng gói phần mềm vào đơn vị tiêu chuẩn hóa gọi là container Docker được đặt tên xuất phát từ cách diễn đạt dock worker - Docker có hai phiên chính: o Docker Community Editon – CE: Là phiên miễn phí o Docker Enterprise – EE: Phiên phiên trả phí, sử dụng phiên có hỗ trợ từ nhà phát hành II Công nghệ Docker: Containerlization: - Trước đây, mơ hình máy chủ thường là: o Máy chủ vật lý (physical server) + hệ điều hành (operating system) + ứng dụng (application) - Vấn đề gặp phải lãng phí tài nguyên o Một máy chủ cài OS o Cho dù có ổ cứng khủng, ram khủng khơng tận dụng hết lợi - Sau đời cơng nghệ ảo hóa virtualization o Có thể nghe tới tên Virtualbox hay VMware rồi khơng, đó o Với công nghệ này, trên một máy chủ vật lý mình cài đặt được nhiều OS, tận dụng tài nguyên tốt - Nhưng lại nảy sinh vấn đề tiếp: o Về tài nguyên:  Khi bật máy ảo, cần cấu hình để cung cấp từ đầu tài nguyên ổ cứng và ram từ máy thật cho máy ảo  Sau bật máy ảo, máy thật tái sử dụng tài nguyên cho o Về thời gian:  Việc khởi động, tắt máy ảo lâu, lên tới hàng phút - Ở bước tiến hố tiếp theo, cơng nghệ containerlization đời: o Với công nghệ này, máy chủ vật lý, ta cài đặt nhiều máy ảo (giống với công nghệ ảo hóa virtualization), tốt chỗ máy (Guess OS) đều dùng chung phần nhân máy mẹ (Host OS) chia sẻ với tài nguyên máy mẹ  Có thể nói cần tài nguyên cấp, cần cấp nhiêu, việc tận dụng tài nguyên tối ưu Lịch sử container 2.1 Định nghĩa: - Các phần mềm, chương trình được Container Engine (là cơng cụ ảo hóa tinh gọn cài đặt host OS) đóng gói thành các container - Vậy Container giải pháp để chuyển giao phần mềm cách đáng tin cậy các mơi trường máy tính khác cách: o Tạo môi trường chứa mọi thứ mà phần mềm cần để chạy o Khơng bị yếu tố liên quan đến môi trường hệ thống làm ảnh hưởng tới o Khơng làm ảnh hưởng tới phần cịn lại của hệ thống - Ví dụ: Chúng ta hiểu ruby, rails, mysql bỏ gọn vào nhiều thùng (container), ứng dụng chạy thùng đó, có sẵn thứ cần thiết để hoạt động, không bị ảnh hưởng từ bên ngồi khơng gây ảnh hưởng ngồi - Các tiến trình (process) một container bị lập với tiến trình container khác hệ thống nhiên tất các container này chia sẻ kernel host OS (dùng chung host OS) - Ưu điểm Container: o Linh động: Triển khai nơi đâu phụ thuộc ứng dụng vào tầng OS sở hạ tầng loại bỏ o Nhanh: Do chia sẻ host OS nên container tạo gần cách tức o Nhẹ: Container sử dụng chung images nên không tốn nhiều disks o Đồng nhất: Khi nhiều người phát triển dự án không bị sai khác mặt mơi trường o Đóng gói: Có thể ẩn mơi trường bao gồm app vào gói gọi container Có thể test container Việc bỏ hay tạo lại container dễ dàng - Nhược điểm Container: o Do dùng chung OS nên xuất lỗ hổng kernel host OS ảnh hưởng tới tồn container có host OS o Với host OS Linux, trường hợp có người ứng dụng có container chiếm quyền superuser, lý thuyết tầng OS bị crack ảnh hưởng trực tiếp tới máy host bị hack container khác máy 2.2 Lịch sử hình thành Container III Các thành phần docker Các thành phần 1.1 Docker Engine: - Docker Engine phần cốt lõi Docker, cơng cụ để đóng gói ứng dụng, xây dựng theo kiểu kiến trúc client-server cài đặt máy Host - Docker Engine có thành phần: o Server: Docker Daemon dùng để tạo quản lý images, containers, networks, volumes o Rest API: controller cho docker daemon, docker daemon làm o Client: Là công cụ giúp người dùng giao tiếp với Docker host Người dùng tương tác với docker thông qua command terminal (CLI) Docker Client sử dụng API gửi lệnh tới Docker Daemon 10 - Có đối tượng Docker Engine: o Dockerfile:  Dockerfile file dạng text khơng có phần mở rộng, chứa đặc tả trường thực thi phần mềm, cấu trúc cho Docker image  Docker image tạo tự động cách đọc dẫn Dockerfile  Từ câu lệnh đó, Docker build Docker image (thường có dung lượng nhỏ từ vài MB đến lớn vài GB) o Image:  Image docker cịn gọi mirror, đơn vị đóng gói chứa thứ cần thiết để ứng dụng chạy  Image tạo thành từ nhiều layer xếp chồng lên nhau, bên image hệ điều hành bị cắt giảm tất phụ thuộc (dependencies) cần thiết để chạy ứng dụng o Container:  Một image sử dụng để tạo nhiều container  Ta create, start, stop, move delete dựa Docker API Docker CLI  Trên hệ điều hành, ta cài đặt container engine docker Sau đó, cơng cụ container lấy tài nguyên hệ điều hành ghép chúng lại thành cấu trúc riêng biệt gọi làcontainer  Mỗi container bao gồm thứ cần thiết để chạy nó: code, runtime, system tools, system libraries, setting Mỗi container hệ điều hành thực sự, bên container chạy ứng dụng 11  Container VM có cách ly phân bổ tài nguyên tương tự có chức khác container ảo hóa hệ điều hành thay phần cứng  Các container có tính portable hiệu  Container nhằm làm cho ứng dụng trở nên dễ dàng xây dựng, di chuyển chạy  Q trình đưa ứng dụng chạy container có để hiểu sau:  Đầu tiên ta bắt đầu với code app phụ thuộc  Tạo Dockerfile mô tả app, phụ thuộc cách run app  Bulid Dockerfile thành image  Push image build vào registry(option)  Chạy container từ image o Network:  Docker network có nhiệm vụ cung cấp private network (VLAN) để container host liên lạc với nhau, container nhiều hosts liên lạc với (multi-host networking) o Volume:  Docker volume chế tạo sử dụng liệu docker, có nhiệm vụ lưu trữ liệu độc lập với vòng đời container  Có trường hợp sử dụng Docker Volume:  Giữ lại liệu Container bị xóa  Để chia sẻ liệu máy chủ vật lý Docker Container  Chia sẻ liệu Docker Container 12 1.3 Docker Registry/Docker Hub - Docker Registry dịch vụ máy chủ cho phép lưu trữ docker image cá nhân, công ty, team, Dịch vụ Docker Registry cung cấp tổ chức thứ dịch vụ nội xây dựng riêng muốn - Một số dịch vụ Docker Registry phổ biến như: o Azure Container Registry o Docker Hub o Quay Enterprise o Google Container Registry o AWS Container Registry Một số lệnh bản: 2.1 Các câu lệnh: - Cấu trúc lệnh “docker ” o Các component là: image, container, docker, volume, network, o Các command là: ls, rm, prune, build, run, … - docker ps: o Là viết tắt docker container ls Dùng để liệt kê container chạy o Khi sử dụng với tham số:  -a/-all: Liệt kê tất container, kể chạy hay kể thúc  -q/-quiet: liệt kê id container - docker pull: o Là viết tắt docker image pull Để tải image cụ thể tập hợp image 13 o Hầu hết image tạo dựa image sở từ Docker Hub Docker Hub chứa nhiều image dựng sẵn, mà ta pull dùng mà khơng cần phải định nghĩa cấu hình lại từ đầu - docker build: o Là viết tắt docker image build Lệnh dùng để build image từ Dockerfile context Context tập file xác đinh đường dẫn url cụ thể Ta sử dụng thêm tham số -t để gắn nhãn cho image - docker run: o Là viết tắt docker container run Lệnh dùng để chạy container dựa image mà ta có sẵn Ta thêm vào sau lệnh vài câu lệnh khác -it bash để chạy bash từ container - docker logs: o Lệnh sử dụng để hiển thị logs container, ta cần phải rõ container để hiển thị logs thông qua tên Ngồi sử dụng thêm số flag follow để giữ việc theo dõi logs - docker volume ls: o Lệnh dùng để liệt kê volumn mà container sử dụng, volume chế dùng để lưu trữ liệu sinh sử dụng Docker - docker rm: o Là viết tắt docker container rm Lệnh dùng để xóa nhiều container - docker rmi: 14 o Lệnh dùng để xóa nhiều images - docker stop: o Là viết tắt docker container stop Lệnh dùng để stop nhiều container Ngồi ta dung docker kill để bắt buộc container dừng lại 2.3 Một số option thường dùng với docker run: - Trong lệnh có lẽ docker run lệnh hữu ích ta thường sử dụng Nó sử dụng để tạo container dựa vào image cụ thể Có nhiều option sử dụng với docker run o detach, -d : Mặc định docker container chạy input, output, lỗi thị trực tiếp hình terminal Tuy nhiên với tùy chọn detach/-d, container chạy ngầm output, lỗi không hiển thị o entrypoint: Thiết lập ghi đè lệnh mặc định chạy images Entrypoint tập lệnh tham số chạy container chạy từ image Bất kỳ câu lệnh tham số truyền vào sau docker run nối vào entrypoint o env, -e: Thiết lập biến môi trường sử dụng cặp (key=value) Nếu ta có biến mơi trường file ta truền vào file tùy chọn env-file o ip: Khai báo địa IP cho container o name: Gắn tên cho container o publish, -p | publish-all, -p: Do container docker gộp chạy network riêng nên độc lập với máy chủ mà docker chạy Để mở cổng network container 15 ánh xạ với cổng máy host ta sử dụng tùy chọn publish, -p Hoặc sử dụng publish-all, -P mở tất cổng container o rm: Tự động xóa container o tty, -t: Cấp terminal ảo cho container Tùy chọn thường sử dụng với interactive, -i giúp cho STDIN mở container chạy dạng ngầm o volume, -v: Gắn volume vào container, cho phép thao tác container liệu lưu trữ máy chủ o workdir, -w: Chỉ định thư mục làm việc bên container Giả sử ta làm việc với thư mục app docker IV Docker C# Docker C# làm gì: - Docker hoạt động tốt với tất ứng dụng C# không sử dụng GUI (Graphic User Interface), tức ứng dụng chạy khơng render hình giao diện - Tức C# NET Docker sử dụng hiệu ứng dụng NET không sử dụng giao diện, web ASP.NET,… Và không sử dụng thực hiệu Windows Form WPF - Deploy ứng dụng C# Docker - Chúng ta khởi chạy dự án C# nhiều môi trường khác (window, macos, linux, ) - Dễ dàng thiết lập môi trường làm việc Chỉ cần config lần cài đặt lại dependencies Nếu thay đổi máy có người tham gia vào project cần lấy config đưa cho họ 16 - Docker tích hợp VCS-git, để tracking dòng lệnh thiết lập, hay đánh dấu version cho ứng dụng - Tiết kiệm thời gian cho dev (Docker start va stop vài giây) Giải thích dockerfile 2.1 Cấu trúc dockerfile: - Cấu trúc Dockerfile thường thấy gồm thành phần: FROM, RUN, CMD - Trong FROM thị bắt buộc phải có file Ngồi cịn có thị khác hay xuất hiện, là: MAINTAINER, COPY, ENV, ENTRYPOINT, WORKDIR, USER, VOLUME, EXPOSE 2.1.1 From: - Là thị bắt buộc của file Chỉ thị phải đặt Dockerfile Ý nghĩa định image sở để từ triển khai, xây dựng image Để xây dựng từ image sở cần đọc document image để biết chứa gì, chạy lệnh Ví dụ, chọn xây dựng từ image centos:lastest lệnh cài đặt, cập nhật gói yum, chọn ubuntu:latest trình quản lý gói lại apt… - FROM xuất nhiều lần Dockerfile, tạo nhiều image sử dụng giai đoạn build khác Với lệnh FROM, xóa trạng thái FROM tạo trước đó. - Cấu trúc: o FROM [AS ] o FROM [:] [AS ] o FROM [@] [AS ] 17 - Trong đó: Từ khố “AS” dùng muốn đổi tên image; “tag” và “digest” là tùy chọn image, mặc định khơng có tag lấy version cuối cùng: latest - Ví dụ: o FROM centos AS testImage o FROM centos:7 AS testImage 2.1.2 Run - Là thị không bắt buộc - Chạy trình build image kết đc lưu lại thêm image gốc - Với câu lệnh RUN, có forms cho lựa chọn: - RUN (shell form, command chạy bên shell, mặc định /bin/sh c Linux cmd /S /C Windows Chúng ta thực nhiều lệnh lúc cách thức ‘shell form‘ sử dụng thị RUN với dấu ‘‘) - Ví dụ: o RUN apt-get update; o apt-get install curl -y o RUN [“executable”, “param1”, “param2”] (exec form) - Ví dụ: RUN apt-get update RUN apt-get install curl -y 2.1.3 CMD: - Là thị không bắt buộc - Định nghĩa câu lệnh chạy sau chạy container - Có thể khai báo nhiều có CMD cuối có tác dụng 18 - Khi sử dụng hình thức shell cho lệnh CMD, thực thi với /bin/sh –c - Ví dụ: o CMD [“/bin/sh”, “/home/run.sh”] o LABEL: cung cấp metadata cho image Có thể sử dụng để add thông tin maintainer o INSPECT: Để xem label images o ENV: thiết lập biến môi trường o COPY: Sao chép file thư mục vào container o WORKDIR: Thiết lập thư mục làm việc cho thị khác như: RUN, CMD, ENTRYPOINT, COPY, ADD,… o ARG: Định nghĩa giá trị biến dùng lúc build image o ENTRYPOINT: cung cấp lệnh đối số cho container thực thi o EXPOSE: khai báo port lắng nghe image o VOLUME: tạo điểm gắn thư mục để truy cập lưu trữ data Giải thích dockercompose 3.1 Khái niệm - Docker compose công cụ dùng để định nghĩa run multi-container cho Docker application Với compose sử dụng file YAML để config services cho application Sau dùng command để create run từ config Sử dụng đơn giản với ba bước: - Khai báo app’s environment Dockerfile 19 - Khai báo services cần thiết để chạy application file dockercompose.yml - Run docker-compose up để start run app 3.2 Đặc điểm - Không giống Dockerfile (build image) Docker compose dùng để build run container Các thao tác docker-compose tương tự lệnh: docker run - Docker compose cho phép tạo nhiều service(container) giống lệnh: $ docker-compose scale = 3.3 Lợi ích - Tạo nhiều môi trường độc lập (isolated environments) host: Compose cô lập môi trường project để đảm bảo chúng không bị xung đột lẫn nhau, dễ dàng tạo môi trường - Chỉ tạo lại container thay đổi: Compose nhận biết service chưa thay đổi sử dụng lại container tương ứng với service - Điều chỉnh biến sử dụng cho môi trường: Compose sử dụng biến Compose file cho mơi trường Vì với mơi trường hay người dùng khác nhau, điều chỉnh biến sử dụng Compose để thiết lập service V Kết luận Độ hữu dụng docker - Sử dụng docker giúp cho tất developer phát triển môi trường giống hệt 20 - Do môi trường test phát triển giống nên phòng trừ trường hợp test local lại fail với CI - Có thể cố định version cách chia sẻ image fetch library liên quan Hoạt động library lấy go get không bị thay đổi - Vì kiểm tra hoạt động mà cài đặt OK deploy docker image đó, việc login vào server để thay đổi cài đặt trở nên khơng cần thiết Hơn nữa, hồn tồn test blackbox xem việc cài đặt chuẩn hay chưa - Đây vài ví dụ, nhiên cho thấy Docker có ích giúp giải vấn đề bên lề nhiều thời gian bên cạnh việc phát triển Ưu nhược điểm 2.1 Ưu điểm - Tính đồng nhất: Khi nhiều người phát triển dự án không bị sai khác mặt mơi trường - Đóng gói: o Có thể ẩn môi trường bao gồm app vào gói gọi container o Có thể test container o Việc bỏ hay tạo lại container dễ dàng - Linh động (tính quán): o Có thể test container dùng để phát triển CI o Có thể deploy container test CI lên server o Có thể scale container deploy 2.2 Nhược điểm - Tốn thời gian học tập o Đoạn đầu (chạy container) thoải mái cảm thấy làm chủ giới, nhiên nhanh chóng gặp nhiều vấn đề thực tế áp dụng vào mơi trường phát triển, câu hỏi "đoạn làm nhỉ?", hay "không biết cài đặt cách tốt nhỉ?" xuất địi hỏi kiến thức chuyên sâu 21 o Trong đội phát triển khơng cần tất phải có kiến thức chuyên sâu Docker, nhiên cần người nắm vững kiến thức để giải vấn đề gặp phải - Công cần thiết để biết viết code môi trường gần không so với phát triển local 22 VI Bảng phân công công việc STT Tên công việc Thành viên Công Phi Như Phước Thiện Phước Chuẩn bị, lên kế hoạch x x x Chuẩn bị nội dung x x x x x x x Soạn nội dung thuyết trình docker Quay video thuyết trình nội dung docker Quay video demo x Soạn nội dung báo cáo x x x Tỷ lệ công việc phân công 33% 33% 33% Mức độ hoàn thành 100% 100% 100% 23 Tài liệu tham khảo [1] Document docker: https://docs.docker.com/ [2] [Full] Docker gì? | Hướng dẫn đầy đủ Docker Compose: https://www.youtube.com/watch?v=yWCse8S2qsM [3] Deploy ứng dụng ASP.NET Core Docker - Comdy.vn https://comdy.vn/docker/deploy-ung-dung-asp-net-core-bang-docker/ [4] Tại nên đưa Docker làm chuẩn phát triển https://viblo.asia/p/tai-saonen-dua-docker-lam-chuan-khi-phat-trien-MdZkAYBakox 24

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM ĐỀ TÀI: DOCKER TRONG C# MÔN: CÔNG NGHỆ NET Giảng viên hướng dẫn: Huỳnh Hồ Thị Mộng Trinh Sinh viên thực hiện: Nguyễn Công Phi – 19522006 Lương Thiện Phước – 19522055 Bùi Như Phước - 19522052 LỜI CẢM ƠN Chúng em xin gửi lời cảm ơn chân thành đến cô Huỳnh Hồ Thị Mộng Trinh giảng viên môn “Công nghệ Net” khoa Công nghệ phần mềm tận tâm hướng dẫn chúng em trang bị cho chúng em kiến thức, kĩ cần có để hồn thành đề tài nghiên cứu Tuy nhiên trình nghiên cứu đề tài, kiến thức chun ngành cịn hạn chế chưa có kinh nghiệm làm việc thực nên chúng em cịn nhiều thiếu sót tìm hiểu, đánh giá trình bày đề tài Rất mong nhận quan tâm, góp ý để đề tài chúng em đầy đủ hoàn chỉnh Chúng em xin chân thành cảm ơn Nhóm thực đề tài Mục lục I Giới thiệu chung: .3 Đặt vấn đề: Định nghĩa: II Công nghệ Docker: Containerlization: .4 Lịch sử container III 2.1 Định nghĩa: 2.2 Lịch sử hình thành Container Các thành phần docker .10 Các thành phần 10 1.1 Docker Engine: 10 1.3 Docker Registry/Docker Hub 13 Một số lệnh bản: 13 2.1 Các câu lệnh: 13 2.3 IV Một số option thường dùng với docker run: .15 Docker C# 16 Docker C# làm gì: 16 Giải thích dockerfile 17 2.1 Cấu trúc dockerfile: .17 Giải thích dockercompose 19 3.1 Khái niệm 19 V 3.2 Đặc điểm 20 3.3 Lợi ích 20 Kết luận 20 Độ hữu dụng docker 20 Ưu nhược điểm 21 VI 2.1 Ưu điểm .21 2.2 Nhược điểm 21 Bảng phân công công việc 22 Tài liệu tham khảo 23 I Giới thiệu chung: Đặt vấn đề: - Khi phát triển bảo trì ứng dụng, thơng thường cần cài đặt số môi trường, thư viện, phụ thuộc cho chương trình đó, việc khó khăn chuyển mơi trường, đặc biệt với môi trường yêu cầu hệ điều hành khác lại thêm rắc rối, Docker cơng cụ để đơn giản hóa điều Chỉ với vài dịng lệnh, nhanh chóng tạo mơi trường ảo hố chứa đầy đủ cài đặt cần thiết cho dự án Nhưng khơng dừng lại đó, cơng dụng Docker nhiều ngày sử dụng phổ biến khắp nơi Định nghĩa: - Docker tảng cung cấp cho công cụ, service để developers, adminsystems phát triển, thực thi, chạy ứng dụng với containers Hay nói cách khác tảng để cung cấp cách để building, deploy run ứng dụng cách dễ dàng tảng ảo hóa - Phần lớn nói về Docker, ta thường hiểu là Cơng nghệ Docker Nó phần mềm chạy Linux Windows, cho phép dựng, kiểm thử triển khai ứng dụng cách nhanh chóng Docker đóng gói phần mềm vào đơn vị tiêu chuẩn hóa gọi là container Docker được đặt tên xuất phát từ cách diễn đạt dock worker - Docker có hai phiên chính: o Docker Community Editon – CE: Là phiên miễn phí o Docker Enterprise – EE: Phiên phiên trả phí, sử dụng phiên có hỗ trợ từ nhà phát hành II Công nghệ Docker: Containerlization: - Trước đây, mơ hình máy chủ thường là: o Máy chủ vật lý (physical server) + hệ điều hành (operating system) + ứng dụng (application) - Vấn đề gặp phải lãng phí tài nguyên o Một máy chủ cài OS o Cho dù có ổ cứng khủng, ram khủng khơng tận dụng hết lợi - Sau đời cơng nghệ ảo hóa virtualization o Có thể nghe tới tên Virtualbox hay VMware rồi khơng, đó o Với công nghệ này, trên một máy chủ vật lý mình cài đặt được nhiều OS, tận dụng tài nguyên tốt - Nhưng lại nảy sinh vấn đề tiếp: o Về tài nguyên:  Khi bật máy ảo, cần cấu hình để cung cấp từ đầu tài nguyên ổ cứng và ram từ máy thật cho máy ảo  Sau bật máy ảo, máy thật tái sử dụng tài nguyên cho o Về thời gian:  Việc khởi động, tắt máy ảo lâu, lên tới hàng phút - Ở bước tiến hố tiếp theo, cơng nghệ containerlization đời: o Với công nghệ này, máy chủ vật lý, ta cài đặt nhiều máy ảo (giống với công nghệ ảo hóa virtualization), tốt chỗ máy (Guess OS) đều dùng chung phần nhân máy mẹ (Host OS) chia sẻ với tài nguyên máy mẹ  Có thể nói cần tài nguyên cấp, cần cấp nhiêu, việc tận dụng tài nguyên tối ưu Lịch sử container 2.1 Định nghĩa: - Các phần mềm, chương trình được Container Engine (là cơng cụ ảo hóa tinh gọn cài đặt host OS) đóng gói thành các container - Vậy Container giải pháp để chuyển giao phần mềm cách đáng tin cậy các mơi trường máy tính khác cách: o Tạo môi trường chứa mọi thứ mà phần mềm cần để chạy o Khơng bị yếu tố liên quan đến môi trường hệ thống làm ảnh hưởng tới o Khơng làm ảnh hưởng tới phần cịn lại của hệ thống - Ví dụ: Chúng ta hiểu ruby, rails, mysql bỏ gọn vào nhiều thùng (container), ứng dụng chạy thùng đó, có sẵn thứ cần thiết để hoạt động, không bị ảnh hưởng từ bên ngồi khơng gây ảnh hưởng ngồi - Các tiến trình (process) một container bị lập với tiến trình container khác hệ thống nhiên tất các container này chia sẻ kernel host OS (dùng chung host OS) - Ưu điểm Container: o Linh động: Triển khai nơi đâu phụ thuộc ứng dụng vào tầng OS sở hạ tầng loại bỏ o Nhanh: Do chia sẻ host OS nên container tạo gần cách tức o Nhẹ: Container sử dụng chung images nên không tốn nhiều disks o Đồng nhất: Khi nhiều người phát triển dự án không bị sai khác mặt mơi trường o Đóng gói: Có thể ẩn mơi trường bao gồm app vào gói gọi container Có thể test container Việc bỏ hay tạo lại container dễ dàng - Nhược điểm Container: o Do dùng chung OS nên xuất lỗ hổng kernel host OS ảnh hưởng tới tồn container có host OS o Với host OS Linux, trường hợp có người ứng dụng có container chiếm quyền superuser, lý thuyết tầng OS bị crack ảnh hưởng trực tiếp tới máy host bị hack container khác máy 2.2 Lịch sử hình thành Container III Các thành phần docker Các thành phần 1.1 Docker Engine: - Docker Engine phần cốt lõi Docker, cơng cụ để đóng gói ứng dụng, xây dựng theo kiểu kiến trúc client-server cài đặt máy Host - Docker Engine có thành phần: o Server: Docker Daemon dùng để tạo quản lý images, containers, networks, volumes o Rest API: controller cho docker daemon, docker daemon làm o Client: Là công cụ giúp người dùng giao tiếp với Docker host Người dùng tương tác với docker thông qua command terminal (CLI) Docker Client sử dụng API gửi lệnh tới Docker Daemon 10 - Có đối tượng Docker Engine: o Dockerfile:  Dockerfile file dạng text khơng có phần mở rộng, chứa đặc tả trường thực thi phần mềm, cấu trúc cho Docker image  Docker image tạo tự động cách đọc dẫn Dockerfile  Từ câu lệnh đó, Docker build Docker image (thường có dung lượng nhỏ từ vài MB đến lớn vài GB) o Image:  Image docker cịn gọi mirror, đơn vị đóng gói chứa thứ cần thiết để ứng dụng chạy  Image tạo thành từ nhiều layer xếp chồng lên nhau, bên image hệ điều hành bị cắt giảm tất phụ thuộc (dependencies) cần thiết để chạy ứng dụng o Container:  Một image sử dụng để tạo nhiều container  Ta create, start, stop, move delete dựa Docker API Docker CLI  Trên hệ điều hành, ta cài đặt container engine docker Sau đó, cơng cụ container lấy tài nguyên hệ điều hành ghép chúng lại thành cấu trúc riêng biệt gọi làcontainer  Mỗi container bao gồm thứ cần thiết để chạy nó: code, runtime, system tools, system libraries, setting Mỗi container hệ điều hành thực sự, bên container chạy ứng dụng 11  Container VM có cách ly phân bổ tài nguyên tương tự có chức khác container ảo hóa hệ điều hành thay phần cứng  Các container có tính portable hiệu  Container nhằm làm cho ứng dụng trở nên dễ dàng xây dựng, di chuyển chạy  Q trình đưa ứng dụng chạy container có để hiểu sau:  Đầu tiên ta bắt đầu với code app phụ thuộc  Tạo Dockerfile mô tả app, phụ thuộc cách run app  Bulid Dockerfile thành image  Push image build vào registry(option)  Chạy container từ image o Network:  Docker network có nhiệm vụ cung cấp private network (VLAN) để container host liên lạc với nhau, container nhiều hosts liên lạc với (multi-host networking) o Volume:  Docker volume chế tạo sử dụng liệu docker, có nhiệm vụ lưu trữ liệu độc lập với vòng đời container  Có trường hợp sử dụng Docker Volume:  Giữ lại liệu Container bị xóa  Để chia sẻ liệu máy chủ vật lý Docker Container  Chia sẻ liệu Docker Container 12 1.3 Docker Registry/Docker Hub - Docker Registry dịch vụ máy chủ cho phép lưu trữ docker image cá nhân, công ty, team, Dịch vụ Docker Registry cung cấp tổ chức thứ dịch vụ nội xây dựng riêng muốn - Một số dịch vụ Docker Registry phổ biến như: o Azure Container Registry o Docker Hub o Quay Enterprise o Google Container Registry o AWS Container Registry Một số lệnh bản: 2.1 Các câu lệnh: - Cấu trúc lệnh “docker ” o Các component là: image, container, docker, volume, network, o Các command là: ls, rm, prune, build, run, … - docker ps: o Là viết tắt docker container ls Dùng để liệt kê container chạy o Khi sử dụng với tham số:  -a/-all: Liệt kê tất container, kể chạy hay kể thúc  -q/-quiet: liệt kê id container - docker pull: o Là viết tắt docker image pull Để tải image cụ thể tập hợp image 13 o Hầu hết image tạo dựa image sở từ Docker Hub Docker Hub chứa nhiều image dựng sẵn, mà ta pull dùng mà khơng cần phải định nghĩa cấu hình lại từ đầu - docker build: o Là viết tắt docker image build Lệnh dùng để build image từ Dockerfile context Context tập file xác đinh đường dẫn url cụ thể Ta sử dụng thêm tham số -t để gắn nhãn cho image - docker run: o Là viết tắt docker container run Lệnh dùng để chạy container dựa image mà ta có sẵn Ta thêm vào sau lệnh vài câu lệnh khác -it bash để chạy bash từ container - docker logs: o Lệnh sử dụng để hiển thị logs container, ta cần phải rõ container để hiển thị logs thông qua tên Ngồi sử dụng thêm số flag follow để giữ việc theo dõi logs - docker volume ls: o Lệnh dùng để liệt kê volumn mà container sử dụng, volume chế dùng để lưu trữ liệu sinh sử dụng Docker - docker rm: o Là viết tắt docker container rm Lệnh dùng để xóa nhiều container - docker rmi: 14 o Lệnh dùng để xóa nhiều images - docker stop: o Là viết tắt docker container stop Lệnh dùng để stop nhiều container Ngồi ta dung docker kill để bắt buộc container dừng lại 2.3 Một số option thường dùng với docker run: - Trong lệnh có lẽ docker run lệnh hữu ích ta thường sử dụng Nó sử dụng để tạo container dựa vào image cụ thể Có nhiều option sử dụng với docker run o detach, -d : Mặc định docker container chạy input, output, lỗi thị trực tiếp hình terminal Tuy nhiên với tùy chọn detach/-d, container chạy ngầm output, lỗi không hiển thị o entrypoint: Thiết lập ghi đè lệnh mặc định chạy images Entrypoint tập lệnh tham số chạy container chạy từ image Bất kỳ câu lệnh tham số truyền vào sau docker run nối vào entrypoint o env, -e: Thiết lập biến môi trường sử dụng cặp (key=value) Nếu ta có biến mơi trường file ta truền vào file tùy chọn env-file o ip: Khai báo địa IP cho container o name: Gắn tên cho container o publish, -p | publish-all, -p: Do container docker gộp chạy network riêng nên độc lập với máy chủ mà docker chạy Để mở cổng network container 15 ánh xạ với cổng máy host ta sử dụng tùy chọn publish, -p Hoặc sử dụng publish-all, -P mở tất cổng container o rm: Tự động xóa container o tty, -t: Cấp terminal ảo cho container Tùy chọn thường sử dụng với interactive, -i giúp cho STDIN mở container chạy dạng ngầm o volume, -v: Gắn volume vào container, cho phép thao tác container liệu lưu trữ máy chủ o workdir, -w: Chỉ định thư mục làm việc bên container Giả sử ta làm việc với thư mục app docker IV Docker C# Docker C# làm gì: - Docker hoạt động tốt với tất ứng dụng C# không sử dụng GUI (Graphic User Interface), tức ứng dụng chạy khơng render hình giao diện - Tức C# NET Docker sử dụng hiệu ứng dụng NET không sử dụng giao diện, web ASP.NET,… Và không sử dụng thực hiệu Windows Form WPF - Deploy ứng dụng C# Docker - Chúng ta khởi chạy dự án C# nhiều môi trường khác (window, macos, linux, ) - Dễ dàng thiết lập môi trường làm việc Chỉ cần config lần cài đặt lại dependencies Nếu thay đổi máy có người tham gia vào project cần lấy config đưa cho họ 16 - Docker tích hợp VCS-git, để tracking dòng lệnh thiết lập, hay đánh dấu version cho ứng dụng - Tiết kiệm thời gian cho dev (Docker start va stop vài giây) Giải thích dockerfile 2.1 Cấu trúc dockerfile: - Cấu trúc Dockerfile thường thấy gồm thành phần: FROM, RUN, CMD - Trong FROM thị bắt buộc phải có file Ngồi cịn có thị khác hay xuất hiện, là: MAINTAINER, COPY, ENV, ENTRYPOINT, WORKDIR, USER, VOLUME, EXPOSE 2.1.1 From: - Là thị bắt buộc của file Chỉ thị phải đặt Dockerfile Ý nghĩa định image sở để từ triển khai, xây dựng image Để xây dựng từ image sở cần đọc document image để biết chứa gì, chạy lệnh Ví dụ, chọn xây dựng từ image centos:lastest lệnh cài đặt, cập nhật gói yum, chọn ubuntu:latest trình quản lý gói lại apt…  - FROM xuất nhiều lần Dockerfile, tạo nhiều image sử dụng giai đoạn build khác Với lệnh FROM, xóa trạng thái FROM tạo trước đó.  - Cấu trúc: o FROM [AS ] o FROM [:] [AS ] o FROM [@] [AS ] 17 - Trong đó: Từ khố “AS” dùng muốn đổi tên image; “tag” và “digest” là tùy chọn image, mặc định khơng có tag lấy version cuối cùng: latest - Ví dụ: o FROM centos AS testImage o FROM centos:7 AS testImage 2.1.2 Run - Là thị không bắt buộc - Chạy trình build image kết đc lưu lại thêm image gốc - Với câu lệnh RUN, có forms cho lựa chọn: - RUN (shell form, command chạy bên shell, mặc định /bin/sh c Linux cmd /S /C Windows Chúng ta thực nhiều lệnh lúc cách thức ‘shell form‘ sử dụng thị RUN với dấu ‘\‘) - Ví dụ: o RUN apt-get update; o apt-get install curl -y o RUN [“executable”, “param1”, “param2”] (exec form) - Ví dụ: RUN apt-get update RUN apt-get install curl -y 2.1.3 CMD: - Là thị không bắt buộc - Định nghĩa câu lệnh chạy sau chạy container - Có thể khai báo nhiều có CMD cuối có tác dụng 18 - Khi sử dụng hình thức shell cho lệnh CMD, thực thi với /bin/sh –c - Ví dụ: o CMD [“/bin/sh”, “/home/run.sh”] o LABEL: cung cấp metadata cho image Có thể sử dụng để add thông tin maintainer o INSPECT: Để xem label images o ENV: thiết lập biến môi trường o COPY: Sao chép file thư mục vào container o WORKDIR: Thiết lập thư mục làm việc cho thị khác như: RUN, CMD, ENTRYPOINT, COPY, ADD,… o ARG: Định nghĩa giá trị biến dùng lúc build image o ENTRYPOINT: cung cấp lệnh đối số cho container thực thi o EXPOSE: khai báo port lắng nghe image o VOLUME: tạo điểm gắn thư mục để truy cập lưu trữ data Giải thích dockercompose 3.1 Khái niệm - Docker compose công cụ dùng để định nghĩa run multi-container cho Docker application Với compose sử dụng file YAML để config services cho application Sau dùng command để create run từ config Sử dụng đơn giản với ba bước: - Khai báo app’s environment Dockerfile 19 - Khai báo services cần thiết để chạy application file dockercompose.yml - Run docker-compose up để start run app 3.2 Đặc điểm - Không giống Dockerfile (build image) Docker compose dùng để build run container Các thao tác docker-compose tương tự lệnh: docker run - Docker compose cho phép tạo nhiều service(container) giống lệnh: $ docker-compose scale = 3.3 Lợi ích - Tạo nhiều môi trường độc lập (isolated environments) host: Compose cô lập môi trường project để đảm bảo chúng không bị xung đột lẫn nhau, dễ dàng tạo môi trường - Chỉ tạo lại container thay đổi: Compose nhận biết service chưa thay đổi sử dụng lại container tương ứng với service - Điều chỉnh biến sử dụng cho môi trường: Compose sử dụng biến Compose file cho mơi trường Vì với mơi trường hay người dùng khác nhau, điều chỉnh biến sử dụng Compose để thiết lập service V Kết luận Độ hữu dụng docker - Sử dụng docker giúp cho tất developer phát triển môi trường giống hệt 20 - Do môi trường test phát triển giống nên phòng trừ trường hợp test local lại fail với CI - Có thể cố định version cách chia sẻ image fetch library liên quan Hoạt động library lấy go get không bị thay đổi - Vì kiểm tra hoạt động mà cài đặt OK deploy docker image đó, việc login vào server để thay đổi cài đặt trở nên khơng cần thiết Hơn nữa, hồn tồn test blackbox xem việc cài đặt chuẩn hay chưa - Đây vài ví dụ, nhiên cho thấy Docker có ích giúp giải vấn đề bên lề nhiều thời gian bên cạnh việc phát triển Ưu nhược điểm 2.1 Ưu điểm - Tính đồng nhất: Khi nhiều người phát triển dự án không bị sai khác mặt mơi trường - Đóng gói: o Có thể ẩn môi trường bao gồm app vào gói gọi container o Có thể test container o Việc bỏ hay tạo lại container dễ dàng - Linh động (tính quán): o Có thể test container dùng để phát triển CI o Có thể deploy container test CI lên server o Có thể scale container deploy 2.2 Nhược điểm - Tốn thời gian học tập o Đoạn đầu (chạy container) thoải mái cảm thấy làm chủ giới, nhiên nhanh chóng gặp nhiều vấn đề thực tế áp dụng vào mơi trường phát triển, câu hỏi "đoạn làm nhỉ?", hay "không biết cài đặt cách tốt nhỉ?" xuất địi hỏi kiến thức chuyên sâu 21 o Trong đội phát triển khơng cần tất phải có kiến thức chuyên sâu Docker, nhiên cần người nắm vững kiến thức để giải vấn đề gặp phải - Công cần thiết để biết viết code môi trường gần không so với phát triển local 22 VI Bảng phân công công việc STT Tên công việc Thành viên Công Phi Như Phước Thiện Phước Chuẩn bị, lên kế hoạch x x x Chuẩn bị nội dung x x x x x x x Soạn nội dung thuyết trình docker Quay video thuyết trình nội dung docker Quay video demo x Soạn nội dung báo cáo x x x Tỷ lệ công việc phân công 33% 33% 33% Mức độ hoàn thành 100% 100% 100% 23 Tài liệu tham khảo [1] Document docker: https://docs.docker.com/ [2] [Full] Docker gì? | Hướng dẫn đầy đủ Docker Compose: https://www.youtube.com/watch?v=yWCse8S2qsM [3] Deploy ứng dụng ASP.NET Core Docker - Comdy.vn https://comdy.vn/docker/deploy-ung-dung-asp-net-core-bang-docker/ [4] Tại nên đưa Docker làm chuẩn phát triển https://viblo.asia/p/tai-saonen-dua-docker-lam-chuan-khi-phat-trien-MdZkAYBakox 24

Ngày đăng: 18/04/2022, 02:50

Hình ảnh liên quan

- Trước đây, mô hình máy chủ thường là: - ĐỀ TÀI DOCKER TRONG C# MÔN CÔNG NGHỆ .NET

r.

ước đây, mô hình máy chủ thường là: Xem tại trang 6 của tài liệu.
 Khi bật máy ảo, chúng ta cần cấu hình để cung cấp ngay từ đầu tài nguyên ổ cứng và ram từ máy thật cho máy ảo. - ĐỀ TÀI DOCKER TRONG C# MÔN CÔNG NGHỆ .NET

hi.

bật máy ảo, chúng ta cần cấu hình để cung cấp ngay từ đầu tài nguyên ổ cứng và ram từ máy thật cho máy ảo Xem tại trang 7 của tài liệu.
VI. Bảng phân công công việc - ĐỀ TÀI DOCKER TRONG C# MÔN CÔNG NGHỆ .NET

Bảng ph.

ân công công việc Xem tại trang 25 của tài liệu.
VI. Bảng phân công công việc - ĐỀ TÀI DOCKER TRONG C# MÔN CÔNG NGHỆ .NET

Bảng ph.

ân công công việc Xem tại trang 25 của tài liệu.

Từ khóa liên quan

Mục lục

  • I. Giới thiệu chung:

    • 1. Đặt vấn đề:

    • 2. Định nghĩa:

    • II. Công nghệ của Docker:

      • 1. Containerlization:

      • 2. Lịch sử container

        • 2.1 Định nghĩa:

        • 2.2 Lịch sử hình thành của Container

        • III. Các thành phần cơ bản của docker

          • 1. Các thành phần

            • 1.1 Docker Engine:

            • 1.3 Docker Registry/Docker Hub

            • 2. Một số lệnh cơ bản:

              • 2.1 Các câu lệnh:

              • 2.3 Một số option thường dùng với docker run:

              • IV. Docker trong C#

                • 1. Docker trong C# làm được gì:

                • 2. Giải thích dockerfile

                  • 2.1 Cấu trúc của dockerfile:

                    • 2.1.1 From:

                    • 2.1.2 Run

                    • 2.1.3 CMD:

                    • 3. Giải thích dockercompose

                      • 3.1 Khái niệm

                      • 3.2 Đặc điểm

                      • 3.3 Lợi ích

                      • V. Kết luận

                        • 1. Độ hữu dụng của docker

                        • 2. Ưu nhược điểm

                          • 2.1 Ưu điểm

                          • 2.2 Nhược điểm

                          • VI. Bảng phân công công việc

Tài liệu cùng người dùng

Tài liệu liên quan