Chạy docker-php-ext-install pdo_mysql mbstring zip exif pcntl
Mặc dù ngày càng nhận được nhiều lời gièm pha và đối thủ cạnh tranh, PHP vẫn chống lại cái chết. Theo thống kê của W3, gần 78,1% trang web sử dụng PHP làm ngôn ngữ máy chủ Show
Do đó, với tư cách là DevOps, rất có thể chúng ta sẽ thấy mình đang “dockerizing” một ứng dụng bằng ngôn ngữ này vào lúc này hay lúc khác Trong mục này, chúng ta sẽ khám phá cách PHP hoạt động và các bước cần thiết để triển khai kiến trúc microservice. Chúng tôi đang lấy ví dụ về một ứng dụng đơn giản sử dụng Laravel framework Chúng ta sẽ bắt đầu với phần tổng quan về kiến trúc mà chúng ta muốn cập bến, tiếp theo là đánh giá cấu trúc thư mục của một dự án Laravel. Cuối cùng, chúng tôi sẽ thiết lập dockerfile và dockercompose để đánh giá cao kết quả điều kiện tiên quyếtVừa học vừa làm là tốt nhất. Vì vậy, trong trường hợp bạn không thiết lập dockerization PHP, bạn nên cài đặt các tài nguyên sau khi đọc bài đăng này #Docker #Docker soạn #lặn #mã ứng dụng Cấu trúcTrước khi tìm hiểu các đặc điểm riêng của dự án của chúng ta, điều quan trọng là phải hiểu cấu trúc tiêu chuẩn của các dự án Laravel Để cập nhật ứng dụng của chúng tôi, hiện tại không cần thiết phải đi vào chi tiết, vì vậy tôi sẽ chỉ đề cập đến các thư mục và tệp mà chúng tôi sẽ sử dụng nhiều nhất
CÁC BIẾN SỐ MÔI TRƯỜNGCác ứng dụng phát triển các cấu hình cụ thể bắt đầu từ các biến môi trường được giữ trong một. tập tin env
Một. tệp env có thể có các biến khác nhau tùy thuộc vào các thành phần được sử dụng, trong blogpost này, chúng tôi sẽ đặc biệt làm việc với các trường sau
Khi chúng tôi tiếp tục với quá trình cập cảng, các giá trị tương ứng sẽ được hoàn thành Ngành kiến trúcKhi chúng tôi neo đậu, điều cơ bản là xác định các dịch vụ siêu nhỏ và cách chúng sẽ liên kết với nhau cân nhắc
Giới thiệu về PHP, máy chủ và CGITrước khi tiếp tục, tôi sẽ sử dụng không gian này để làm rõ một số chủ đề thường gây nhầm lẫn
Vì các máy chủ (NginX, Apache, v.v.) không thể thực thi mã PHP một cách tự nhiên, nên nó nhận được các yêu cầu HTTP sau đó chuyển đến PHP-FPM để được thực thi và cuối cùng truyền đạt kết quả Tại sao chúng ta sử dụng NginX? Artisan không cung cấp máy chủ của riêng mình sao?Những người đã chơi đùa một chút với mã PHP có thể đã sử dụng Artisan. phục vụ làm máy chủ. Tuy nhiên, nó chỉ là một máy chủ phát triển và nó không được khuyến nghị trong môi trường sản xuất. Nó hữu ích cho lưu lượng truy cập tối thiểu và không cung cấp các tùy chọn cấu hình ngoài máy chủ và cổng. Nếu cần chuyển hướng hoặc truy cập cấu hình đầu, artisan. phục vụ sẽ không thể thực hiện được. Tuy nhiên, một vấn đề khác mà máy chủ tích hợp có thể xuất hiện là cùng một dịch vụ siêu nhỏ sẽ nhận và xử lý các yêu cầu HTTP, diễn giải mã PHP và đưa ra câu trả lời. Nó không phải là một cấu trúc đặc biệt hiệu quả Những điểm này và thực tế là chúng tôi hướng đến việc tạo ra một dự án dễ dàng chuyển sang môi trường hiệu quả, chúng tôi chọn phân biệt giữa máy chủ và ứng dụng Vậy…còn Apache thì sao?Chúng tôi thực sự có thể sử dụng bất kỳ máy chủ nào khác cho dự án. Tuy nhiên, NginX là một bổ sung tuyệt vời cho PHP NginX là một máy chủ hiệu suất cao, tiêu tốn ít bộ nhớ, dễ cấu hình, đó là lý do tại sao tác giả ưu tiên nó hơn nhiều máy chủ khác trong bài viết này Dù bằng cách nào, cấu trúc microservice cho phép chúng tôi hoán đổi bất kỳ máy chủ nào chúng tôi ưu tiên cho NginX nếu chúng tôi chọn Hãy DockerizeĐã nêu phần trước, hãy bắt đầu với phần thú vị. cập bến ứng dụng Dockerization sẽ sử dụng bản dựng nhiều giai đoạn. Trong giai đoạn đầu tiên, các gói phụ thuộc sẽ được tạo và trong giai đoạn thứ hai, chúng tôi sẽ sao chép kết quả của gói trước và cài đặt các thành phần khác Giai đoạn 1. nhà soạn nhạcNhà soạn nhạc sử dụng nhà soạn nhạc. lock làm hướng dẫn cài đặt gói nào. Các gói được cài đặt trên thư mục vendor , đây là thư mục chúng ta nên sao chép trong bước tiếp theo. Phiên bản trình soạn thảo sẽ phụ thuộc vào phiên bản PHP của ứng dụng của chúng tôi. Trong trường hợp cụ thể này, đó là nhà soạn nhạc 2. 1. 5 Để bắt đầu, chỉ có nhà soạn nhạc. json là cần thiết, nhưng các tệp khác có thể được yêu cầu cho các phần phụ thuộc khác nhau. Để tiếp tục với ví dụ của chúng tôi, chúng tôi cũng nên sao chép thư mục cơ sở dữ liệu vì một sơ đồ lớp. cơ sở dữ liệu được định nghĩa trên composer. tệp json . Sau đó, quá trình cài đặt nhà soạn nhạc được thực hiện nhà soạn nhạc. khóa vs nhà soạn nhạc. json. Sự hiện diện của cả hai tệp này có thể gây nhầm lẫn. Cân nhắc. nhà soạn nhạc. json là tệp mà nhà soạn nhạc sẽ đọc để cài đặt các phụ thuộc. Nó hoạt động như một hướng dẫn "chung", các ký tự đại diện có thể được đưa vào khi đến lúc xác định các phiên bản của gói. Vì vậy, tệp này cho biết gói nào PHẢI được cài đặt, không phải gói nào ĐÃ thực sự được cài đặt. Mặt khác, nhà soạn nhạc. lock được tạo bởi nhà soạn nhạc sau khi thực hiện cài đặt. Tệp này làm rõ những gói nào đã được cài đặt, cũng như các phiên bản của nó. Nó có thể được đưa vào dockerfile hoặc không, nhưng chúng tôi khuyên bạn nên đưa nó vào để đảm bảo các phiên bản của các phụ thuộc đã cài đặt
giai đoạn 2. ấu trùngSử dụng hình ảnh PHP với alpine linux , chúng tôi sẽ cài đặt các phụ thuộc cần thiết và sao chép các gói được cài đặt bởi nhà soạn nhạc trong giai đoạn trước. Chúng tôi cũng sẽ sao chép tệp cấu hình php (nếu có) và mã ứng dụng.
Tại thời điểm này, chúng ta phải định cấu hình chính xác khoảng trống. Chúng tôi sẽ tạo một người dùng mới, sẽ có các tệp cần thiết để nâng cấp dịch vụ
Thay thếCác ứng dụng có thể có nhiều tệp và kích thước của hình ảnh có thể tăng lên đáng kể nếu chúng tôi sao chép ở các lớp khác nhau hoặc sửa đổi giấy phép. Trong trường hợp này, chúng tôi có thể sao chép và sửa đổi khoảng trống trong một lệnh duy nhất (tạo một lớp duy nhất). Điều này có thể đạt được với cờ —chown trong hướng dẫn COPY . Phần sau đây nên được thay thế
Trong trường hợp đầu tiên, chúng tôi đã sửa đổi khoảng trống cho một nhóm tệp cụ thể, trong trường hợp thứ hai, thành MỌI tệp được sao chép Cuối cùng, cổng 9000 bị lộ và lệnh php-fpm được thực thi ngay sau khi vùng chứa được nâng lên.
docker soạnĐã xây dựng hình ảnh, đã đến lúc kiểm tra nó. Chúng ta nên tạo docker-compose của dự án Để đơn giản hóa, trước tiên hãy kết nối ứng dụng và NginX .
Để xây dựng dự án
Sau đó, chúng tôi truy cập trang web localhost sau. 8080 để tìm thông báo chào mừng của Laravel Thật tuyệt vời. Tại thời điểm này, chúng tôi có thể thực hiện các điều chỉnh cụ thể cho ứng dụng của mình và kết nối cơ sở dữ liệu Trước đây, chúng tôi đã lướt qua. tập tin env. Bây giờ là lúc chúng ta bắt đầu hoàn thành nó Đầu tiên chúng ta sẽ điền vào các khoảng trống dành riêng cho Laravel
Khi đó, chúng tôi thực hiện
Phần đầu tiên của chúng tôi. env, sẽ trông như thế này 0Để đảm bảo mọi thứ đều ổn, đây là giai đoạn tốt để xây dựng lại hình ảnh và khởi động ứng dụng Kết nối BDNếu chúng ta nhớ lại sơ đồ kiến trúc, kết nối BD được thực hiện thông qua một mạng bên ngoài được chia sẻ với tất cả các dịch vụ. Vì vậy cần phải tạo mạng trước Chúng ta phải thực thi lệnh docker, sau đó 1Khi mạng này được tạo, chúng ta phải thêm nó vào danh sách mạng trong docker-compose. yaml và đặt từng dịch vụ để kết nối với nó 2Bây giờ chúng tôi có thể kết nối với một phiên bản MySQL Đầu tiên, chỉnh sửa docker-compose. yaml để xây dựng dịch vụ 3Chúng tôi lấy thông tin đăng nhập và tên BD làm biến môi trường. Các giá trị đó phải khớp với các trường tương ứng trong. tập tin biến env. Sau đó hoàn thành 4Trong cùng một tệp, sửa đổi lệnh được thực thi bởi example-api-1 để chạy di chuyển trong cơ sở dữ liệu. Bằng cách này, chúng tôi xác nhận kết nối là chính xác Chúng tôi cũng phải chỉ định dịch vụ cơ sở dữ liệu là một phần phụ thuộc của dịch vụ API của chúng tôi 5Lệnh di chuyển được thực thi mỗi khi nâng cấp dự án. Nếu không có di chuyển, nghệ nhân sẽ thông báo cho chúng tôi và bỏ qua nó
Chúng tôi cũng đã thêm độ trễ 10 phút trước khi chạy quá trình di chuyển để cung cấp thời gian cho dịch vụ BD hoàn toàn trực tuyến Kết nối với RedisĐối với giai đoạn này, chúng tôi bắt đầu bằng cách sửa đổi. tập tin env 6Sau đó, phần sau được thêm vào docker-compose. yml. Lưu ý rằng chúng tôi đang xem xét một mật khẩu trống và đã triển khai kiểm tra sức khỏe . 7Cuối cùng, điều cơ bản là cài đặt trình kết nối PHP cho Redis. Sau đó, chúng tôi sửa đổi dockerfile của mình. 8Sẳn sàng. Bây giờ chúng ta có một phiên bản Redis
Đi sâu vào kết quảTôi không muốn kết thúc mục blog này mà không đề cập đến việc lặn. Nó là một công cụ rất hữu ích khi nói đến dockerizing. Nó cho phép chúng tôi phân tích các thay đổi của hình ảnh theo từng lớp, giúp chúng tôi hình dung những lớp nào chịu trách nhiệm tăng không gian mà hình ảnh sử dụng. Nó cũng cung cấp điểm “hiệu quả hình ảnh”, dựa trên số liệu xem xét không gian bị lãng phí tiềm năng dựa trên các tệp đã được sửa đổi trên nhiều lớp Chỉ cần chia sẻ tên của hình ảnh chúng tôi muốn phân tích 9Thực hiện cú bổ nhào. Đáng chú ý là các tệp không cần thiết đã được sao chép như dockerfile, tệp git, v.v. dockerignoreBạn nên thêm . dockerignore để tránh gửi daemon các tệp không cần thiết để xây dựng hình ảnh. Quá trình và cú pháp của nó rất giống với . gitignore một. Chúng tôi chỉ cần liệt kê các tệp và thư mục mà chúng tôi muốn bỏ qua. Trong trường hợp cụ thể này, chúng tôi có thể bao gồm thư mục node_modules, các thư mục có bài kiểm tra BD, v.v. 0Phần kết luậnTrong suốt mục này, chúng ta đã xem xét cấu trúc của một dự án Laravel điển hình, đây là bước cần thiết đầu tiên để dockerize. tìm hiểu dự án . Sau đó, chúng tôi đã thiết lập một kiến trúc microservices để sử dụng trên môi trường hiệu quả. Chúng tôi cũng đã tạo một docker-compose để giúp chúng tôi kiểm tra và cuối cùng, chúng tôi đã tạo một dockerfile bằng cách sử dụng bản dựng nhiều tầng. Ngay cả bài viết khó được gọi là hướng dẫn cuối cùng , sự thật là mọi dự án đều khác nhau và các thay đổi nên được thực hiện để thích ứng với từng bối cảnh. Mục đích không phải là cung cấp một mẫu để sao chép-dán một cách mù quáng mà là để thu thập kinh nghiệm và chia sẻ chúng để bạn có thể cập bến một cách thú vị vào lần sau. Nếu bạn đã từng chơi WarCraft, mục blog này sẽ là hướng dẫn giúp tăng trạng thái Devops của bạn +1 Tệp Docker cuối cùngDockerfile 1soạn thảo docker. khoai mỡ 2Xử lý sự cốLý tưởng nhất là mọi thứ diễn ra tốt đẹp. Tuy nhiên, một cái gì đó có thể đi sai. Đó là lý do tại sao có một danh sách một số lỗi (không phải tất cả) bạn có thể gặp thường xuyên
Người giới thiệu
Craftech là gì?Craftech là một nhóm phát triển cơ sở hạ tầng đáng tin cậy, nhanh nhẹn và giàu kinh nghiệm. Nhóm của chúng tôi chỉ bao gồm các kỹ sư, nhà thiết kế và quản lý cấp cao nhất. Craftech dựa vào việc sử dụng các phương pháp, công cụ, công nghệ và quy trình phát triển tăng tốc mới nhất để mang lại sự xuất sắc trong các giải pháp, giao tiếp và trải nghiệm khách hàng của chúng tôi Nếu bạn có bất kỳ câu hỏi/vấn đề nào ở đây, vui lòng tham gia cùng chúng tôi trên cộng đồng Crafttech Slack và hỏi xung quanh |