1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính

59 1 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 đề Ứng dụng Docker trên nền tảng Linux trong giảng dạy các học phần quản trị hệ thống Linux ngành Truyền thông và mạng máy tính
Tác giả Ths. Nguyễn Thanh Vũ
Trường học Trường Cao Đẳng Công Nghệ Thủ Đức
Chuyên ngành Truyền thông và mạng máy tính
Thể loại Nghiên cứu khoa học
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 59
Dung lượng 1,56 MB

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

Cấu trúc

  • 1.1. Lý do chọn đề tài (8)
  • 1.2. Mục đích nghiên cứu (8)
  • 1.3. Đối tượng và khách thể nghiên cứu (8)
  • 1.4. Giả thuyết nghiên cứu (8)
  • 1.5. Nhiệm vụ nghiên cứu (9)
  • 1.6. Phương pháp nghiên cứu (9)
  • 1.7. Phạm vi ảnh hưởng (9)
  • I. Tổng quan lý thuyết về Docker (10)
    • 1. Docker là gì ? (10)
    • 2. Chức năng và vai trò của docker (11)
    • 3. Hoạt động của Docker (11)
    • 4. Các thành phần của Docker (12)
    • 5. Khác nhau giữa Ảo hóa và Docker (17)
    • 6. Network trong Docker (19)
    • 7. Tìm hiểu Docker trên Cloud Computing (24)
  • II. Cài đặt và cấu hình Docker trên Linux (28)
    • 1. Sơ đồ thực hiện (28)
    • 2. Thông tin chi tiết cấu hình (28)
    • 3. Cài đặt và cấu hình (29)
    • 1. Kết quả quả đạt được của đề tài (58)
    • 2. Hướng phát triển đề tài (58)
  • TÀI LIỆU THAM KHẢO (59)

Nội dung

Lý do chọn đề tài Hiện nay các học phần chuyên ngành Quản trị hệ thống Linux được giảng dạy và học tập trên nền tảng ảo hóa để xây dựng hệ thống mạng, tuy nhiên việc ứng dụng ảo hóa tốn

Mục đích nghiên cứu

Giúp sinh viên chủ động trong học tập và nghiên cứu học phần chuyên môn, đáp ứng tốt yêu cầu thực tiễn Ứng dụng Docker trong hoạt động giảng dạy cần thiết và phù hợp với nhu cầu thực tiễn.

Đối tượng và khách thể nghiên cứu

Đối tượng nghiên cứu là ứng dụng Docker trong hoạt động học tập chuyên môn ngành Truyền thông và Mạng máy tính, khoa Công nghệ thông tin trường Cao đẳng Công nghệ Thủ Đức

Nội dung nghiên cứu được tìm hiểu từ các hệ thống xây dựng trong thực tiễn, trong hoạt động giảng dạy các học phần chuyên ngành.

Giả thuyết nghiên cứu

Trong việc giảng dạy và học tập các học phần Quản trị hệ thống mạng trên nền tảng ảo hóa yêu cầu cấu hình thiết bị học tập phải phù hợp và thường bị giới hạn xây dựng các hệ thống mạng lớn, không linh hoạt trong việc quản lý và chạy các ứng dụng theo yêu cầu học tập và tự nghiên cứu của sinh viên

Docker được ứng dụng xây dựng các hệ thống mạng lớn hơn, linh hoạt trong khởi tạo các ứng dụng giúp cho việc học tập và nghiên cứu đạt hiệu quả

Nhiệm vụ nghiên cứu

Khảo sát hiện trạng sử dụng ảo hóa trong giảng dạy các học phần Linux ngành Truyền thông và Mạng máy tính của khoa Công nghệ thông tin trường Cao đẳng công nghệ Thủ Đức

Tìm hiểu, phân tích các tính năng của Docker trong xây dựng các hệ thống mạng và quản lý hoạt động của các dịch vụ, ứng dụng trên hệ điều hành Linux

Mở rộng nghiên cứu Docker trong ứng dụng quản lý ngôn ngữ lập trình

Phương pháp nghiên cứu

Khảo sát công nghệ sử dụng và các yêu cầu chuyên môn thực tiễn so với việc giảng dạy thực tế các học phần chuyên môn tại trường

Nghiên cứu, phân tích lý thuyết về Docker

Tiến hành cài đặt và cấu hình các tính năng, khởi chạy ứng dụng, network trong Docker

Phạm vi ảnh hưởng

Phạm vi nghiên cứu là cho hoạt động học tập và giảng dạy học phần chuyên môn ngành Truyền thông và Mạng máy tính, khoa Công nghệ thông tin trường Cao đẳng Công nghệ Thủ Đức

Tổng quan lý thuyết về Docker

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 sẽ được khởi chạy ngay lập tức Tương tự như cách máy ảo ảo hóa phần cứng máy chủ, các container sẽ ảo hóa hệ điều hành của máy chủ Docker được cài đặt trên từng máy chủ và cung cấp các lệnh đơn giản có thể sử dụng để dựng, khởi động hoặc dừng container

Các Container có trọng lượng nhẹ nhưng lại được chạy trực tiếp từ trong nhân của máy chủ Điều này có nghĩa là với docker có thể chạy nhiều Container hơn trên một hệ thống phần cứng nhất định so với đang sử dụng máy ảo Virtual Machine (VM)

Docker cũng cung cấp công cụ và nền tảng để quản lý các Container Cụ thể: + Phát triển ứng dụng của bạn và các thành phần hỗ trợ của nó bằng cách sử dụng Container

+ Container trở thành đơn vị phân phối và thử nghiệm ứng dụng

Hình 1 Biểu trưng của Docker

Chức năng và vai trò của docker

Docker cho phép phát triển, di chuyển và chạy các ứng dụng dựa vào công nghệ ảo hóa trong linux

Tự động triển khai các ứng dụng bên trong các container bằng cách cung cấp thêm một lớp trừu tượng và tự động hóa việc ảo hóa mức hệ điều hành (OS) Docker có thể được sử dụng trên các hệ điều hành như: Windows, Linux, MacOS b Vai trò

Linh động: Dễ dàng triển khai ở nhiều môi trường khác nhau do loại bỏ được sự phụ thuộc của ứng dụng vào tầng OS cũng như cơ sở hạ tầng

Tiết kiệm không gian: Container được xây dựng dựa trên nhiều image có sẵn, từ đó tiết kiệm được nhiều không gian lưu trữ hơn Đồng nhất: Không có sự sai khác về mặt môi trường khi triển khai ở bất kỳ nơi đâu, tạo ra sự nhất quán khi làm việc theo nhóm

Nhanh: Do chia sẻ host OS nên các container có thể gần như được tạo một cách tức thì, việc khởi động cũng diễn ra nhanh hơn rất nhiều.

Hoạt động của Docker

- Docker hoạt động bằng cách cung cấp phương thức tiêu chuẩn để chạy mã Nó giống như cách máy ảo – ảo hóa phần cứng của máy chủ nhằm loại bỏ nhu cầu trực tiếp quản lý, lúc này các container sẽ ảo hóa hệ điều hành của máy chủ Khi được cài đặt trên từng máy chủ, docker cung cấp các lệnh cơ bản để có thể build, khởi tạo hay dừng container

- Hoạt động của Docker sẽ thông qua một Docker Engine có sự kết hợp của hai yếu tố server và client Server và Client giao tiếp với nhau thông qua REST API

❖ Quy trình thực thi của hệ thống khi sử dụng Docker

Thông thường, để thực thi hệ thống Docker, cần trải qua ba bước: Build, Push và

Build Đây là bước đầu tiên để tạo một dockerfile Bên trong dockerfile chính là code của chúng ta Cụ thể dockerfile sẽ được xây dựng tại một máy tính đã cài đặt sẵn Docker Engine Sau khi build xong, chúng ta sẽ có được Container và trong này sẽ có chứa ứng dụng kèm với toàn bộ thư viện

Hình 2 Quy trình thực thi của hệ thống khi sử dụng Docker

Sau khi có được container, bước push là bước đẩy contain lên cloud và lưu trữ tại đó

Trong trường hợp có một máy tính khác muốn sử dụng Container, thì máy bắt buộc phải thực hiện Pull Container về máy và máy đã cài sẵn Docker Engine Sau đó, để sử dụng Container phải thực hiện Run Container này.

Các thành phần của Docker

Docker Engine là phần cốt lõi của Docker, như một công cụ để đóng gói ứng dụng, được xây dựng theo kiểu kiến trúc client-server và được cài đặt trên máy Host

Docker Engine có 3 thành phần:

Server: Docker Daemon dùng để tạo và quản lý các images, containers, networks, volumes

Rest API: Controller cho docker daemon, chỉ ra những gì docker daemon sẽ làm

Client: Là một 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 trong terminal (CLI) Docker Client sẽ sử dụng API gửi lệnh tới Docker Daemon

Có 5 đối tượng lớn trong thế giới của Docker Engine:

Dockerfile là một file dạng text không có phần đuôi mở rộng, chứa các đặc tả về một trường thực thi phần mềm, cấu trúc cho Docker image

Docker image có thể được tạo ra tự động bằng cách đọc các chỉ dẫn trong Dockerfile

Từ những câu lệnh đó, Docker sẽ build ra Docker image (thường có dung lượng nhỏ từ vài MB đến lớn vài GB)

Hình 3 Cấu trúc của Image

Image trong docker còn được gọi là mirror, nó là 1 đơn vị đóng gói chứa mọi thứ cần thiết để 1 ứng dụng chạy

Image được tạo thành từ nhiều layer xếp chồng lên nhau, bên trong image là 1 hệ điều hành bị cắt giảm và tất cả các phụ thuộc (dependencies) cần thiết để chạy 1 ứng dụng

Hình 4 Dockerfile trong quy trình tạo Image

Dockerfile là file config cho Docker để build ra image Nó dùng một image cơ bản để xây dựng lớp image ban đầu Một số image cơ bản: python, unbutu and alpine

• 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

Một image có thể được sử dụng để tạo 1 hoặc nhiều container

Ta có thể create, start, stop, move hoặc delete dựa trên Docker API hoặc Docker CLI

Trên hệ điều hành, ta cài đặt container engine là docker Sau đó, công cụ container sẽ lấy các tài nguyên hệ điều hành và ghép chúng lại thành các cấu trúc riêng biệt được gọi là container

Hình 5 Cấu trúc của Container

Mỗi container bao gồm mọi thứ cần thiết để chạy được nó: code, runtime, system tools, system libraries, setting Mỗi container như 1 hệ điều hành thực sự, bên trong mỗi container sẽ chạy 1 ứng dụng

Quá trình đưa 1 ứng dụng chạy trong container có để được hiểu như sau:

Hình 6 Quá trình đưa 1 ứng dụng chạy trong container

✔ Đầu tiên ta bắt đầu với code app và các phụ thuộc của nó

✔ Tạo Dockerfile mô tả app, các phụ thuộc và cách run app

✔ Push image mới build vào registry(option)

Docker network có nhiệm vụ cung cấp private network (VLAN) để các container trên một host có thể liên lạc được với nhau, hoặc các container trên nhiều hosts có thể liên lạc được với nhau (multi-host networking)

Docker volume là cơ chế tạo và sử dụng dữ liệu của docker, có nhiệm vụ lưu trữ dữ liệu độc lập với vòng đời của container

Có 3 trường hợp sử dụng Docker Volume:

✔ Giữ lại dữ liệu khi một Container bị xóa

✔ Để chia sẻ dữ liệu giữa máy chủ vật lý và Docker Container

✔ Chia sẻ dữ liệu giữa các Docker Container b Docker Registry/Docker Hub

Docker Registry là một dịch vụ máy chủ cho phép lưu trữ các docker image của cá nhân, công ty, team, Dịch vụ Docker Registry có thể được cung cấp bởi tổ chức thứ 3 hoặc là dịch vụ nội bộ được xây dựng riêng nếu bạn muốn

Hình 7 Docker Registry/Docker Hub

Một số dịch vụ Docker Registry phổ biến như:

Khác nhau giữa Ảo hóa và Docker

Docker daemon có thể giao tiếp trực tiếp với hệ điều hành của server và phân bổ tài nguyên cho các Docker container đang chạy, đảm bảo mỗi container hoạt động độc lập với các container khác và hệ điều hành của server Thay vì phải đợi một phút để máy ảo khởi động, người dùng có thể khởi động Docker container chỉ trong vài mili giây và tiết kiệm được rất nhiều dung lượng ổ đĩa và các tài nguyên hệ thống khác do không cần phải sử dụng “guest OS” cồng kềnh cho mỗi ứng dụng Người dùng sẽ không cần ảo hóa vì Docker chạy trực tiếp trên hệ điều hành của server

Hình 8 Khác nhau giữa Docker với Virtual Machine

Docker container Máy ảo (Virtual Machine)

Kích thước (dung lượng) nhỏ Kích thước (dung lượng) lớn

Hiệu suất gốc (native) Hiệu suất hạn chế

Container sẽ sử dụng hệ điều hành của host

Mỗi máy ảo sẽ có một hệ điều hành riêng Ảo hóa về mặt hệ điều hành Ảo hóa về mặt phần cứng

Thời gian khởi động tính theo mili giây Thời gian khởi động tính theo phút Yêu cầu ít dung lượng bộ nhớ hơn Phân bổ bộ nhớ theo nhu cầu cần thiết

Cô lập ở mức tiến trình, có thể kém an toàn hơn

Hoàn toàn bị cô lập và an toàn hơn

Bảng 1 So sánh giữa Docker với Virtual Machine

Việc sử dụng máy ảo hay Docker container sẽ phụ thuộc vào nhu cầu sử dụng của người dùng Máy ảo rất phù hợp trong việc cách ly tài nguyên hệ thống và toàn bộ môi trường làm việc Đây sẽ là lựa chọn tốt hơn để chạy các ứng dụng yêu cầu tất cả tài nguyên và chức năng của hệ điều hành khi bạn cần chạy nhiều ứng dụng trên server hoặc có nhiều hệ điều hành khác nhau để quản lý Ví dụ: công ty của bạn cung cấp dịch vụ web hosting, bạn có thể sẽ sử dụng máy ảo để phân phối tài nguyên của server công ty cho từng khách hàng

Mặt khác, triết lý của Docker là cô lập các ứng dụng riêng lẻ, không phải toàn bộ hệ thống Một ví dụ hoàn hảo về điều này sẽ là chia nhỏ một loạt các dịch vụ ứng dụng web thành các Docker image của riêng chúng và triển khai chúng bằng

Docker Container Docker Container là lựa chọn tốt hơn khi ưu tiên lớn nhất của bạn là tối đa hóa số lượng ứng dụng đang chạy trên một số lượng server tối thiểu.

Network trong Docker

Hệ thống network Docker là dạng plugable, sử dụng drivers Hầu hết các driver được cung cấp mặc định, với các chức năng cốt lõi của các chức năng mạng thông thường

Docker network có thể cung cấp hầu hết các chức năng mà một hệ thống mạng bình thường cần có

- BRIDGE Đây là driver mạng default của Docker Nếu không chỉ định driver thì bridge sẽ là driver mạng mặc định khi khởi tạo

Khi chúng ta cài đặt Docker, virtual bridge docker0 sẽ được tạo ra, docker tìm một subnet chưa được dùng trên host và gán một địa chỉ cho docker0

Bridge network thường được sử dụng khi cần chạy ứng dụng dưới dạng các container độc lập cần giao tiếp với nhau Các container trong cùng mạng có thể giao tiếp với nhau qua địa chỉ IP Docker không hỗ trợ nhận diện host ở mạng này, vì vậy muốn connect thì phải dùng options links để docker có thể hiểu được địa chỉ của các service

Dùng khi container cần giao tiếp với host và sử dụng luôn mạng ở host, vì sử dụng mạng của máy chủ đang chạy nên không còn lớp mạng nào giữa container với Docker Host phù hợp khi cần connect từ container ra thẳng ngoài host

Mạng lớp phủ - Overlay network tạo một mạng phân tán giữa nhiều máy chủ Docker Kết nối nhiều Docker daemons với nhau và cho phép các cụm services giao tiếp với nhau Chúng ta có thể sử dụng overlay network để giao tiếp dễ dàng giữa cụm các services với một container độc lập, hay giữa 2 container với nhau ở khác máy chủ Docker daemons

Nhờ Overlay network, không cần các công việc thiết lập routing giữa các container thông qua hệ điều hành Overlay network tạo nên một lớp phủ trên mạng của máy chủ và cho phép container kết nối đến (bao gồm cả các cụm containers) để giao tiếp một cách bảo mật Docker đảm bảo định tuyến các gói tin đến và đi đúng container đích

Mạng Macvlan cho phép chúng ta gán địa chỉ MAC cho container, điều này làm cho mỗi container như là một thiết bị vật lý trong mạng Docker daemon định tuyến truy cập tới container bởi địa chỉ MAC Sử dụng driver macvlan là lựa chọn tốt khi các ứng dụng khác cần phải connect đến theo địa chỉ vật lý hơn là thông qua các lớp mạng của máy chủ

Với container không cần networking hoặc cần disable đi tất cả mọi networking, chúng ta sẽ chọn driver này Thường được dùng với mạng tùy chỉnh Driver này không thể dùng trong cụm swarm

Một vài cách sử dụng docker network

Khởi tạo một docker network

$ docker network create [OPTIONS] NETWORK

Trong đó options -d là driver, để tạo mạng overlay thì có thể dùng -d overlay Ngoài ra thì còn nhiều options để tùy vào mức độ custom mà chúng ta có thể thêm vào, nhiều số trong này mình không thực sự hiểu hết, chỉ quan tâm một đến vài options

gateway: Địa chỉ Ip của Gateway (IPv4 hay IPv6) cho mạng con

ip-range: Xác định một dải IPs sử dụng trong mạng

internal: Hạn chế access từ bên ngoài vào mạng

Ví dụ: Khởi tạo mạng với driver bridge có subnet 10.11.0.0/16, ip gateway là

$ docker network create -d bridge subnet.11.0.0/16 gateway.11.0.1 my- bridge-net

$ docker network inspect my-bridge-net

Sử dụng network khi chạy một container

Sử dụng option network để chạy một container trên network bridge đó docker run network=bridge -itd name=container1 normal-app:dev

Sử dụng network qua docker-compose

Khi dùng docker-compose thì nếu không khai báo network, docker sẽ tự động khởi tạo một mạng dành cho app và driver sẽ là bridge

Creating network "api_default" with the default driver

Lúc này kiểm tra danh sách network sẽ có network mà docker-compose vừa tạo

NETWORK ID NAME DRIVER SCOPE

4bdb10fc8926 api_default bridge local

125591bf59af none null local bd9d957fec97 normalapp_default bridge local

Và khi dừng app thì docker sẽ xóa mạng này

Stopping api_redis-api_1 done

Removing api_redis-api_1 done

Nếu muốn khai báo mạng cho từng containers trong một cụm chúng ta có thể dùng 2 cách sau:

Khai báo driver host cho container app qua network_mode, cách khai báo này có thể thay đổi driver cho container

Trường hợp chúng ta muốn app sử dụng luôn mạng của host mà không dùng mạng docker, hãy khai báo như sau: services: app: network_mode: host

Khai báo qua networks trong docker-compose.yml

networks: api-net: driver: host

Sử dụng network trong cụm docker swarm

Docker swarm thường sử dụng file docker-compose.yml để deploy, và trong file này cần lựa chọn mạng overlay để docker có thể connect multiple networks host với nhau services: app: networks:

Xóa network docker network rm my-bridge-network

Tìm hiểu Docker trên Cloud Computing

Hình 9 Docker trên Cloud Computing

AWS cung cấp hỗ trợ cho cả giải pháp mã nguồn mở lẫn thương mại của Docker

Có nhiều cách chạy bộ chứa trên AWS, trong đó có Amazon Elastic Container Service (ECS) là dịch vụ quản lý bộ chứa có quy mô cực kỳ linh hoạt và hiệu năng cao Khách hàng có thể dễ dàng triển khai ứng dụng đã đưa vào bộ chứa của mình từ môi trường Docker cục bộ lên thẳng Amazon ECS AWS Fargate là công nghệ dành cho Amazon ECS cho phép bạn chạy bộ chứa trong sản xuất mà không cần triển khai hoặc quản lý cơ sở hạ tầng Amazon Elastic Container Service for Kubernetes (EKS) giúp việc chạy Kubernetes trên AWS trở nên dễ dàng AWS Fargate là công nghệ dành cho Amazon ECS cho phép bạn chạy container mà không cần cung cấp hay quản lý máy chủ Amazon Elastic Container Registry (ECR) là kho container riêng bảo mật và có độ sẵn sàng cao giúp việc lưu trữ và quản lý ảnh container Docker của bạn trở nên dễ dàng, mã hóa và nén ảnh khi lưu trữ để quá trình bung diễn ra nhanh chóng và bảo mật AWS Batch giúp chạy các khối lượng công việc xử lý hàng loạt có quy mô cực kỳ linh hoạt bằng cách sử dụng container Docker

Hình 10 Docker trên AWS cloud a Aws fargate

AWS Fargate là công nghệ có thể được sử dụng với Amazon ECS và Amazon EKS Nó cho phép bạn chạy các vùng chứa mà không cần quản lý máy chủ hoặc cụm của các phiên bản Amazon EC2

Fargate loại bỏ nhu cầu cấu hình, mở rộng quy mô hoặc cung cấp các cụm máy ảo để thực thi các vùng chứa Sẽ không cần phải chọn loại máy chủ, lập lịch mở rộng cụm hoặc tối ưu hóa đóng gói cụm

Chúng tôi có thể sử dụng kiểu khởi chạy Fargate hoặc nhà cung cấp năng lực Fargate để chạy các tác vụ và dịch vụ Amazon ECS của bạn Để sử dụng Fargate, bạn có thể đóng gói ứng dụng của mình trong các vùng chứa, chỉ định các yêu cầu Hệ điều hành, CPU và bộ nhớ, định cấu hình các chính sách mạng và IAM và khởi chạy nó

Không cần duy trì dung lượng CPU và RAM cơ bản cho các vùng chứa lưu trữ Chúng tôi có thể cho AWS biết một nhiệm vụ cần bao nhiêu tài nguyên và để phần còn lại của nhiệm vụ cho AWS Mỗi tác vụ Fargate có hàng rào cách ly, vì b Amazon ECS Được gọi tắt là ECS là một service quản lý container có tính scale cao và nhanh

Dễ dàng run, stop, hay quản lý docker container ở trong một cluster Bạn có thể host một serverless infrastructure bằng cách chạy service hay task sử dụng Fragate launch type

Amazon ECS cho phép bạn launch hay stop container-based thông qua API, cho phép bạn lấy state của cluster từ centralized service cũng như cho phép access tới các feature giống như EC2

Bạn có thể sử dụng Amazon ECS để cài đặt contaner thông qua cluster và dựa và nguồn tài nguyên mà bạn cần, chính sách độc lập hay khả năng thay đổi Amazon ECS sẽ giúp bạn không phải operate việc quản lý cluster hay cấu hình system hay quản lý scaling infrastructure

Amazon ECS có thể được sử dụng để tạo ra một deployment thích hợp, scale batch, và Extra-Transform-Load và build kiến trúc của ứng dụng trên một microservice model

AWS elastic beanstalk cũng được sử dụng cho việc phát triển, test, hay deploy Docker container với các thành phần khác trong ứng dụng infra của bạn thế nhưng sử dụng Amazon ECS trực tiếp sẽ kiểm soát trơn tru hơn và truy cập rộng hơn c Amazon ECR

AWS ECR là một dịch vụ Docker container registry quản lý hoàn toàn bởi AWS nhằm đơn giản hóa việc lưu trữ, quản lý và triển khai các Docker container image ECR có thể tích hợp được với Amazon Elastic Container Service (ECS) nhằm đơn giản hóa việc thiết lập luồng thực hiện triển khai cho các hệ thống production cũng như loại bỏ đi sự phức tạp trong việc quản lý kho lưu trữ cho các container image d Amazon ECS Task definitions

Task definition là một text file (json format) Nó sẽ mô tả 1 hoặc nhiều container (tối đa là 10) để hình thành nên ứng dụng của bạn Task definition sẽ chỉ ra một vài parameter cho ứng dụng như container nào sẽ được sử dụng, launch type sẽ được dùng, những port nào sẽ được mở cho ứng dụng và data volume gì sẽ được với containers trong task

Parameter trong task definition phụ thuộc vào launch type nào đang được sử dụng Các thông số có thể được thiết lập trong task definition là:

• Docker image được sử dụng

• Lượng CPU và memory được sử dụng trong task hay mỗi container trong task đó

• Cách thức khởi chạy (Xác định hạ tầng sẽ chạy)

• Phương thức kết nối mạng cho các container

• Cấu hình log cho task

• Các hướng xử lý khi chạy task

• Các lệnh sẽ thực thi khi khởi chạy task

• Xác định các volume sẽ sử dụng

• IAM role được sử dụng để thực thi task e Amazon ECS Cluster

Khi các tasks được chạy trên ECS là khi đó chúng được đặt trong cluster, Khi sử dụng Fargate lauch type với các task bên trong cluster, ECS sẽ quản lý cluster resources Khi sử dụng EC2 launch type thì các cluster là những group container instances

Một ECS containter là một instance Amazon EC2 instance mà nó chạy ECS container agent Amazon ECS download container images của bạn từ registry mà bạn đã setting trước đó sau đó sẽ run những images này trong cluster của bạn

• Cluster có thể chứa nhiều tasks sử dụng cả Fargate và EC2 launch type

• Cho các task sử dụng EC2 launch type , các clusters có thể chứa nhiều container instance type khác nhau, nhưng mỗi một container instance có thể chỉ là một phần của một cluster tại một thời điểm

Cài đặt và cấu hình Docker trên Linux

Sơ đồ thực hiện

Hình 11 Sơ đồ thực hiện

Thông tin chi tiết cấu hình

-Docker Images -Container +Httpd +Mariadb +PHP và PHPMyadmin +EPRL repository -Hub Docker

Bảng 2 Thông tin chi tiết cấu hình

Cài đặt và cấu hình

a Triển khai docker trên 1 máy local Đầu tiên, ta tiến hành update hệ thống lên mới nhất bằng lệnh : sudo yum update -y

Sau đó, ta cài đặt và khởi động docker bằng lệnh : sudo yum install -y docker , sudo service docker start

Sau đó ta tiến hành cài đặt Docker-Compose bằng lệnh : curl -SL https://github.com/docker/compose/releases/download/v2.12.1/docker-compose-linux- x86_64 -o /usr/local/bin/docker-compose

Và ta gán quyền cho Docker-Compose : sudo chmod +x /usr/local/bin/docker-compose

Tiếp theo, ta tiến hành tải image Centos:7 về để build thành container : docker pull centos:7

Ta sẽ chạy container từ image đã down về : docker run privileged -d -p 80:80 centos:7 /sbin/init

Ta có thể dùng lệnh docker ps để xem đã chạy thành công container chưa

Sau khi đã có container, ta tiến hành vào container để cấu hình bằng lệnh : docker exec -it c1d2f40168f1 /bin/bash

Sau khi vào được container, ta cấu hình các lệnh theo mục đích của ta Ở đây, mình sẽ tạo 1 website hoàn chỉnh nên mình sẽ cấu hình website trên container đó :

+ Cài đặt httpd, mariadb, php, epel, phpMyAdmin vào container

+ Cấu hình lại một số file

Sau khi cấu hình một webserver trong container xong, ta upload source website lên phpMyAdmin : 192.168.98.136/phpmyadmin và tạo database

Sau đó, ta vào database vừa tạo xong, chọn Import => Choose File => Chọn file SQL

Vì không thể truy cập vào container bằng WinSCP, nên mình sẽ đưa File tạo web vào một file ở máy chủ, sau đó mình sẽ copy File tạo web đó vào container, bằng cách :

Tạo file ở máy chủ : mkdir source Sau đó mình sẽ copy File tạo web vào file source bằng WinSCP

Chọn file config.php để thêm password của root vào

Sau đó, ta copy file source từ máy chủ vào file html của container bằng lệnh :

Ta vào lại container và di chuyển đến file html

Và ta sẽ copy các thư mục con của file source ra ngoài, bằng lệnh : cp -RT /source/ /

Và xóa file source : rm -rf source/ Để test, ta nhập IP của máy chủ vào trình duyệt b Triển khai docker trên 2 máy Để có thể share image đã tạo cho máy khác, ta cần phải đưa image đó lên Docker Hub ( là dịch vụ đăng ký dựa trên đám mây cho phép bạn liên kết với khác kho lưu trữ mã hóa, tạo và lưu trữ images và kiểm tra chúng ) Từ đó, ta sẽ lấy image về máy khác từ Docker Hub Đề làm được điều đó, đầu tiên ta cần tạo tài khoản Docker Hub ở trang hub.docker.com

Sau khi đã có tài khoản Docker Hub, ta tiến hành tạo lại image từ container để triển khai cho máy khác bằng lệnh : docker commit -m "Web Project01" -a "Nguyen Minh Thien" c1d2f40168f1 minhthien240200/website01:v1

Ta có thể kiểm tra đã tạo image thành công chưa bằng lệnh : docker images

Sau đó ở máy chủ 1, ta đăng nhập vào Docker Hub bằng lệnh : docker login và đăng nhập tài khoản đã tạo vào

Sau đó, ta sẽ up image muốn share lên Docker Hub bằng lệnh : docker push minhthien240200/website01:v1

Và vào trang hub.docker.com để check :

Bước tiếp theo, ta sẽ tạo thêm máy ảo chạy Centos7

Và cũng chạy các lệnh như update hệ thống, cài đặt và khởi động docker : sudo yum update -y, sudo yum install -y docker, sudo service docker start

Sau đó ta cũng đăng nhập vào Docker Hub :

Ta sẽ tiến hành tải image cần dùng về : docker pull minhthien240200/website01:v1

Ta check lại image : docker images

Sau khi đã có image, ta tiến hành chạy Container từ image bằng lệnh : docker run privileged -d -p 80:80 minhthien240200/website01:v1 /sbin/init

Kiểm tra Container đã được tạo chưa : docker ps

Cuối cùng, ta test bằng cách nhập IP của máy chủ 2 vào trình duyệt web mà không cần chỉnh sửa thêm gì nữa c Triển khai docker network trên máy local Tạo Network (Vlan10) cho các Container : docker network create -d bridge \

Check network: docker network ls

Tạo container kết nối với Network Vlan10 :

Minh sẽ tạo ra 2 container chạy centos và alpine docker run net=vlan10 -itd name vlan10_1 rm centos /bin/bash docker run net=vlan10 -itd name vlan10_2 rm alpine /bin/sh

Kiểm tra lại các container trong Vlan10 : docker network inspect vlan10

Sau đó mình sẽ vào các container kiểm tra :

Vào Container Vlan10_1 : docker attach vlan10_1

Kết nối Container đang chạy với một mạng khác :

Tạo Vlan20 : docker network create -d bridge \

Tạo Container Vlan20_1 kết nối Vlan20 : docker run net=vlan20 -itd name vlan20_1 rm busybox /bin/sh

Ta sẽ vào Container Vlan20_1 để kiểm tra trước khi kết nối với mạng khác :

Kết nối Container Vlan20_1 với Vlan10 : docker network connect vlan10 vlan20_1

Ta sẽ vào Container Vlan20_1 để kiểm tra kết nối với Vlan10 :

Ping -c 4 192.168.20.2 ( toi container Vlan20_2 ) d Triển khai docker trên cloud aws

AWS cung cấp hỗ trợ cho cả giải pháp mã nguồn mở lẫn thương mại của Docker Có nhiều cách chạy bộ chứa trên AWS, trong đó có Amazon Elastic Container Service (ECS) là dịch vụ quản lý bộ chứa có quy mô cực kỳ linh hoạt và hiệu năng cao Khách hàng có thể dễ dàng triển khai ứng dụng đã đưa vào bộ chứa của mình từ môi trường Docker cục bộ lên thẳng Amazon ECS Đầu tiên, ta sẽ tạo IAM user để truy cập :

Ta sẽ tạo User Group => chọn Create group

Nhập tên Group : helloworld-ecs-group

Tiếp theo ta thêm quyền đẩy các Image và Container lên Cloud vào Group : Quyền AmazonEC2ContainerRegistryFullAccess => Create group

Group đã được tạo thành công

Sau đó, ta sẽ tạo User bằng cách chọn Add users Ở đây, ta sẽ nhập tên User và tích vào Access key – Programmatic access để User có quên phát triển Docker => Chọn Next

Sau đó, ta sẽ chọn Group vừa tạo => Chọn Next Ở đây, ta kiểm ra lại thông tin sau đó chọn Create user

Thế là User đã được tạo và ta cần tải file csv về máy, nó chứa Access key ID và Secret access key để sử dụng Command Line trên AWS

Tiếp theo, ta sẽ tạo Server EC2 để taọ Docker Image và phát triển nó Để tạo ta chọn Lauch instances

Ta nhập tên Server và chọn một số thông số cho máy chủ => Launch instances

Sau đó, ta cấu hình cho Server một số lệnh như update, cài đặt và khởi động Docker, cài đặt Docker-Compose

Tiếp theo, ta cấu hình AWS CLI : aws configure

Ta sẽ nhập các key trong file csv đã tải về trước đó

Ta check lại bằng lệnh : aws configure list

Sau đó, ta đăng nhập vào Docker Hub : docker login

Và down image về máy : docker pull minhthien240200/website01:v1

Check lại đã có Image chưa : docker image

Tiếp theo, ta sẽ tạo Repository lên AWS/ECR ( Amazon Elastic Container Registry là dịch vụ lưu trữ bộ chứa Docker được quản lý đầy đủ giúp các nhà phát triển dễ dàng lưu trữ, quản lý và triển khai hình ảnh bộ chứa Docker ) Để tạo Repository có thể tạo bằng giao diện hoặc bằng lệnh, ở đây mình sẽ tạo bằng lệnh

Tạo tag version cho docker images bằng lệnh : docker tag minhthien240200/website01:v1 415855612400.dkr.ecr.us-east-1.amazonaws.com/helloworld

Ta sẽ login vào AWS ECS để đẩy image lên AWS, bằng lệnh : aws ecr get-login no-include- email region us-east-1

Sau đó, ta tiến hành đảy image lên AWS : docker push 415855612400.dkr.ecr.us-east-1.amazonaws.com/helloworld

Chúng ta sẽ check lại xem image đã được đẩy lên chưa, bằng cách vào search Amazon ECR => chọn Repositories => chọn helloworld

Và image của mình đã được đẩy lên :

Bước tiếp theo, ta sẽ tạo Task Definitions : Đầu tiên, có nhiều loại cho chúng ta lựa chọn, ở đây mình làm về EC2 nên mình chọn :

Sau đó, ta sẽ đặt tên cho Task và để các mục còn lại ở mặc định :

Tiếp theo ta sẽ đặt tên cho Container và copy đường dẫn của image, đặt giới hạn dung lượng, gán thêm Port và chọn Add :

Sau khi đã Add Container thì ta chọn Create để tạo Task Definitions :

Bước tiếp theo, ta sẽ tạo Cluster :

Sau đó ta sẽ chọn hệ điều hành cho nó Ở đây thì mình chọn Linux và chọn Next

Tiếp theo, ta sẽ đặt tên cho Cluster và chọn một số gói dịch vụ : mình sẽ chọn những gói nhỏ free để thực hành => chọn Create

Cluster của ta đã được tạo :

Sau đó ta sẽ tạo Service cho Cluster : ở Mục Service => chọn Create

Sau đó thì ta sẽ cấu hình cho Service đó : như tên, type, chọn Task Definition, Cluster đã tạo => chọn Create

Service đã tạo thành công, ta check bằng cách chọn View Service :

Thì nó đã Active và Task nó đã hiện RUNNING :

Cuối cùng, ta cũng đã có một Instance chứa Image và Container ta muốn :

Check lại bằng cách nhập IP của Instance vừa tạo :

KẾT LUẬN VÀ KIẾN NGHỊ

Kết quả quả đạt được của đề tài

Tìm hiểu lý thuyết và ứng dụng Docker trong xây dựng và quản trị các hệ thống mạng trong thực tiễn Áp dụng Docker trong giảng dạy các học phần Linux ngành Truyền thông và Mạng máy tính khoa Công nghệ thông tin – Trường Cao đẳng Công nghệ Thủ Đức.

Hướng phát triển đề tài

Tìm hiểu chuyên sâu hơn về Docker kết hợp các thành phần khác trong DevOps để xây dựng hệ thống hoàn chỉnh hơn trong giảng dạy chuyên ngành công nghệ thông tin.

Ngày đăng: 10/11/2024, 19:58

HÌNH ẢNH LIÊN QUAN

Hình 1. Biểu trưng của Docker - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 1. Biểu trưng của Docker (Trang 10)
Hình 2. Quy trình thực thi của hệ thống khi sử dụng Docker - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 2. Quy trình thực thi của hệ thống khi sử dụng Docker (Trang 12)
Hình 3. Cấu trúc của Image - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 3. Cấu trúc của Image (Trang 13)
Hình 4. Dockerfile trong quy trình tạo Image - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 4. Dockerfile trong quy trình tạo Image (Trang 14)
Hình 5. Cấu trúc của Container - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 5. Cấu trúc của Container (Trang 15)
Hình 6. Quá trình đưa 1 ứng dụng chạy trong container - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 6. Quá trình đưa 1 ứng dụng chạy trong container (Trang 16)
Hình 7. Docker Registry/Docker Hub - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 7. Docker Registry/Docker Hub (Trang 17)
Hình 8. Khác nhau giữa Docker với Virtual Machine - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 8. Khác nhau giữa Docker với Virtual Machine (Trang 18)
Bảng 1. So sánh giữa Docker với Virtual Machine - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Bảng 1. So sánh giữa Docker với Virtual Machine (Trang 18)
Hình 9. Docker trên Cloud Computing - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 9. Docker trên Cloud Computing (Trang 24)
Hình 10. Docker trên AWS cloud - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 10. Docker trên AWS cloud (Trang 25)
Hình 11. Sơ đồ thực hiện - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Hình 11. Sơ đồ thực hiện (Trang 28)
Bảng 2. Thông tin chi tiết cấu hình - Ứng dụng docker trên nền tảng linux trong giảng dạy các học phần quản trị hệ thống linux ngành truyền thông và mạng máy tính
Bảng 2. Thông tin chi tiết cấu hình (Trang 29)

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w