Codefresh có thể làm việc với các dự án Php sử dụng bất kỳ framework phổ biến nào [Laravel, Symphony, CakePHp, v.v. ]
Dự án php ví dụ
Bạn có thể xem dự án ví dụ tại https. //github. com/codefresh-contrib/php-composer-sample-app. Kho lưu trữ chứa một dự án Php đơn giản sử dụng trình soạn thảo làm trình quản lý gói
Dockerfile sử dụng các bản dựng nhiều giai đoạn để giảm thiểu kích thước của hình ảnh docker
Dockerfile
FROM composer:1.9.3 as vendor
WORKDIR /tmp/
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
FROM php:7.2-apache-stretch
COPY . /var/www/html
COPY --from=vendor /tmp/vendor/ /var/www/html/vendor/
Tạo hình ảnh Docker cho dự án Php
Một đường dẫn ví dụ cũng được cung cấp trong kho git. Nó chỉ chứa hai bước. Một bước nhân bản để tìm nạp mã và một bước xây dựng để tạo hình ảnh Docker
codefresh.yml
version: '1.0'
steps:
main_clone:
title: Cloning main repository...
type: git-clone
repo: 'codefresh-contrib/php-composer-sample-app'
revision: master
git: github
MyAppDockerImage:
title: Building Docker Image
type: build
image_name: my-php-image
working_directory: ./
tag: master
dockerfile: Dockerfile
Khi bạn chạy đường dẫn này, Codefresh sẽ tạo hình ảnh Docker cho ứng dụng Php
Lưu ý rằng tất cả các phụ thuộc được tải xuống khi dockerfile được tạo
Khởi chạy hình ảnh Docker
Codefresh cũng có thể khởi chạy Docker image [sử dụng Docker swarm phía sau hậu trường]. Với mỗi tài khoản Codefresh, bạn có quyền truy cập vào một số môi trường Docker giới hạn có thể lưu trữ bất kỳ hình ảnh Docker hoặc tệp soạn thảo Docker nào
Trước tiên hãy tìm hình ảnh của bạn trong
Nhấp vào nút khởi chạy và một quy trình mới sẽ chạy để triển khai
Lưu ý rằng nhật ký đường ống hiển thị URL động của ứng dụng. Chỉ cần truy cập nó bằng trình duyệt của bạn và bạn sẽ thấy kết quả
Lưu ý rằng các môi trường này chỉ dành cho thử nghiệm và xem trước ứng dụng của bạn khi nó được phát triển. Chúng KHÔNG dành cho mục đích sản xuất
Bộ chứa Docker làm cho ứng dụng của bạn di động trên các môi trường. Khi bạn đã có hình ảnh bộ chứa, bạn có thể sử dụng nó ở bất cứ đâu có sẵn Docker. Đây là cách chứa một ứng dụng web PHP bằng máy chủ Apache
Chúng tôi sẽ sử dụng hình ảnh PHP Docker chính thức làm cơ sở của chúng tôi. Các biến thể được cấu hình sẵn với Apache được cung cấp, vì vậy bạn sẽ không cần phải tự cài đặt máy chủ web. Hình ảnh cơ sở PHP cũng cung cấp các tiện ích tiện lợi để quản lý các phần mở rộng PHP
Tạo một Dockerfile
Docker image được tạo từ một Dockerfile
. Tệp này chứa các hướng dẫn được sử dụng để xây dựng hình ảnh. Các hướng dẫn bao gồm
docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
0, để sao chép các tệp và thư mục vào vùng chứa và docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
1, chạy một lệnh trong vùng chứaBạn có thể chạy một trang web PHP đơn giản bằng cách sao chép các tệp của nó thành một hình ảnh dựa trên
docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
2FROM php:8.0-apache
WORKDIR /var/www/html
COPY index.php index.php
COPY src/ src
EXPOSE 80
Dockerfile
này lấy
docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
4 và docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
5 từ thư mục làm việc của chúng tôi và sao chép chúng vào thư mục gốc của tài liệu Apache. Bây giờ bạn có thể xây dựng hình ảnh và bắt đầu một vùng chứa từ nó. Bạn sẽ thấy trang web của mình được phục vụ bởi Apachedocker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
Hình ảnh PHP Docker có gốc tài liệu Apache ở vị trí Debian mặc định là
docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
6. Lệnh docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
7 trong Dockerfile
có nghĩa là các lệnh tiếp theo sẽ được thực thi trong thư mục gốc của tài liệuApache tự hiển thị trên cổng máy chủ web mặc định là 80. Chỉ thị
docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest
9 trong Dockerfile
chỉ ra điều này. Bằng cách hiển thị cổng một cách rõ ràng, bạn có thể sử dụng cờ COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
1 với COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
2 để tự động liên kết một cổng máy chủ ngẫu nhiên với cổng 80 của vùng chứaTùy chỉnh cấu hình Apache
Các hình ảnh PHP/Apache chính thức dựa trên Debian. Bạn có thể sử dụng trình quản lý gói
COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
3 để thêm phần mềm bổ sung mà bạn cầnLIÊN QUANCách sử dụng Cron với bộ chứa Docker của bạn
Bạn cũng có toàn quyền truy cập vào các công cụ tích hợp sẵn của Apache. Bạn có thể sử dụng
COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
4/_______12_______5 để quản lý các mô-đun và COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
6/______12_______7 để tương tác với máy chủ ảoTệp cấu hình Apache mặc định là
COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
8. Thêm các dòng vào tệp này hoặc thay thế hoàn toàn để mở rộng cấu hình ApacheMột thay đổi luôn đáng thực hiện là đặt rõ ràng Apache
COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
9. Điều này ngăn cảnh báo "không thể xác định tên máy chủ một cách đáng tin cậy" thường xuất hiện trong nhật ký vùng chứa của bạnBạn cũng thường muốn thêm máy chủ ảo Apache của riêng mình. Điều này cho phép bạn thiết lập cấu hình tùy chỉnh ngoài những gì mà trang web Apache
docker-php-ext-install pdo_mysql
0 cung cấp. Đây là cách thực hiện những thay đổi đóCOPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
Ví dụ này vô hiệu hóa trang mặc định, kích hoạt trang tùy chỉnh và khởi động lại Apache để áp dụng các thay đổi. Mô-đun
docker-php-ext-install pdo_mysql
1 cũng được kích hoạt, cho phép sử dụng chỉ thị docker-php-ext-install pdo_mysql
2 trong tệp docker-php-ext-install pdo_mysql
3. Bạn cũng có thể muốn kích hoạt các mô-đun khác, chẳng hạn như docker-php-ext-install pdo_mysql
4 nếu cấu hình của bạn sẽ tương tác với các tiêu đề phản hồiThêm phần mở rộng PHP
Hình ảnh Docker PHP đi kèm với các tiện ích quản lý tiện ích mở rộng được tích hợp sẵn. Một số tiện ích mở rộng được bật theo mặc định – bạn có thể kiểm tra những tiện ích mở rộng nào khả dụng bằng cách chạy
docker-php-ext-install pdo_mysql
5 trong vùng chứa đang chạyCó thể cài đặt nhiều tiện ích mở rộng phổ biến bằng cách sử dụng
docker-php-ext-install pdo_mysql
6docker-php-ext-install pdo_mysql
Một số tiện ích mở rộng cần được định cấu hình trước khi có thể cài đặt chúng. Bạn có thể sử dụng
docker-php-ext-install pdo_mysql
7 để thực hiện cấu hình cài đặt sẵn. Các tùy chọn khả dụng sẽ thay đổi theo tiện ích mở rộng. Đọc trang hướng dẫn của tiện ích mở rộng để xác định các cờ bạn có thể cung cấpRUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
Bạn cũng có thể sử dụng các tiện ích mở rộng được phân phối qua PECL. Các tiện ích mở rộng này yêu cầu quy trình cài đặt hai bước. Cài đặt gói PECL trước, sau đó sử dụng
docker-php-ext-install pdo_mysql
8 để đăng ký tiện ích mở rộng với bản cài đặt PHP của bạnRUN apt-get install -y libmcached-dev zlib1g-dev &&
pecl install memcached-3.1.5 &&
docker-php-ext-enable memcached
Cấu hình PHP
Các hình ảnh Docker được cấu hình sẵn để tải các tệp cấu hình PHP được tìm thấy trong
docker-php-ext-install pdo_mysql
9. Thêm tệp RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
0 của riêng bạn vào thư mục này. PHP sẽ bao gồm nội dung của nó khi chạy, ghi đè lên bất kỳ giá trị hiện có nào. Đây là cách được đề xuất để mở rộng cấu hình mặc địnhĐường dẫn thư mục cấu hình có thể thay đổi trong tương lai. Bạn có thể lấy vị trí hiện tại của nó bằng cách sử dụng biến môi trường
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
1. Nó hiện đang phân giải thành docker-php-ext-install pdo_mysql
9CÓ LIÊN QUAN. Cách chạy các ứng dụng GUI trong Docker Container
Sử dụng Trình soạn thảo
Trình soạn nhạc không khả dụng theo mặc định. Composer là một nỗ lực của cộng đồng tồn tại độc lập với PHP. Bạn cần cài đặt thủ công nếu muốn sử dụng nó trong Docker container
Cách tốt nhất để sử dụng Trình soạn thảo trong các bản dựng của bạn là tham khảo hình ảnh Docker của chính công cụ thông qua bản dựng nhiều giai đoạn. Sử dụng
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
3 để đưa tệp nhị phân Trình soạn thảo vào bộ chứa PHP của bạn; COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install --no-dev
Sử dụng phương pháp này làm giảm sự phức tạp. Bạn không cần tải xuống và chạy tập lệnh cài đặt Composer. Bằng cách tham khảo
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
4, Docker sẽ lấy hình ảnh và sau đó sao chép tệp nhị phân của Trình soạn thảoTập lệnh điểm vào tùy chỉnh
Bạn có thể cần sử dụng tập lệnh điểm vào tùy chỉnh nếu muốn chạy di chuyển ứng dụng trước khi thời gian chạy của máy chủ chính bắt đầu. Bạn có thể ghi đè vùng chứa
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
5 để sử dụng trình tự khởi động của riêng bạnBạn có thể làm cho quá trình thực thi vùng chứa tiếp tục như bình thường bằng cách thực thi
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
6. Thao tác này sẽ chạy Apache ở nền trước, ngăn không cho vùng chứa thoát ra sau khi tập lệnh điểm vào hoàn tấtENTRYPOINT ["bash", "/Docker.sh"]
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
7 nội dungphp app.php my-migration-command # run migrations
service cron start # start some services
exec apache2-foreground # main execution
CÓ LIÊN QUAN. Cách cài đặt Docker và Docker Compose trên Linux
Phần kết luận
Dockerising một dịch vụ web PHP rất đơn giản khi sử dụng các hình ảnh chính thức. Bạn có thể dễ dàng cấu hình Apache và PHP với các tiện ích mở rộng và các tệp cấu hình của riêng bạn
Rất có thể bạn sẽ gặp khó khăn khi cố gắng sử dụng các addon cộng đồng của bên thứ ba như Composer. Chúng không được bao gồm theo mặc định, vì vậy bạn sẽ cần sử dụng các bản dựng Docker nhiều giai đoạn hoặc quy trình cài đặt thủ công
Việc sử dụng Docker mang lại cho ứng dụng của bạn tính linh hoạt về cách thức và vị trí ứng dụng được triển khai. Với hình ảnh của bạn, bạn có thể tạo ra một bản cài đặt đang hoạt động cho trang web của mình chỉ bằng cách sử dụng
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
docker-php-ext-install gd
8 và COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
a2enmod rewrite &&
a2dissite 000-default &&
a2ensite my-apache-site &&
service apache2 restart
2 trong thiết bị đầu cuối của bạn