Trong bài viết này, chúng tôi sẽ tạo một hình ảnh vùng chứa cho ứng dụng Symfony của bạn bằng Swoole Runtime hiệu suất cao và tự động triển khai hình ảnh này lên Docker Hub
Tại sao lại là Hình ảnh vùng chứa?
Các thùng chứa đặc biệt phổ biến vì chúng mang lại nhiều lợi thế hơn so với các máy ảo [VM]. Về cơ bản, máy ảo chứa các bản sao hoàn chỉnh của một hệ điều hành mạnh mẽ, bản thân ứng dụng, tất cả các tệp nhị phân và thư viện cần thiết. Nhưng hình ảnh Vùng chứa chỉ lưu trữ và chạy các tệp nhị phân và thư viện bạn cần. Bằng cách này, bạn chỉ sử dụng các tài nguyên cần thiết tối thiểu trong khi mở rộng quy mô ứng dụng của mình
https. //www. người đóng tàu. com/resources/what-container/
Mặt khác, cài đặt, quản lý và mở rộng máy ảo là một hoạt động tốn kém về thời gian và tiền bạc. Các thùng chứa dễ cài đặt, quản lý và mở rộng quy mô tốt hơn so với các máy ảo. Các công cụ như Kubernetes và Docker Swarm có sẵn để mở rộng quy mô
Một ưu điểm khác của hình ảnh vùng chứa xuất hiện trong quá trình phát triển và thử nghiệm. PHP có nhiều tính năng từ các tiện ích mở rộng của nó. Việc định cấu hình và cài đặt các tiện ích mở rộng này giúp tăng đáng kể quá trình chuẩn bị cho môi trường phát triển hoạt động. Ngay cả khi chúng tôi nghĩ rằng bạn đã giải quyết các trường hợp như vậy, ngay cả sự khác biệt về hệ điều hành cũng có thể ảnh hưởng đến đầu ra. Trong môi trường phát triển và CI của bạn [Gitlab Runner, Github Actions]. Hình ảnh vùng chứa được định cấu hình với các thuộc tính giống như môi trường sản xuất cho phép bạn giải quyết hầu hết các sự cố trước khi chúng xảy ra
Tại sao Alpine?Alpine mô tả chính nó như là
Bé nhỏ. Giản dị. Chắc chắn. Alpine Linux là một bản phân phối Linux nhẹ, hướng đến bảo mật dựa trên musl libc và busybox
Docker mô tả Alpine là
Chúng tôi đề xuất hình ảnh Alpine vì nó được kiểm soát chặt chẽ và có kích thước nhỏ [hiện dưới 6 MB], trong khi vẫn là một bản phân phối Linux đầy đủ
Hình ảnh vùng chứa sử dụng Ubuntu tạo ra hiệu suất thấp hơn do có quá nhiều thành phần trong đó. Nếu bạn đang phát triển một dự án tập trung vào bảo mật và chuyên nghiệp hơn, bạn có thể xem Redhat Universal Base Image trả phí. Chúng tôi sẽ tiếp tục sử dụng Alpine trong bài viết này
Tại sao Swoole?PHP-FPM, đã được sử dụng cho PHP trong nhiều năm, không còn có thể đáp ứng các yêu cầu ngày nay như hiệu suất và khả năng mở rộng. Mặt khác, Swoole, là một trong những thời gian chạy tốt nhất cho các ứng dụng PHP với những đổi mới như hiệu suất cao, dễ dàng mở rộng quy mô và chỉ chạy lại các mã cần thiết trong quá trình xử lý yêu cầu. Để tìm hiểu thêm về Swoole, bạn có thể đọc bài viết sau
Hãy giải quyết PHP Swoole một cách trang trọng
Tôi muốn nói về Swoole trong bài viết này nhưng nó sẽ không đề cập đến các quy trình rườm rà như cài đặt…
Trung bình. com
Cài đặt
Như mình đã đề cập ở đầu bài, chúng ta sẽ tạo container image tự động bằng CI tools. Tuy nhiên, bạn cần Container Runtime [Docker, Podman, v.v. ] để xây dựng và triển khai hình ảnh bạn đã phát triển trên máy tính của riêng mình cho mục đích thử nghiệm. Bạn có thể xem lại bài viết sau để cài đặt Docker theo hệ điều hành của mình
Cài đặt công cụ Docker
Docker Desktop cho Linux Docker Desktop giúp bạn xây dựng, chia sẻ và chạy các bộ chứa một cách dễ dàng trên Mac và Windows giống như…
tài liệu. người đóng tàu. com
Hình ảnh vùng chứa
Chúng tôi sẽ tạo 2 Hình ảnh vùng chứa;
- Hình ảnh bộ chứa cơ sở PHP
- Hình ảnh vùng chứa ứng dụng
Hình ảnh bộ chứa cơ sở PHP
Chúng tôi sẽ sử dụng hình ảnh này để tạo hình ảnh cơ sở cho nhiều dự án. Chúng tôi sẽ tạo hình ảnh này vì sẽ lãng phí thời gian để xây dựng đi xây dựng lại các tiện ích mở rộng cần thiết cho từng dự án. Bằng cách này, bạn có thể dễ dàng thay đổi phiên bản PHP trong ứng dụng của mình. Trong bài viết này, chúng ta sẽ tiếp tục với PHP 8. 1
DockerfileĐể tạo hình ảnh vùng chứa, bạn phải có một
composer require runtime/swoole
3. Mỗi hướng dẫn tạo một lớp. Nếu nó không thay đổi, nó sẽ không được biên dịch lạiMỗi hướng dẫn tạo một lớp
composer require runtime/swoole
4 tạo một lớp từ hình ảnh Dockercomposer require runtime/swoole
5- Hướng dẫn
composer require runtime/swoole
6 sẽ thực thi bất kỳ lệnh nào trong một lớp mới trên cùng của hình ảnh hiện tại và cam kết kết quả - Lệnh
composer require runtime/swoole
7 sao chép các tệp hoặc thư mục mới từcomposer require runtime/swoole
0 và thêm chúng vào hệ thống tệp của bộ chứa tại đường dẫncomposer require runtime/swoole
1 - Lệnh
composer require runtime/swoole
2 đặt biến môi trườngcomposer require runtime/swoole
3 thành giá trịcomposer require runtime/swoole
4 - Lệnh
composer require runtime/swoole
5 thiết lập thư mục làm việc cho bất kỳ lệnhcomposer require runtime/swoole
6,composer require runtime/swoole
7,composer require runtime/swoole
8,composer require runtime/swoole
7 vàdocker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
0 nào theo sau nó trongcomposer require runtime/swoole
3 - Hướng dẫn
docker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
2 thông báo cho Docker rằng bộ chứa lắng nghe trên các cổng mạng được chỉ định khi chạy composer require runtime/swoole
8 chỉ định lệnh nào sẽ chạy trong vùng chứa
Bạn có thể tùy chỉnh file Dockerfile theo ý muốn của mình. Trong ví dụ này, chúng tôi sẽ sử dụng Trình giám sát để xử lý Swoole. Ngoài ra, nếu dự án của bạn có cron, chúng tôi sẽ sử dụng Giám sát để xử lý cron. Đây là lý do tại sao chúng tôi sử dụng Trình giám sát là Trình giám sát sẽ tự động khởi động lại ứng dụng của bạn khi có sự cố và ứng dụng của bạn rơi vào trạng thái hoảng loạn
Tệp điểm vào như sau
container bắt đầungười giám sát. d/app-swoole. ban đầungười giám sát. d/ứng dụng-cron. ban đầuXây dựng
Để tạo hình ảnh vùng chứa, chỉ cần chạy lệnh sau terminal trong thư mục chứa dự án
composer require runtime/swoole
1- Tên người dùng trung tâm Docker. thecaliskan
- Tên vùng chứa. symfony-swoole-docker
- Tên thẻ [như chi nhánh]. muộn nhất
Khi chạy lệnh
docker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
4 để kiểm tra ảnh đã tạo, nếu thấy xuất hiện như trên là đã tạo thành công. Chúng tôi cần một dịch vụ đăng ký vùng chứa để truy cập hình ảnh vùng chứa này từ mọi nơi. Trong bài viết này, chúng tôi sẽ sử dụng Docker Hub. Chúng tôi sẽ sử dụng Github Actions để tự động xây dựng và xuất bản. Bạn có thể lưu trữ hình ảnh vùng chứa riêng tư và công khai của mình trên Docker HubTự động xây dựng và xuất bản
github/quy trình công việc/ci. ymlBạn có thể nhận được mã thông báo sau khi tạo người dùng mới trên Docker Hub. Bạn cần thêm mã thông báo này làm biến môi trường trong phần bí mật của trang cài đặt dự án github của bạn. Tham khảo tài liệu dưới đây để biết thêm thông tin chi tiết
Xây dựng và đẩy hình ảnh Docker - GitHub Marketplace
GitHub Action để xây dựng và đẩy hình ảnh Docker bằng Buildx với sự hỗ trợ đầy đủ các tính năng do Moby BuildKit cung cấp…
github. com
Hình ảnh vùng chứa ứng dụng
Bây giờ mọi thứ đã sẵn sàng để tạo container image của dự án. Trong khi chúng tôi tạo hình ảnh vùng chứa này, chúng tôi sẽ tạo 3 lớp
composer require runtime/swoole
3hướng dẫn xây dựng
- Bước đầu tiên, tạo một lớp từ hình ảnh Docker
docker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
6 - Bước thứ hai, chúng tôi sẽ sao chép các tệp dự án vào hình ảnh
- Bước thứ ba, chúng tôi sẽ cài đặt các gói soạn nhạc
Thời gian chạy len
Chúng ta sẽ sử dụng thời gian chạy chính thức của symfony swoole [
docker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
7] để thêm Thời gian chạy Swoole vào dự áncomposer require runtime/swoole
Sau khi cài đặt hoàn tất, bước cuối cùng để kích hoạt swoole là thêm phần sau vào /public/index. tập tin php. Vì biến môi trường
docker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
8 được xác định bên trong ảnh bộ chứa docker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
6, Thời gian chạy Swoole sẽ không chạy khi bạn chạy dự án bên ngoài ảnh bộ chứa. Kiểm tra liên kết để biết thêm thông tin chi tiết về cài đặt cấu hìnhcông khai/chỉ mục. phpđịnh kỳ
Nếu bạn đang sử dụng cron trong dự án, bạn có thể thêm nó vào tệp
composer require runtime/swoole
80 như saucrontabTự động xây dựng và xuất bản
github/quy trình công việc/ci. ymlChúng tôi sẽ sử dụng tệp
composer require runtime/swoole
81 được sử dụng trong Hình ảnh bộ chứa cơ sở PHP. Chúng tôi sẽ thay thế tên hình ảnh vùng chứa ở dưới cùng bằng tên của dự án. Sau đó, hình ảnh vùng chứa sẽ sẵn sàng để sử dụngChạy hình ảnh vùng chứa
Bạn có thể chạy hình ảnh vùng chứa mà bạn đã tạo bằng đoạn mã sau. Để chạy hình ảnh vùng chứa bằng một nút, bạn có thể áp dụng cách sau. Trong bài viết tiếp theo, tôi sẽ giải thích cách chạy multi-node và xuất bản với máy chủ proxy
Tài liệu tham khảo chạy docker
docker run -itd --rm --name symfony-example -p 9000:80 --env-file .env thecaliskan/symfony-swoole-docker-example
Chạy bộ chứa Docker
Kiểm tra máy chủ
Bạn có thể dừng container bằng đoạn mã sau
composer require runtime/swoole
8Hình ảnh vùng chứa điểm chuẩnHình ảnh vùng chứa
Việc sử dụng tài nguyên khi hình ảnh vùng chứa chạy với 100 công nhân được mở lần đầu tiên như sau
Thống kê vùng chứa trước khi kiểm tra
Một điểm cuối đã được thiết lập để trả về một phản hồi JSON đơn giản. Chúng tôi sẽ xem xét hiệu suất và mức tiêu thụ tài nguyên của nó bằng cách gửi 100 yêu cầu đồng thời, tổng cộng là 10K yêu cầu
src/Trình điều khiển/Trình điều khiển gia đình. phpcomposer require runtime/swoole
2kết quả điểm chuẩn
Thống kê container sau khi kiểm tra
Phần kết luận
Trong bài viết này, chúng ta đã học cách biến ứng dụng Symfony của bạn thành một image bộ chứa di động với thời gian chạy Swoole của nó. Chúng tôi đã cải thiện hiệu suất của ứng dụng Symfony với Swoole Runtime. Chúng tôi có thể xử lý 10 nghìn yêu cầu trong 1. 182 giây không lỗi. Điều này có nghĩa là gần như thời gian phản hồi tệp tĩnh. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu cách phục vụ hình ảnh vùng chứa này với nhiều nút với các dịch vụ như máy chủ proxy, postgresql và redis