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

Báo cáo Đồ Án thiết kế 1 Đề tài tìm hiểu kubernetes và docker container trong Điện toán Đám mây

30 0 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 Kubernetes và Docker container trong điện toán đám mây
Tác giả Ngô Văn Tiệp
Người hướng dẫn PGS.TS. Nguyễn Hữu Thanh
Trường học Đại Học Bách Khoa Hà Nội, Trường Điện-Điện Tử
Chuyên ngành Điện tử
Thể loại Báo cáo đồ án thiết kế 1
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 30
Dung lượng 1,55 MB

Cấu trúc

  • Chương 1. 34; Container " và công cụ Docker và Kubernetes (6)
    • 1.1 Container (6)
    • 1.2 Docker (8)
    • 1.3 Kubernetes (9)
  • Chương 2. Các bài thực hành với Docker (12)
    • 2.1 Chạy chương trình đơn giản "Hello word" (12)
    • 2.2 Truy cập vào container và kiểm tra hệ điều hành (13)
    • 2.3 Triển khai một ứng dụng Web trên Docker (15)
    • 2.4 Biến Container thành Image (17)
    • 2.5 Quảng bá image lên internet (19)
    • 2.6 Viết Dockerfile định nghĩa một Image (21)
    • 2.7 Triển khai ứng dụng dưới mô hình microservice bằng Docker (25)
  • Chương 3. KẾT LUẬN (29)
  • TÀI LIỆU THAM KHẢO (30)

Nội dung

" Container " và công cụ Docker và Container giải quyết vấn đề trên bằng cách tạo ra một môi trường bị cô lập chứa mọi thứ mà phần mềm cần để có thể chạy được bao gồm mã nguồn, các thư

34; Container " và công cụ Docker và Kubernetes

Container

Container là giải pháp để giải quyết vấn đề làm sao để chuyển giao phần mềm một cách đáng tin cậy giữa các môi trường máy tính khác nhau Chẳng hạn như giữa máy tính của lập trình viên với máy của tester, giữa môi trường staging (hay còn gọi là môi trường tiền thực tế) với môi trường thực tế hay thậm chí giữa máy chủ riêng đặt tại trung tâm dữ liệu với máy ảo trên Cloud

Container giải quyết vấn đề trên bằng cách tạo ra một môi trường bị cô lập chứa mọi thứ mà phần mềm cần để có thể chạy được bao gồm mã nguồn, các thư viện runtime, các thư viện hệ thống, các công cụ hệ thống mà không bị các yếu tố liên quan đến môi trường hệ thống làm ảnh hưởng tới cũng như không làm ảnh hưởng tới các phần còn lại của hệ thống b Đặc điểm kĩ thuật

Mô hình kiến trúc của container bao gồm các thành phần chính là Server (máy chủ vật lí hoặc máy ảo) , host OS ( hệ điều hành cài đặt trên server) và các container Mỗi một ứng dụng (App A và App B) sẽ có những sự phụ thuộc riêng của nó bao gồm cả về phần mềm lẫn cả phần cứng Các ứng dụng này sẽ được Container Engine, một công cụ ảo hóa tinh gọn, được cài đặt trên host OS, nó sẽ cô lập sự phụ thuộc của các ứng dụng khác nhau bằng cách đóng gói chúng thành các container Các tiến trình trong 1 container bị cô lập với các tiến trình của các container khác trong cùng hệ thống, tuy nhiên tất cả các container này đều chia sẻ kernel của host OS

Với mô hình trên, sự phụ thuộc của ứng dụng vào tầng OS cũng như cơ sở hạ tầng được loại bỏ giúp việc triển khai phương pháp “ deploy anywhere “ của container được hiệu quả hơn Thêm vào đó, do chia sẻ host OS nên container có thể được tạo gần như một cách tức thì, giúp việc scale-up và scale-down theo nhu cầu được thực hiện một cách nhanh chóng

Hình 1-1 Mô hình kiến trúc container c Ưu và nhược điểm

Có kích thước nhỏ và nhẹ: Các container chia sẻ kernel của máy chủ lưu trữ, chúng chỉ chứa các thành phần thực sự cần thiết với hệ điều hành và thư viện Đồng thời các container thường cũng chỉ giới hạn ở một chức năng duy nhất, nên có kích thước rất nhỏ Nhờ vậy, việc xây dựng, triển khai cực kỳ nhanh chóng

Triển khai nhanh: Do kích thước nhỏ, các container có thể chỉ cần vài giây để khởi động, thậm chí là ít hơn, nên rất thích hợp cho các ứng dụng cần được đẩy lên và xuống liên tục, chẳng hạn như các ứng dụng “serverless”

CI/CD: Các container được thiết kế để có thể start và restart thường xuyên, nhờ vậy mà dễ dàng tiếp nhận các thay đổi

Có tính di động: Với thiết kế độc lập, việc di chuyển container giữa các máy có thể thực hiện tương đối dễ dàng, miễn là đúng vị trí kernel Đảm bảo tính nhất quán: Giải pháp đóng gói ứng dụng bao gồm source code và các library, framework, một lần duy nhất và đem chạy ở bất kỳ đâu

Có thể yêu cầu kết nối mạng phức tạp: Thường thường các chức năng sẽ được chia thành nhiều container và cần phải giao tiếp với nhau Việc số lượng rất nhiều các container phải giao tiếp với nhau có thể phức tạp Một số hệ thống điều phối như Kubernetes có các multi-container pods giúp việc trao đổi dễ dàng hơn một chút, nhưng được cho là vẫn phức tạp hơn so với sử dụng máy ảo Thực tế thì mô hình mạng L3 trong Kubernetes đơn giản hơn nhiều so với mô hình L2 trong hạ tầng máy ảo OpenStack Vì vậy, vấn đề nằm ở chỗ cần xác định được việc giao tiếp xảy ra giữa các chức năng hay giữa các máy ảo

Có thể bảo mật kém: Container vẫn là một công nghệ tương đối non trẻ và chưa đạt được mức độ bảo mật như VM, vậy nên nếu yêu cầu bảo mật cao là tối quan trọng thì đây là 1 trong những yếu tố cần cân nhắc có nên hay không sử dụng container

Có thể cần thao tác nhiều hơn so với máy ảo: Nếu sử dụng container, bạn sẽ phân tách ứng dụng thành các dịch vụ thành phần khác nhau, mặc dù việc này có ích lợi nhưng lại không cần thiết khi sử dụng VM.

Docker

Docker là một phần mềm tự động hóa công việc triển khai ứng dụng đóng gói trong các container Chúng ta cần phải hiểu rằng Docker không “ tạo “ ra container, mà nó là một nền tảng mà thông qua nó việc tương tác với máy ảo container ( khởi tạo, xóa bỏ, quản lí, …) trở nên dễ dàng và thân thiện hơn rất nhiều

Các containers cho phép lập trình viên đóng gói một ứng dụng với tất cả các phần cần thiết, chẳng hạn như thư viện và các phụ thuộc khác, và gói tất cả ra dưới dạng một package

Hình 1-2 Mô hình tổng quan về Docker

Các khái niệm thường được sử dụng trong ảo hóa “container”:

Images: là một bản mẫu (blueprint) của máy ảo container, Images tương tự như file ISO mà chúng ta hay bắt gặp khi cài hệ điều hành, nó chứa toàn bộ thông tin cũng như ứng dụng mà chúng ta triển khai trong đấy

Container: là phiên bản thực thi sinh ra từ file image, việc tạo ra container từ file image cũng tương tự như việc chúng ta sử dụng file ISO để cài ra hệ điều hành để sử dụng

Docker Hub: là kho chứa các Images đã được xây dựng sẵn tại địa chủ dockerhub.io, DockerHub tương tự như AppStore trong IOS hay PlayStore trong IOS hay PlayStore trong Android vậy, chúng ta có thể vào đấy, tìm kiếm Image chứa ứng dụng thích hợp, tải xuống rồi dung nó để tạo ra container

Docker Engine: là thành phần chính của Docker, như một công cụ để đóng gói ứng dụng

Docker Client: là một công cụ giúp người dùng giao tiếp với Docker host Docker Daemon: lắng nghe các yêu cầu từ Docker Client để quản lí các đối tượng như Container, Image, Network và Volumes thông qua REST API Các Docker Daemon cũng giao tiếp với nhau để quản lí các Docker Service

Dockerfile: là một tập tin bao gồm các chỉ dẫn để build một image Volumes: là phần dữ liệu được tạo ra khi container được khởi tạo b Lợi ích của việc sử dụng Docker

Tính dễ ứng dụng: Docker rất dễ cho mọi người sử dụng từ lập trình viên, sys admin… nó tận dụng lợi thế của container để build, test nhanh chóng Có thể đóng gói ứng dụng trên laptop của họ và chạy trên public cloud, private cloud… Câu thần chú là “Build once, run anywhere”

Tốc độ: Docker container rất nhẹ và nhanh, bạn có thể tạo và chạy docker container trong vài giây

Môi trường chạy và khả năng mở rộng: Bạn có thể chia nhỏ những chức năng của ứng dụng thành các container riêng lẻ Ví dụng Database chạy trên một container và Redis cache có thể chạy trên một container khác trong khi ứng dụng Node.js lại chạy trên một cái khác nữa Với Docker, rất dễ để liên kết các container với nhau để tạo thành một ứng dụng, làm cho nó dễ dàng scale, update các thành phần độc lập với nhau c Khi nào sử dụng Docker

• Triển khai kiến trúc Microservices

• Khi xây dựng ứng dụng và cần scale một cách linh hoạt

• Khi muốn không tốn khá nhiều thời gian để config máy local và server cùng một môi trường để chạy được ứng dụng Bạn chỉ cần build 1 lần chạy ở nhiều nơi mà thôi

• Sản phẩm của công ty bạn cần một cách tiếp cận mới về xây dựng, đẩy lên server, thực thi ứng dụng một cách nhanh chóng dễ dàng.

Kubernetes

Còn gọi là k8s, là một nền tảng mã nguồn mở tự động hóa việc quản lý, scaling và triển khai ứng dụng dưới dạng container Nó loại bỏ rất nhiều quy trình thủ công liên quan đến việc triển khai và mở rộng các containerized applications

Kubernetes orchestration cho phép bạn xây dựng các dịch vụ ứng dụng mở rộng nhiều containers Nó lên lịch các containers đó trên một cụm, mở rộng các containers và quản lí tình trạng của các containers theo thời gian Các ứng dụng production thực tế mở rộng nhiều containers Các containers đó phải được triển khai trên nhiều server hosts Kubernetes cung cấp khả năng phối hợp và quản lí cần thiết để triển khai các containers theo quy mô cho các workloads đó

Kubernetes ban đầu được phát triển và thiết kế bởi các kĩ sư tại Google, đây cũng là công nghệ đằng sau các dịch vụ đám mây của Google Google đã và đang tạo ra hơn 2 tỉ container deployments mỗi tuần và tất cả đều được hỗ trợ bởi nền tảng nội bộ b Lợi ích của việc sử dụng Kubernetes

➢ Service discovery và cân bằng tải

Kurbernetes có thể expose một container sử dụng DNS hoặc địa chỉ IP của riêng nó Nếu lượng traffic truy cập đến một container cao, Kubernetes có thể cân bằng tải và phân phối lưu lượng mang (network traffic ) để việc triển khai được ổn định

Kubernets cho phép bạn tự động mount một hệ thống lưu trữ mà bạn chọn, như local storage, public cloud provide, v.v

➢ Tự động rollout và rollbacks

Bạn có thể mô tả trạng thái mong muốn cho các containere được triển khai dùng Kubernetes và nó có thể thay đổi trạng thái thực tế sang trạng thái mong muốn với tần suất được kiểm soát Ví dụ, bạn có thể tự động hóa Kubernetes để tạo mới các container echo việc triển khai của bạn, xóa các containere hiện có và áp dụng tất cả các resoủce của chúng vào containere mới

Bạn cung cấp cho Kubernetes một cluster gồm các node mà nó có thể sử dụng để chạy các tác vụ được đóng gói (containerized task) Bạn cho Kubernetes biết mỗi containere cần bao nhiêu CPU và bộ nhớ RAM Kubernetes có thể điều phối các containere đến các node để tận dụng tốt nhất các resource của bạn

Kubernetes khởi động lại các containeré bị lỗi, thay thế các containere, xóa các container không phản hồi lại cấu hình health check do người dùng xác định và không cho các client biết đến chúng cho đến khi chúng sẵn sàng hoạt động

➢ Quản lí cấu hình và bảo mật

Kubernetes cho phép bạn lưu trữ và quản lí các thông tin nhạy cảm như: password , OAuth token và SSH key Bạn có thể triển khai và cập nhật lại secret và cấu hình ứng dụng mà không cần build lại các container image và không để lộ secret trong cấu hình stack của bạn c Ưu điểm nổi bật của Kubernetes

Cung cấp nền tảng để lên lịch và chạy các Containers

Một trong những ưu điểm chính của việc sử dụng K8S chính là mang đến 1 nền tảng vững chắc để lên lịch và chạy các Containers Đặc biệt Kubernetes cực kỳ cần thiết nếu bạn đang tối ưu App Dev cho Clous Bởi vì nên tảng này sẽ cho phép người dùng lên lịch và chạy các Containers trên các Clusters của máy vật lý hoặc máy ảo

Công nghệ Kubernetes sẽ giúp người dùng dễ dàng triển khai và hoạt động trên cơ sở hạ tầng Container – Based trong môi trường Sản xuất Việc Kubernetes có khả năng tự động hóa các hoạt động vận hành sẽ giúp người dùng có thể thực hiện nhiều tác vụ đối với Container Ưu điểm này không chỉ hỗ trợ người dùng hoạt động hữu ích đối với Container mà còn có thể làm việc trên nhiều nền tảng ứng dụng khác hoắc các hệ quản lý khác Vì vậy với Kubernetes bạn hoàn toàn có thể thực hiện các nhiệm vụ sau:

• Điều hành, phân bố Container trên nhiều máy chủ

• Tận dụng phần cứ nhiều hơn để tối đa hóa tài nguyên cần thiết cho việc chạy các ứng dụng doanh nghiệp

• Kiểm soát, tự động triển khai ứng dụng

• Gắn, bổ sung thêm bộ nhớ để chạy mướt các ứng dụng Stateful

• Mở rộng các ứng dụng chứa trong các Container

• Mở rộng tài nguyên của Container một cách nhanh chóng

• Health – Check và Self – Heal các ứng dụng bằng tính năng tự động phát hiện, sửa lỗi, dò tìm và mở rộng

Cung cấp không gian lưu trữ quy mô lớn

Sở dĩ Kubernetes được đánh giá cao ưu thế này là vì Kubernetes được thiết kế xây dựng mang đến nhiều không gian lưu trữ khác nhau Người dùng khi sử dụng sẽ có nhiều tùy chọn lưu trữ để lựa chọn Chẳng hạn như các tùy chọn lưu trữ SAN cục bộ hay lưu trữ vào không gian đám mây công cộng,…

Kubernetes – Hệ thống mã nguồn mở sở hữu ưu điểm là cho phép người dùng tự do tận dụng cơ sở hạ tầng tại chỗ, lai Ngoài ra, người dùng cũng có thể lựa chọn cơ sở hạ tầng điện toán đám mây để di chuyển khối lượng lớn công việc của mình đến những nơi quan trọng mà bạn mong muốn

Các bài thực hành với Docker

Chạy chương trình đơn giản "Hello word"

Đầu tiên, ta sẽ chạy 1 container tên là hello-word Do máy chưa có file image của container này nên ta sẽ tải nó xuống từ DockerHub với câu lệnh sau:

Nếu trên kho Docker-hub tồn tại 1 image tên là hello-world thì hệ thống sẽ trả về thông tin như hình 2.1

Hình 2-1 Tải image hello-world về máy

Tiếp theo ta sẽ chạy container hello-world từ image đã tải với câu lệnh docker run ở dưới, đây là 1 container đơn giản, khi khởi chạy sẽ in ra dòng chữ Hello from Docker! như hình 2.2

Hình 2-2 Thông tin xuất ra khi chạy container hello-world

Ta đã tải xuống và sử dụng container hello-world thành công

Tiếp, ta kiểm tra các images đang có trong máy bằng câu lệnh:"docker image list" Câu lệnh này sẽ hiển thị trong máy đang chứa những image nào, những image này được tạo ra từ khi nào và dung lượng là bao nhiêu như thể hiện ở hình

Hình 2-3 Hiển thị các iamge đang có trong máy

Ta kiểm tra các container đang chạy, sử dụng câu lệnh: "docker ps"

Hình 2-4 Hiển thị các container đang chạy

Ta kiểm tra các container đã được tạo ra và đang tồn tại trong máy với câu lệnh: "docker ps -all " Kết quả trả về Container ID là 1 dãy kí tự được tự động tạo ra khi chạy container, cũng như Image của nó

Hình 2-5 Hiển thị các container đang tồn tại trong hệ thống

Muốn xóa 1 container, ta copy ID hoặc tên (NAME) của nó rồi paste ID vào câu lệnh : " docker rm { ID container } "

Nếu container có thể xóa được thì kết quả sẽ trả về ID của nó

Việc xóa bỏ container chỉ là xóa bỏ bản thực thi của image, bản than image vẫn tồn tại trong máy, chúng ta có thể kiểm tra lại bằng câu lệnh list image ở trên Để xóa bỏ image hoàn toàn ta thực hiện tương tự như xóa container, đó là copy tên của image rồi chạy câu lệnh: " docker image rm { tên image }"

Truy cập vào container và kiểm tra hệ điều hành

Đầu tiên ta tải image về máy để kiểm tra xem container có phải là máy ảo không, ta tải image hệ điều hành centos theo câu lệnh : " docker pull centos "

Hình 2-6 Tải image centos về máy

Ta dùng câu lệnh docker run để tạo 1 container từ image centos đã tải Ta gắn them cờ -it để truy cập được vào container Ubuntu, và cho phép container centos sử dụng thiết bị ngoại vi của máy tính là bàn phím Cờ name để đặt tên cho container để việc quản lí chúng trở nên dễ dàng hơn

" docker run -it –name=test centos "

Sau khi chạy xong câu lệnh, dòng lệnh từ màu xanh trở thành màu trắng với tên user và tên thiết bị cũng thay đổi Điều đó cho thấy truy cập thành công vào máy ảo centos

Hình 2-7 Khởi chạy container centos

Tiếp theo t gõ câu lệnh sau để kiểm tra câu lệnh truy cập được là của hệ điều hành centos hay vẫn thuộc hệ điều hành Ubuntu trên máy vật lí

Hình 2-8 Kiểm tra hệ điều hành

Kết quả trả về từ câu lệnh được mô tả cho thấy container chạy trên hệ điều hành Centos Linux 8 , khác với hệ điều hành Ubuntu 20.04 đang chạy ở máy vật lí Như vậy, kết luận rằng container là 1 máy ảo chứ không phải là 1 ứng dụng đơn thuần

Ta gõ câu lệnh exit để trở về máy thật

Tiếp theo, ta tiến hành khởi tạo container chạy hệ điều hành Windows :

" docker pull mcr.micrsoft.com/windows:2004 "

Kết quả trả về với lỗi thông tin như hình:

Hình 2-9 Tải xuống image hệ điều hành Windows

Thông tin trả về báo rằng hệ thống phát hiện hệ điều hành đang sử dụng là linux chạy trên CPU kiến trúc AMD64 và không có phiên bản Windows nào phù hợp với hai thông tin này cả Điều này cho thấy bản chất container là ảo hóa hệ điều hành chứ không phải ảo hóa phần cứng như máy ảo VM Với ảo hóa OS , ta chỉ có thể chạy container có cùng hệ điều hành với máy vật lí Các hệ điều hành như Ubuntu hay Centos, Fedora đều được xây dựng trên nhân Linux nên hoàn toàn có thể sử dụng chúng trên Ubuntu, còn với container Windows thì chỉ có thể chạy được trên hệ điều hành Windows

Triển khai một ứng dụng Web trên Docker

Đầu tiên ta tải về image có chứa website đã được dựng sẵn bằng câu lệnh :

" docker pull kienkauko/lab:static-web "

Dùng câu lệnh run để khởi chạy container đã tải về, cờ name giúp đặt tên tùy ý Cờ -P nghĩa là Port do container muốn chạy là 1 website và ta muốn truy cập vào website này bằng trình duyệt web trên máy vật lí

" docker run -P name static-web kienkauko/lab:static-web "

Hình 2-10 Container chạy thành công

Hình trên cho thấy container đã chạy thành công và xuất thông tin ra cửa sổ Terminal, tiếp tục sử dụng terminal cho các câu lệnh khác, ta nhấn tổ hợp phím CTRL – trái + SHIFT – trái + T

Tra cứu cổng được forward dữ liệu dùng câu lệnh

Hình 2-11 Kiểm tra cổng kết nối giữa máy vật lí và container

Kết quả ở Hình cho thấy container đã forward cổng 80 và 443 của nó ra cổng 49153 của máy vật lý

Ta mở trình duyệt Firefox trên máy vật lý, truy cập vào địa chỉ localhost:49153 để kiểm tra trang web từ container và kết quả ở Hình cho thấy web đã chạy, bài lab được thực hiện thành công

Hình 2-12 Trang Web chạy thành công

Biến Container thành Image

Có hai cách để tạo một Docker image, một là viết file định nghĩa Dockerfile, hai là nén container lại thành Docker image Ta sẽ tinh chỉnh 1 container theo ý muốn (container static-web tạo ra ở bài trước), rồi ta nén container này lại thành 1 image mới Image mới này có thể được đẩy lên Docker Registry (DockerHub) và cho phép tất cả mọi người tải xuống và sử dụng

Ta chỉnh sửa ứng dụng web trong container theo ý muốn Do container static-web ở bài trước vẫn đang chạy và chiếm hữu cửa sổ terminal Để truy cập vào bên trong nó, ta tạo ra một terminal mới bằng cách nhấn tổ hợp CTRL – trái + SHIFT – trái + T

Gõ câu lệnh để truy cập vào container " static-web ":

" docker exec –it static-web /bin/bash "

Ta chuyển đến thư mục chứa file html bằng lệnh cd đến thư mục:

" cd /usr/share/nginx/html "

Ta mở file index.html bằng công cụ nano:

Ta di chuyển đến vị trí gần cuối file html sẽ có dòng chữ " Welcome to Future Internet Lab!" và thay đổi nó thành " Welcome to Cloud Fundamental Course "

Sau khi thay đổi xong, để lưu lại các thay đổi, ta nhấn tổ hợp:

ENTER => để save thay đổi

CTRL + X => để thoát trình duyệt nano

Sau khi thoát ra khỏi trình chỉnh sửa file nano, ta nhập exit để thoát khỏi container và trở về với cửa sổ câu lệnh của máy vật lý

Tiếp theo ta : Tạo image mới từ container đã được chỉnh sửa nội dung và chạy container

Ta tiến hành nén container static-web đã thay đổi ở trên thành một image mới tên là fil2021/lab:new_web_image bằng câu lệnh docker commit dưới đây:

" docker commit static-web fil2021/lab:new_web_image "

Kiểm tra image mới tạo bằng cách: Khởi tạo container mới với tên với image mới là fil2021/lab:new_web_image

" docker run -P name new-static-web fil2021/lab:new_web_image "

Kiểm tra cổng forward dữ liệu ở một terminal mới:

Mở browser truy cập vào địa chỉ localhost:32768 để kiểm tra trang web

Hình 2-13 Trang web chỉnh sửa thành công

Quảng bá image lên internet

▪ Bước 1: Login vào docker bằng terminal mới bằng tài khoản đã được lập trước docker login

▪ Bước 2: Quảng bá file image " fil2021/lab:new_web_image " lên docker hub

" docker push fil2021/lab:new_web_image "

Khi đã push thành công, ta có thể lên trang web hub.docker.com và login vào bằng thông tin ở trên để kiểm tra image đã xuất hiện trong repository:

Hình 2-15 Quảng bá image lên docker hub thành công

Viết Dockerfile định nghĩa một Image

Dockerfile bản chất là một file text thông thường, trong đó chứa các dòng lệnh yêu cầu về một Image Công cụ Docker sẽ đọc các yêu cầu để tạo ra một Image mới

Hình 2-16 1 ví dụ về dockerfile

Dockerfile là file text, dùng bất kỳ trình soạn thảo text nào tạo ra file này, và đưa vào nội dung là các chỉ thị Chỉ thị là các lệnh Docker căn cứ vào đó thực hiện từng bước một để tạo image Các chỉ thị Dockerfile cơ bản trong docker như:

• FROM: mọi Dockerfile đều có chỉ thị này, chị thị này chỉ định ra image cơ sở

Chỉ thị này chỉ ra image cơ sở để xây dựng nên image mới Để xây dựng từ image nào đó thì bạn cần đọc document của Image đó để biết trong đó đang chứa gì, có thể chạy các lệnh gì trong đó

• COPY và ADD: Sao chép dữ liệu Được dùng để thêm thư mục, file vào Image Cú pháp viết đó là:

ADD thư_mục_nguồn thư_mục_đích

Trong đó thư_mục_nguồn là thư mục ở máy chạy Dockerfile, chứa dữ liệu cần thêm vào thư_mục_đích là nơi dữ liệu được thêm vào ở container

• ENV: thiết lập môi trường Chỉ thị này dùng để thiết lập biến môi trường, như biến môi trường PATH , tùy hệ thống hay ứng dụng yêu cầu biến môi trường nào thì căn cứ vào đó để thiết lập

Thi hành các lệnh, tương tự bạn chạy lệnh shell trên OS từ terminal

RUN lệnh-và-tham-số-cần-chạy

RUN ["lệnh", "tham số1", "tham số 2" ]

• VOLUME: gắn ổ đĩa, thư mục

Chỉ thi tạo một ổ đĩa chia sẻ được giữa các container

Bạn thêm user được dùng khi chạy các lệnh ở chỉ thị RUN CMD WORKDIR

• WORKDIR: thư mục làm việc

Thiết lập thư mục làm việc hiện tại chi các chỉ thị CMD, ENTRYPOINT, ADD thi hành WORKDIR path_current_dir

• EXPOSE: thiết lập cổng Để thiết lập cổng mà container lắng nghe, cho phép các container khác trên cùng mạng liên lạc qua cổng này hoặc đỉ ánh xạ cổng host vào cổng này

Chạy lệnh trong chỉ thị này khi container được chạy

• CMD ý nghĩa tương tự như ENTRYPOINT, khác là lệnh chạy bằng shell của container CMD command param1 param2

❖ Ở dạng sau của CMD thì nó lại là thiết lập tham số cho ENTRYPOINT

CMD ["tham-số1", "tham-số2"]

Khi đang có một Dockerfile để ra lệnh cho Docker chạy nó có thể gõ: docker build -t nameimage:version

• Dấu ở cuối lệnh docker build có nghĩa tìm file có tên Dockerfile và các file liên quan ở thư mục hiện tại

• -t fil2021/nameimage:version là tag (tên) được gán cho image mới tạo ra

+ Viết chương trình chạy trong container, lưu lại dưới tên simple-code.c

Hình 2-17 Chương trình chạy trong container

+ Viết Dockerfile cho chương trình đã tạo

Lưu file lại dưới tên là Dockerfile

• Tiến hành xây dựng Image

Quá trình xây dựng Image nếu thành công sẽ trả về trạng thái Successfully:

Sau khi xây dựng thành công, chạy một container từ Image đã tạo để kiểm tra xem Image có hoạt động đúng như ý đồ ban đầu hay không bằng cách dùng lệnh :

" docker run -it name=timer fil2021/timer:1.0 "

Kết quả hiển thị như hình dưới là Image đã được xây dựng đúng với mục tiêu ban đầu

• Quảng bá container lên Internet

Khi Image đã xây dựng thành công, để lưu trữ Image, ta đẩy nó lên DockerHub phục vụ cho việc tải xuống sau này

Triển khai ứng dụng dưới mô hình microservice bằng Docker

Microservice là một kiểu kiến trúc phần mềm Các module trong phần mềm này được chia thành các service rất nhỏ (microservice) Mỗi service sẽ được đặt trên một container riêng nên rất dễ dàng để nâng cấp và scale ứng dụng So sánh với ứng dụng monolith (một khối) truyền thống Toàn bộ các module (view, business, database, report) đều được gom chung vào một project lớn Sau đó chúng ta sẽ triển khai khối code này lên server và cấu hình để nó chạy Kiến trúc này có ưu điểm là đơn giản, coding đơn giản Tuy nhiên, khi phần mềm trở nên lớn và phức tạp thì nó lại dần bộc lộ nhược điểm Do các module đóng với nhau thành một khối, khi muốn nâng cấp một module, ta phải triển khai lại toàn bộ code (người dùng cuối sẽ không sử dụng được toàn bộ các chức năng của hệ thống khi deploy)

Hình 2-18 Mô hình về Microservice Ở trong phần này ta sẽ sử dụng một công cụ sẵn có trong Docker là Docker-compose để triển khai ứng dụng theo kiến trúc microservices Sau khi triển khai thành công, ta sẽ mô phỏng quá trình cập nhật một service (một phần của ứng dụng) để chứng minh rằng kiến trúc microservices đem lại sự nhanh gọn và hiệu quả hơn mô hình ứng dụng thông thường Ứng dụng thực hành trong bài này là một ứng dụng tiếp nhận feedback từ người dùng đơn giản gồm có 4 thành phần:

Hình 2-19 Sơ đồ ứng dụng tiếp nhận feedback từ người dùng

Tải xuống và sử dụng các file code và file cấu hình có sẵn bằng câu lệnh sau:

" git clone https://github.com/kienkauko/DevPlanet.git "

Tải xuống công cụ Docker-compose

Docker compose là một công cụ automation dùng để định nghĩa và khởi chạy đồng thời nhiều container phục vụ cho ứng dụng của mình Sử dụng file cấu hình YAML để định nghĩa các services của ứng dụng

Cách thức sử dụng Docker-compose kết hợp để xây dựng một ứng dụng dưới mô hình microservices đơn giản nhất sẽ gồm 3 bước:

• Khai báo app’s environment trong Dockerfile

• Khai báo các services cần thiết để chạy application trong file docker-compose.yml

• Run docker-compose up để start và run app

" sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker- compose- $(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose "

Cấp quyền thực thi cho công cụ Docker-compose

" sudo chmod +x /usr/local/bin/docker-compose "

Xây dựng images cho các services của ứng dụng:

• Xây dựng image front-end ở thư mục DevPlanet/samples/microservice/frontend

" cd DevPlanet/samples/microservice/frontend #truy cập vào thư mục sudo docker build -t frontend:v1 "

• xây dựng image back-end ở thư mục DevPlanet/samples/microservice/backend

" cd DevPlanet/samples/microservice/backend #truy cập vào thư mục

Kiểm tra file triển khai (deployment file), sau đó triển khai ứng dụng

Hình 2-20 Triển khai ứng dụng bằng file

Tiến hành khởi chạy file triển khai Vị trí của file triển khai nằm ở thư mục DevPlanet/samples/microservice/

" sudo docker-compose -f deploy.yaml up "

Thực thi câu lệnh trên, 4 container tương ứng với 4 services được đề cập trong file yaml sẽ khởi chạy

Kiểm tra 4 container chứa 4 dịch vụ của chúng ta đã chạy hay chưa, ta dùng câu lệnh: “ docker ps “

Kết quả cho thấy 4 service đã khởi chạy thành công, ta sẽ truy cập vào các service này thông qua giao diện trình duyệt web Mở ứng dụng firefox và truy cập vào địa chỉ nơi dịch vụ frontend đang khởi chạy:

Hình 2-21 Giao diện web hiển thị

Ngày đăng: 01/11/2024, 11:01

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

TÀI LIỆU LIÊN QUAN

w