Dockerfile php với nhà soạn nhạc
Khi chạy lệnh "ADD" trong Dockerfile, trên Docker cho Windows, thao tác này sẽ sao chép các tệp thay vì sao chép Symlink Show
Điều này có tác dụng làm thay đổi các tệp này (trong Gói phân phối) không xuất hiện bên trong bộ chứa Docker; . e. sửa đổi các lớp không xuất hiện Để khắc phục điều này, bạn cần thêm mọi gói từ DistributionPackages vào khối ổ đĩa của docker-compose. tập tin yml Thí dụVí dụ: hãy lấy cấu trúc tệp sau - chúng tôi có gói trang web và gói "bình thường" trong Gói phân phối Vài ngày trước, tôi phải làm việc với một thiết lập ứng dụng web PHP Slim rất đơn giản được chứa hoàn toàn bằng Docker. Tôi đã quản lý nó để làm cho nó hoạt động bằng bộ chứa Nginx Docker, bộ chứa PHP-FPM và bộ chứa ứng dụng Slim. Tất cả đều hoạt động tốt khi tôi bắt đầu vật lộn với vấn đề xây dựng docker Compose khi cố gắng cài đặt các phụ thuộc PHP của mình bằng Trình soạn thảo, bên trong các bước xây dựng bộ chứa của Dockerfile (đây là các bước được thực thi khi bạn chạy bản dựng dockercompose). Tôi quyết định chia sẻ với bạn vấn đề này và một vài cách giải quyết mà bạn có thể áp dụng khi đối mặt với nó, với một ví dụ đơn giản nhưng thực tế Ví dụ thiết lập dự án cơ bảnVì vậy, để bắt đầu, hãy xem xét cấu trúc dự án sau /php Một cấu trúc khá cơ bản và tối thiểu cho một dự án PHP nhỏ, sử dụng Trình soạn thảo để xác định các phụ thuộc của nó. Chúng ta hãy xem docker-compose. tập tin yml services: Điều này chỉ xác định một dịch vụ PHP, sử dụng một ổ đĩa được chia sẻ với thư mục/php và các hướng dẫn Dockerfile của nó được xác định trong tệp php. tập tin dockerfile. Hãy xem nó FROM php:7.4-cli# INSTALL ZIP TO USE COMPOSER Ở đây chúng tôi bắt đầu từ một PHPv7. 4 hình ảnh; . tập tin php Hãy giả sử chính của chúng tôi. php của bạn chỉ đơn giản như sau require './vendor/autoload.php'; Để điều này hoạt động thành công, chúng tôi sẽ cần cài đặt phần phụ thuộc Carbon PHP, vì vậy nhà soạn nhạc của chúng tôi. tệp json có thể trông giống như { Sự cố thư mục “nhà cung cấp” bị thiếuVới thiết lập được cung cấp trước đó, chúng tôi nghĩ sẽ không có gì sai sót nếu chúng tôi chạy services: 0. Chà, hãy thay đổi và thử xemNhư chúng ta có thể thấy, PHP không thể tìm thấy thư mục nhà cung cấp sẽ được tạo khi cài đặt trình soạn thảo được thực thi. Lưu ý rằng nhà soạn nhạc. tập tin khóa cũng không tồn tại. Vậy…, chuyện gì đang xảy ra ở đây vậy? Tôi mất vài giờ để tìm ra nó, nhưng kết quả xảy ra khá đơn giản. khi xây dựng bộ chứa Docker PHP, docker thực thi từng bước xây dựng được xác định trong Dockerfile, do đó, chạy lệnh cài đặt trình soạn thảo và tạo thư mục /vendors và trình soạn thảo. khóa tập tin như mong đợi. Tại thời điểm này, các tệp này chỉ tồn tại trong hệ thống tệp vùng chứa. Khi docker soạn thảo được thực thi, Docker sẽ gắn hệ thống tệp của máy chủ (máy của chúng tôi) vào hệ thống tệp của vùng chứa, do đó ghi đè lên các tệp vùng chứa. Đó là khi thư mục /vendors và nhà soạn nhạc. lock bị xóa khỏi hệ thống tệp của vùng chứa. Vì Docker không gắn các ổ đĩa đã chỉ định trong giai đoạn xây dựng nên tất cả các tệp được lưu trữ bên trong vùng chứa trong giai đoạn xây dựng này sẽ bị xóa và thay thế bằng các tệp bạn đang lưu trữ trong thư mục /php khi bạn khởi động vùng chứa. Ghi nhớ điều này, lưu ý rằng BẢN SAO. . hướng dẫn chúng tôi xác định trong php. Dockerfile vô dụng và chúng tôi có thể xóa nó mà không tạo ra kết quả không mong muốn 3 giải pháp thay thế để ngăn sự cố thư mục “nhà cung cấp” bị thiếuĐể tránh gặp sự cố này, chúng ta phải xóa lệnh services: 1 khỏi tệp php. tập tin dockerfile. Nếu không có điều này, chúng tôi sẽ không cài đặt các phụ thuộc PHP sau khi bộ chứa được tạo, vì vậy chúng tôi sẽ phải chạy bước này sau đó, tại thời điểm khởi động bộ chứa. Ở đây tôi cung cấp 3 lựa chọn thay thế để làm điều này, bắt đầu với những lựa chọn đơn giản nhấtCài đặt thủ công các phụ thuộc sau mỗi bản dựng soạn thảo dockerNhư tiêu đề tự mô tả này gợi ý, chúng ta chỉ cần cài đặt thủ công các phụ thuộc PHP mà chúng ta cần mỗi khi xây dựng vùng chứa. Điều này dường như hoạt động nếu chúng tôi chắc chắn rằng chúng tôi sẽ không cần chạy trình soạn nhạc cài đặt nhiều hơn chỉ một vài lần cho một dự án Chúng ta có thể cài đặt các phụ thuộc PHP của trình soạn thảo thông qua lệnh chạy soạn thảo docker, như thế này docker compose run php composer install Lưu ý rằng sau khi chạy lệnh này, chúng ta sẽ có trình soạn thảo. các tệp lock và /vendor đã tồn tại trong cấu trúc tệp dự án ban đầu của chúng tôi Cài đặt các phụ thuộc mỗi khi vùng chứa được khởi độngphp. Dockerfile chúng tôi đang sử dụng thực thi lệnh services: 2 làm lệnh bắt đầu cho bộ chứa PHP. Ở đây chúng ta có thể bao gồm thêm bước cài đặt các phụ thuộc PHP bằng cách sửa đổi nó thànhCMD bash -c "composer install && php main.php" Với cách tiếp cận này, chúng tôi sẽ không cần quan tâm đến việc cài đặt thủ công các phụ thuộc PHP của chúng tôi mỗi khi chúng tôi xây dựng vùng chứa. Bất cứ khi nào chúng tôi thực thi soạn thảo docker, trước tiên, điều này sẽ kiểm tra tất cả trạng thái gói, cài đặt những cái còn thiếu và chạy ứng dụng của chúng tôi Cài đặt các phụ thuộc một lần trong quá trình xây dựng soạn thảo docker, bằng cách xác định phạm vi liên kết âm lượngCó một cách để chúng ta có thể đạt được cài đặt phụ thuộc PHP chỉ trong quá trình thực thi bản dựng soạn thảo docker. Vì trong thiết lập trước đây của chúng tôi, chúng tôi đang liên kết thư mục gốc với hệ thống tệp của bộ chứa, tất cả các tệp sẽ bị ghi đè khi chúng tôi khởi động bộ chứa. Chúng tôi chỉ có thể xác định phạm vi liên kết này để chỉ có một loạt các tệp của chúng tôi được liên kết với hệ thống tệp của vùng chứa Giả sử chúng ta chỉ muốn liên kết. các tệp php và trình soạn thảo. json với hệ thống tệp của vùng chứa, do đó, bất kỳ thay đổi nào được thực hiện đối với các tệp đó, cả từ máy của chúng tôi hoặc từ bên trong vùng chứa, sẽ được phản ánh theo cả hai hướng. Chúng ta cần sửa đổi docker-compose. yml để thông báo rõ ràng tệp nào chúng tôi muốn liên kết/liên kết services: Với điều đó, php của chúng tôi. Dockerfile có thể chịu trách nhiệm cài đặt các phụ thuộc của nhà soạn nhạc ... Mỗi khi chúng tôi chạy bản dựng soạn thảo docker, các phụ thuộc PHP của chúng tôi sẽ được cài đặt, một thư mục /vendors sẽ được tạo cũng như một trình soạn thảo. lock, NHƯNG CHỈ BÊN TRONG CONTAINER. Do đó, chúng tôi sẽ không thể xem các tệp này trong máy chủ của mình. Dù sao đi nữa, vì tất cả những gì chúng ta cần sẽ nằm trong chính vùng chứa, chúng ta sẽ có thể chạy docker Compose up và xem kết quả như mong đợi docker compose up Ngoài ra, nếu chúng tôi cài đặt một phụ thuộc PHP mới bằng Trình soạn thảo (trình soạn thảo cài đặt XXX), thì yêu cầu mới đó sẽ được đưa vào trình soạn thảo của chúng tôi. json, cho phép chúng tôi luôn có tất cả các phụ thuộc cần thiết được liệt kê ở đó, ở định dạng di động thú vị (không có gì xấu, uh?). Một cái gì đó tương tự sẽ xảy ra với. tập tin php. chúng tôi sẽ có thể chỉnh sửa các tệp này trong máy chủ của mình và các thay đổi sẽ được phản ánh trong phiên bản tệp của vùng chứa. Đối với điều đó, bạn thậm chí có thể có một thư mục /src với tất cả. php ở đó và chỉ cần liên kết thư mục đó vào vùng chứa Làm cách nào để sử dụng Trình soạn thảo PHP trong docker?Đảm bảo có cùng phiên bản PHP trong bộ chứa trình soạn thảo của bạn như trong bộ chứa PHP của bạn. . Cài đặt trình soạn nhạc và Docker. Composer là trình quản lý phụ thuộc PHP, tương tự như NPM cho Node. . Kiểm tra dự án (hoặc bắt đầu từ đầu). Thiết lập docker-compose. . Xây dựng và chạy. . Đi qua công cụ thiết lập. . điều chỉnh docker-compose Làm cách nào để tạo Dockerfile cho ứng dụng PHP?Cụ thể, bạn sẽ học cách. . Cài đặt Docker Chạy hình ảnh Docker Xây dựng hình ảnh khách hàng để chạy chương trình Sử dụng Docker Compose để thiết lập môi trường dev Chạy ứng dụng của chúng tôi trong Heroku Kiểm tra ứng dụng của chúng tôi với Tích hợp liên tục (CI) Triển khai ứng dụng của bạn với Triển khai liên tục (CD) Làm cách nào để sử dụng Trình soạn thảo trong PHP?Để định cấu hình Trình soạn thảo cho ứng dụng PHP của bạn . Tạo nhà soạn nhạc của bạn. . Xác minh rằng một nhà soạn nhạc. . Chạy cài đặt nhà soạn nhạc (trên máy cục bộ của bạn) để cài đặt các gói cần thiết và tạo một nhà soạn nhạc. . Cam kết nhà soạn nhạc. . Trong Engine Yard Cloud, nhấp vào Công cụ > Bảng điều khiển Chọn một môi trường bằng cách nhấp vào tên môi trường Làm cách nào để cài đặt các tiện ích mở rộng PHP trong docker?Dễ dàng cài đặt các tiện ích mở rộng PHP trong hình ảnh PHP Docker chính thức Cách sử dụng Tải xuống tập lệnh nhanh chóng Với Dockerfile Với curl Với thực thi trực tiếp từ curl . |