Đồ án tìm hiểu về docker và ruby on rails (đồ án SE121 l21 PMCL)

120 56 0
Đồ án tìm hiểu về docker và ruby on rails (đồ án SE121 l21 PMCL)

Đ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

Tìm hiểu Docker Ruby On Rails MỤC LỤC I GIỚI THIỆU CHUNG Thơng tin nhóm Tổng quan đề tài: 2.1 Giới thiệu đề tài 2.2 Phạm vi nghiên cứu 2.3 Nội dung nghiên cứu 2.4 Kết hướng tới: Công cụ sử dụng: 8 8 9 10 II RUBY ON RAILS Khái niệm Ruby on Rails Tại lại chọn Ruby on Rails? Kiến trúc Ruby On Rails 3.1 Tầng Model 3.3 Tầng View 3.3 Tầng Controller 3.4 Ví dụ minh họa Một số khái niệm Ruby On Rails 4.1 ORM 4.2 Active Record 4.3 Rails Model 4.4 Migration 4.5 Validations 4.6 Associations 4.7 Action Pack 4.8 Routing Mô tả tổng quát codebase 5.1 Tập Tin Gemfile Gemfile.lock 5.2 Thư mục app 5.2.1 Thư mục controllers 5.2.2 Thư mục models 5.2.3 Thư mục views 5.2.4 Thư mục assets 10 10 10 12 13 13 13 14 15 15 15 16 17 18 18 19 20 22 22 23 23 23 23 24 Tìm hiểu Docker Ruby On Rails 5.2.5 Thư mục javascripts 5.3 Thư mục config 5.4 Thư mục db III DOCKER Sự đời Docker: Khái niệm Docker: 24 24 24 25 25 26 2.1 Quá trình hình thành: 2.2 Docker gì? 26 28 Chức năng, vai trò Docker 30 3.1 Chức năng: 3.2 Vai trò: 30 30 Các khái niệm 31 4.1 Docker Engine 4.1.1 Image DockerFile 4.1.2 Container 4.1.2 Network 4.1.2 Volume 4.2 Công cụ phân tán (Distribution tools) 4.2.1 Docker Registry: 4.2.2 Docker Hub Kiến trúc Docker: Các câu lệnh Docker: 5.1 Image 5.1.1 Liệt kê image có hệ thống 5.1.2 Tải image hệ thống 5.1.3 Xóa image khỏi hệ thống 5.1.4 Lưu image thành file hệ thống máy host 5.1.5 Ép xóa image dù chạy container 5.1.6 Kiểm tra lịch sử hình thành nên image 5.1.7 Tra cứu thơng tin image 5.2 Container 5.2.1 Kiểm tra container chạy 5.2.2 Chạy container 5.2.3 Kiểm tra container không chạy 31 31 32 33 35 35 35 35 36 36 39 39 39 39 39 39 39 39 39 40 40 40 40 Tìm hiểu Docker Ruby On Rails 5.2.4 Khởi chạy container dừng 5.2.5 Truy cập vào container chạy 5.2.6 Ép dừng container 5.2.7 Đặt tên hostname cho container 5.2.8 Xóa container 5.2.9 Xóa container chạy 5.2.10 Cài số gói phần mềm container 5.2.11 Lưu container thành image 5.2.12 Tra cứu thông tin container 5.2.13 Kiểm tra lỗi bên container 5.2.14 Lấy N-dòng log cuối 5.2.15 Lấy log container chạy 5.2.16 Giám sát tài nguyên container sử dụng 5.4 Network 5.4.1 Tải busybox 5.4.2 Kiểm tra có mạng 5.4.3 Kiểm tra thơng tin network 5.4.4 Chạy container ánh xạ cổng mạng docker 5.4.5 Tạo mạng cầu 5.4.6 Xóa mạng cầu 5.4.5 Chạy container truy cập mạng network 5.5 Volume 5.5.1 Kiểm tra sử dụng ổ đĩa 5.5.2 Tạo ổ đĩa 5.5.3 Kiểm tra thông tin ổ đĩa 5.5.4 Xóa ổ đĩa 5.5.5 Gán ổ đĩa vào container 5.5.6 Tạo ổ đĩa mà ánh xạ đến thư mục cụ thể máy host 5.4 DockerFile 5.4.1 Tạo Dockerfile docker 5.4.2 Từ Dockerfile phát sinh image tương ứng 5.5 Docker Compose 5.5.1 Tạo file Docker Compose 5.5.2 Thực thi file Docker Compose IV DOCKER SWARM 40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 43 43 43 43 43 43 43 44 45 Tìm hiểu Docker Ruby On Rails Điều phối container (Container orchestration) 1.1 Docker Machine 1.2 Docker Compose 1.3 Công cụ điều phối Giới thiệu Docker Swarm Thành phần Docker Swarm 3.1 Swarm (Cluster) 3.2 Node 3.2.1 Manager (Node) 3.2.2 Worker (Node) Service Task Docker Swarm 4.1 Service 4.2 Task Docker Stack Tính bật 6.1 Tính mở rộng (Scaling): 6.2 Desired state reconciliation: 6.3 Multi-host networking: 6.4 Service discovery: 6.5 Load balancing: 6.6 Bảo mật 6.7 Rolling updates 6.8 Khả chịu lỗi Network Docker 7.1 Mạng Local - Bridge 7.2 Mạng Overlay 7.2.1 Mạng Ingress (Overlay mặc định) 7.2.2 Tự cấu hình mạng Overlay 45 45 45 46 48 49 50 50 50 51 51 51 52 53 53 53 54 54 54 55 55 55 55 57 58 59 61 62 V XÂY DỰNG ỨNG DỤNG MINH HỌA Giới thiệu ứng dụng minh họa 1.1 Bài toán thực tế 1.2 Hướng giải 1.3 Tổng quan kiến trúc ứng dụng phát triển Product Requirement Document 2.1 Objective 63 63 63 63 64 65 65 Tìm hiểu Docker Ruby On Rails 2.2 Release 2.3 Feature 2.3.1 Đặt phòng cho khách lẻ 2.3.2 Đặt phịng cho khách đồn 2.3.3 Gán phịng cho khách đồn 2.3.4 Nhận phòng cho khách lẻ 2.3.5 Nhận phòng cho khách đồn 2.3.6 Trả phịng cho khách lẻ 2.3.7 Trả phịng cho khách đồn 2.4 Analytics - Phân tích 2.5 Future work - Hướng phát triển User flow and design 3.1 Phân hệ lễ tân 3.1.1 Sơ đồ phòng 3.1.2 Khách lẻ 3.1.3 Khách đoàn 3.2 Phân hệ dịch vụ 3.3 Cấu hình 3.3.1 Phịng 3.3.2 Loại phịng 3.3.3 Nhân viên 3.3.4 Khách hàng 3.3.5 Dịch vụ 66 68 68 69 71 72 73 75 76 77 77 79 79 79 80 80 81 82 82 83 84 85 86 V HƯỚNG DẪN ĐÓNG GÓI ỨNG DỤNG Kiến trúc Tạo Dockerfile Tạo docker-compose.yml Entrypoint để run scripts 6.Truyền biến môi trường Build Docker-compose 87 87 88 89 91 92 93 VI HƯỚNG DẪN SCALE UP BẰNG DOCKER SWARM Chuẩn bị môi trường: Sử dụng CLI 2.1 Khởi tạo Docker Swarm 94 94 95 95 Tìm hiểu Docker Ruby On Rails 2.2 Tạo service: 2.3 Sự điều phối node manager: 2.4 Scale up Sử dụng GUI 3.1 Cài đặt SwarmPit node manager 3.2 Truy cập vào Play With Docker 3.3 Làm quen với Play With Docker 3.3.1 Tạo Node 3.3.2 Sử dụng Editor 3.3.3 Sử dụng CLI 3.4 Khởi chạy SwarmPit 3.5 Task 3.6 Service 3.6.1 Tạo Service 3.5.2 Chỉnh sửa Service 3.7 Stack 3.7.1 Tạo Stack 3.7.2 Chỉnh sửa Stack 96 97 98 100 101 101 104 104 106 109 110 110 111 112 114 114 115 116 VII KẾT QUẢ ĐẠT ĐƯỢC VÀ HƯỚNG PHÁT TRIỂN Kết đạt được: 1.1 Ưu điểm 1.2 Nhược điểm Hướng phát triển: 118 118 118 118 118 TÀI LIỆU THAM KHẢO 118 Tìm hiểu Docker Ruby On Rails I GIỚI THIỆU CHUNG Thông tin nhóm Nhóm gồm thành viên: - Thành viên : Nguyễn Đắc Thiên Ngân MSSV : 18520109 - Lớp : PMCL2018.1 Email : 18520109@gm.uit.edu.vn Thành viên : Ung Bảo Tiên MSSV : 18520168 Lớp : PMCL2018.1 Email : 18520168@gm.uit.edu.vn Tổng quan đề tài: 2.1 Giới thiệu đề tài Đề tài: Tìm hiểu Docker xây dựng ứng dụng Công nghệ phát triển, hàng loạt ứng dụng tạo ra, nhiều ngơn ngữ lập trình hình thành nhằm đáp ứng nhu cầu cụ thể Những ngơn ngữ lập trình khác lại u cầu phần mềm hỗ trợ, gói thư viện môi trường khác Mỗi lần cài đặt, tốn nhiều cơng sức thời gian Ví dụ làm việc lập trình Android, muốn làm việc với hệ điều hành iOS phải cài thêm OS để triển khai ứng dụng Python, Java, Scala… phải tiến hành cài đặt hàng tá mơi trường Đó chưa kể xung đột phần mềm, port… vấn đề thật kinh khủng xảy xung đột phần mềm làm ảnh hưởng đến hoạt động ứng dụng hoạt động máy tính Chính Docker đời, triển khai nơi đâu không phụ thuộc vào OS sở hạ tầng, thời gian khởi động cực nhanh nhiều người phát Tìm hiểu Docker Ruby On Rails triển dự án không sợ sai khác mơi trường Do nhóm chúng em lựa chọn Docker để hỗ trợ đóng gói mở rộng phần mềm Về xây dựng ứng dụng, chúng em nhận thấy có web framework hỗ trợ lập trình viên việc phát triển phần mềm web cách nhanh có thể, Ruby On Rails Từ đó, nhóm chúng em định xây dựng ứng dụng Quản lý khách sạn Ruby On Rails Phần mềm gồm tính năng: Đặt phịng cho khách lẻ, khách đồn Nhận phịng cho khách lẻ, khách đồn Gán phịng tự động cho khách đồn Trả phịng cho khách lẻ, khách đồn Theo dõi trạng thái phịng màu sắc Hỗ trợ việc chỉnh sửa cấu quản lý nhân viên, quản lý khách hàng, giá phịng, phịng, 2.2 Phạm vi nghiên cứu Nhóm tập trung nghiên cứu tìm hiểu Docker, Docker Swarm Ruby On Rails áp dụng nghiên cứu vào việc xây dựng ứng dụng minh họa để giúp có nhìn tổng quan hiểu sâu 2.3 Nội dung nghiên cứu Tiến hành nghiên cứu chi tiết thành phần kiến trúc Docker, cách thức hoạt động làm quen với câu lệnh Docker Docker Swarm Kèm theo xây dựng ứng dụng minh họa Ruby On Rails 2.4 Kết hướng tới: - Phần mềm Quản lý khách sạn xây dựng Ruby On Rails - Sử dụng Docker để đóng gói hỗ trợ mở rộng phần mềm - Mở rộng việc triển khai điều phối Docker Swarm Swarm Pit Tìm hiểu Docker Ruby On Rails Cơng cụ sử dụng: - Đóng gói ứng dụng Docker - Xây dựng ứng dụng Ruby On Rails - Xây dựng sở liệu PostgreSQL - Mở rộng việc triển khai Docker Swarm SwarmPit II RUBY ON RAILS Khái niệm Ruby on Rails Ruby on Rails (RoR) web framework viết ngôn ngữ Ruby tất ứng dụng Rails viết Ruby Ruby on Rails tạo để hỗ trợ lập trình viên việc phát triển phần mềm web cách nhanh Tại lại chọn Ruby on Rails? Ruby on Rails cung cấp quy trình phát triển nhanh chóng, yếu tố mang lại lợi thuận lợi sử dụng Ruby ngôn ngữ script, định nghĩa kiểu động ngơn ngữ hướng đối tượng, thiết kế với cú pháp sáng, tạo cảm giác dễ đọc, viết code ngắn gọn người dùng VD: - Không cần dấu chấm phẩy kết thúc câu lệnh - Không cần dấu ngoặc đơn khai báo phương thức - Có đoạn code chí viết giống việc viết tiếng anh Tìm hiểu Docker Ruby On Rails 3.3.2 Sử dụng Editor Hệ thống hỗ trợ việc chỉnh sửa file dễ dàng (Thay phải xài vim bên CLI) Bạn ấn vào nút Editor, hệ thống hiển thị cửa sổ mới: Lúc cấu trúc thư mục có thư mục root Có nhược điểm bạn tạo folder / file Editor, bạn edit file thơi Nên muốn thêm file máy ảo, chạy lệnh node manager: touch VD muốn tạo file docker-compose.yml: touch docker-compose.yml Tìm hiểu Docker Ruby On Rails Lúc mở Editor nhấn vào mục docker-compose.yml ta tạo Mình copy file docker-compose.yml mẫu vào: version: '3' services: db: image: postgres:10 environment: - POSTGRES_DB=my_app_development - POSTGRES_USER=postgres - POSTGRES_PASSWORD=secret123 Tìm hiểu Docker Ruby On Rails web: image: cblunt/rails-basic-app environment: DATABASE_URL: postgres://postgres:secret123@db:5432/my_app_development RAILS_ENV: development REDIS_URL: redis://redis:6379 ports: - '3000:3000' depends_on: - db worker: image: cblunt/rails-basic-app environment: DATABASE_URL: postgres://postgres:secret123@db:5432/my_app_development RAILS_ENV: development REDIS_URL: redis://redis:6379 command: bundle exec sidekiq depends_on: - db - redis redis: image: redis Sau ấn Save, hiển thị câu “File saved” bên góc phải, bạn lưu thành cơng Lúc bạn nhấn tắt cửa sổ Tìm hiểu Docker Ruby On Rails 3.3.3 Sử dụng CLI Lúc bạn nhìn trước bên hình, chạy lệnh docker stack để khởi tạo stack dựa file docker-compose import Và sau cạnh nút Open Port hiển thị thêm nút “3000” Đây nơi ta truy cập vào port mà ta host Tìm hiểu Docker Ruby On Rails 3.4 Khởi chạy SwarmPit Ở hình này, bạn cần quan tâm nút 888 Đây port mà swarmpit host Khi nhấn vào, trang web chuyển hướng bạn đến giao diện đăng ký tài khoản admin (Đôi lúc trang web chạy được, bạn bình tĩnh đợi nhé) Hãy ghi username password bạn muốn (Lưu ý mật phải từ ký tự) Sau đăng ký, tiếp tục nhấn nút đăng nhập bạn chuyển hướng đến trang giao diện thao tác bên dưới: Tìm hiểu Docker Ruby On Rails 3.5 Task Đây nơi hiển thị task chạy Tìm hiểu Docker Ruby On Rails 3.6 Service 3.6.1 Tạo Service Ở bên phải hình, có nút New Service, nhấn vào, bạn lựa chọn repo Docker Hub ta mong muốn Tìm hiểu Docker Ruby On Rails Hãy điền mục tương ứng tag repo để image cần chọn Điền tên service muốn tạo, điều số lượng tasks ta muốn tạo (Replicas) Sau nhấn nút Deploy, hệ thống hiển thị thông báo tạo service thành công chuyển hướng đến trang hiển thị thơng tin service tạo Tìm hiểu Docker Ruby On Rails 3.5.2 Chỉnh sửa Service Ta tăng số lượng tasks service cách vào mục Edit Service điều chỉnh số lượng Replicas Tìm hiểu Docker Ruby On Rails 3.7 Stack 3.7.1 Tạo Stack Ta điền mục tên Stack viết theo mẫu docker-compose để định nghĩa services số lượng service ta mong muốn Tìm hiểu Docker Ruby On Rails Khi nhấn Deploy, ta thấy thông báo deploy Stack thành công trang chuyển hướng đến trang hiển thị thông tin Stack 3.7.2 Chỉnh sửa Stack Nếu ta muốn thay đổi thơng số Stack, ta ấn Edit Stack để điều chỉnh theo ta mong muốn Tìm hiểu Docker Ruby On Rails Tìm hiểu Docker Ruby On Rails VII KẾT QUẢ ĐẠT ĐƯỢC VÀ HƯỚNG PHÁT TRIỂN Kết đạt được: 1.1 Ưu điểm - Học sử dụng công nghệ Ruby On Rails kiến trúc MVC Client-Server - Hiểu vận dụng Docker Docker Swarm - Sản phẩm minh họa giao diện trực quan, dễ nhìn Cài đặt hồn chỉnh số chức cần thiết 1.2 Nhược điểm - Các tính ứng dụng minh họa chưa tối ưu hoàn thiện - Demo SwarmPit phụ thuộc vào PlayWithDocker nên bị hạn chế thời gian tiếng sử dụng Hướng phát triển: - Sẽ deploy Heroku để khơng chạy local máy người mà cịn truy cập từ Internet - Tìm hiểu thêm scale up Kubernetes để hoàn thiện hệ thống scale up Tìm hiểu Docker Ruby On Rails TÀI LIỆU THAM KHẢO [1] Duong Hoai Nam, “Tìm hiểu Docker số khái niệm bản,” Viblo, Nov 19, 2020 https://viblo.asia/p/tim-hieu-ve-docker-va-mot-so-khai-niem-co-ban-GrLZD3OOKk0 (accessed Jun 26, 2021) [2] No Naem, “Sơ lược qua kiến trúc hệ thống Docker.,” Viblo, Feb 15, 2019 https://viblo.asia/p/so-luoc-qua-ve-kien-truc-he-thong-cua-docker-07LKX2vplV4 (accessed Jun 26, 2021) [3] Tran Son, “DOCKER LÀ GÌ? - Market Enterprise Việt Nam Docker,” Market Enterprise Việt Nam, Jun 10, 2020 https://www.marketenterprise.vn/blog/docker-la-gi.html (accessed Jun 26, 2021) [4] “Docker - Phần 1- Giới thiệu tổng quan Docker,” Apr 13, 2021 https://hocchudong.com/phan-1-gioi-thieu-tong-quan-ve-docker/ (accessed Jun 26, 2021) [5] Tuan Anh Le, “Docker Swarm,” Kiến trúc Microservices https://www.microservicesvn.com/docs/container/swarm-three.html (accessed Jun 26, 2021) [6] Le Thi Ngoc Tram, “Tìm hiểu chi tiết Docker Swarm (Phần 1).” https://viblo.asia/p/tim-hieu-chi-tiet-ve-docker-swarm-phan-1-eW65GW795DO (accessed Jun 26, 2021) [7] Quân Phạm, “Docker Swarm - Kiến thức Docker.” https://medium.com/@phamducquan/docker-swarm-ki%E1%BA%BFn-th%E1%BB %A9c-v%E1%BB%81-docker-ph%E1%BA%A7n-4-e698e99b92f8 (accessed Jun 26, 2021) [8] R D, “Docker swarm UI: Swarmpit,” Medium, Feb 27, https://raghavendar-d.medium.com/docker-swarm-ui-swarmpit-d53bb21e528 (accessed Jun 26, 2021) 2020 Tìm hiểu Docker Ruby On Rails [9] “Rails on Docker: How to Run Your Rails App on Docker Swarm,” Plymouth Software https://www.plymouthsoftware.com/articles/rails-on-docker-run-your-rails-app-on-do cker-swarm (accessed Jun 26, 2021) [10] swarmpit/swarmpit swarmpit, 2021 Accessed: Jun 26, 2021 [Online] Available: https://github.com/swarmpit/swarmpit ... 10 II RUBY ON RAILS Khái niệm Ruby on Rails Tại lại chọn Ruby on Rails? Kiến trúc Ruby On Rails 3.1 Tầng Model 3.3 Tầng View 3.3 Tầng Controller 3.4 Ví dụ minh họa Một số khái niệm Ruby On Rails. .. dụng Ruby On Rails - Xây dựng sở liệu PostgreSQL - Mở rộng việc triển khai Docker Swarm SwarmPit II RUBY ON RAILS Khái niệm Ruby on Rails Ruby on Rails (RoR) web framework viết ngôn ngữ Ruby. .. Compose $ up Tìm hiểu Docker Ruby On Rails IV DOCKER SWARM Điều phối container (Container orchestration) 1.1 Docker Machine Docker machine công cụ giúp dễ dàng tạo Docker Engine

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

Từ khóa liên quan

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

Tài liệu liên quan