Chạy PHP Docker

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

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
9

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

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
0

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

Chạy PHP Docker

Tạo hình ảnh docker cho 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

Chạy PHP Docker

Khởi chạy một hình ảnh Docker

Nhấp vào nút khởi chạy và một quy trình mới sẽ chạy để triển khai

Chạy PHP Docker

Lấy url môi trường

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ả

Chạy PHP Docker

Xem trước ứng dụng

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

Mục đích của bài đăng này là để xem liệu có thể tránh cài đặt PHP trên các máy phát triển hay không. Để đạt được điều này, ý tưởng là tạo một lệnh PHP dựa trên bộ chứa docker

PHP và docker

PHP có thể được sử dụng với docker. Trong sản xuất, docker mang lại sự nhất quán với các ứng dụng khác được mã hóa bằng các ngôn ngữ khác nhau. Và điều này có thể đơn giản hóa rất nhiều việc triển khai của họ

Nhưng docker cũng có thể hữu ích trong môi trường phát triển. Không còn nghi ngờ gì nữa, khi có một nhà phát triển mới trong một dự án, docker sẽ giúp anh ta cài đặt tất cả các phụ thuộc cần thiết dễ dàng hơn rất nhiều. Đồng thời nó đảm bảo rằng môi trường là hoàn toàn giống nhau cho mọi người, trong quá trình phát triển cũng như trong sản xuất. Điều này có thể giúp bạn tránh xa những lỗi lạ

Có những hướng dẫn hay giải thích cách sử dụng docker-compose để định cấu hình dự án của bạn, như hướng dẫn này

Để sử dụng vùng chứa sản xuất trong quá trình phát triển, bạn chỉ cần tạo một ổ đĩa. Vì vậy, mã trên hệ thống của bạn sẽ thay thế mã bên trong vùng chứa. Bằng cách này, mã có thể được sửa đổi bên ngoài vùng chứa trong trình chỉnh sửa mã. Những thay đổi được phản ánh ngay lập tức. Và điều này hoạt động theo cả hai cách. Bạn có thể dùng docker exec để chạy một số lệnh trong container và nó sẽ ảnh hưởng đến code trên máy của bạn

Cho đến nay rất tốt, không cần cài đặt PHP bên ngoài docker cho trường hợp sử dụng này

Cần một lệnh PHP sau khi tất cả?

Tất cả điều này hoạt động tốt. Nhưng vẫn có trường hợp PHP cần thiết bên ngoài vùng chứa của ứng dụng

  • Nếu bạn muốn sử dụng trình nói dối hoặc trình định dạng mã trong trình chỉnh sửa mã của mình, nó sẽ cần quyền truy cập vào PHP
  • Tại một số điểm, bạn cũng có thể muốn chạy một số tập lệnh nhỏ không thuộc dự án

Đối với điều này, bạn vẫn cần PHP bên ngoài docker

Tạo một lệnh PHP

Vẫn có giải pháp tránh cài đặt PHP bên ngoài docker

Bạn có thể sử dụng

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
0 để tạo vùng chứa và thực thi PHP. Bạn chỉ cần thêm một số khối lượng vào thùng chứa. Các tập này phải bao gồm các đường dẫn đến mã của bạn

1
2

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php

Lưu ý rằng điều này có thể được bao gồm trong một kịch bản

1
2

#!/bin/bash
docker run -it --rm -v /home:/home -w $PWD php:cli php $@

Mà có thể được sử dụng như thế này.

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
1

Và bây giờ bạn có lệnh php của mình

Nó hoạt động nhưng nó làm tăng thời gian khởi động đến mức không thể sử dụng được trong trình chỉnh sửa mã. Ít nhất nếu trình định dạng mã của bạn được gọi mỗi khi bạn lưu tệp. Sự chậm trễ là do việc tạo vùng chứa. Vì vậy, có thể có một cách để giảm chi phí này

Bạn có thể tạo vùng chứa chạy ngầm. Thay vì thực thi tập lệnh, vùng chứa sẽ ngủ vô thời hạn. Sau đó, bạn có thể sử dụng docker exec để thực thi tập lệnh PHP trong vùng chứa

________số 8

# create a sleeping container
docker run -d -i --name php_worker -v /home:/home php:cli bash -c "while true; do sleep 1; done;"

# execute the php script
docker exec -it -w $PWD php_worker php /home/my_script.php

# remove the container
docker kill php_worker && docker rm php_worker

Trên máy của tôi, tôi nhận được những kết quả này cho

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
2

MethodExecution timedocker run~ 900 msdocker exec~ 180 msphp~ 15 ms

Phiên bản

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
3 tiết kiệm vài mili giây so với
# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
0. Nó không hoàn hảo nhưng nó đủ để làm cho nó có thể sử dụng được

Trong thực tế

Tạo vùng chứa và sau đó sử dụng docker exec không thực sự thiết thực. Vì vậy, tôi đã viết một tập lệnh python sử dụng ý tưởng này

Nó sử dụng

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
3 để chạy lệnh PHP. Trước khi chạy lệnh exec, nó sẽ kiểm tra xem bộ chứa PHP đang ngủ có tồn tại không. Nếu không, nó tạo ra nó. Vùng chứa này sẽ chạy trong một khoảng thời gian xác định, do đó, chi phí hoạt động do việc tạo vùng chứa này gây ra sẽ chỉ ảnh hưởng đến lệnh gọi đầu tiên. Nó cũng có thể ghi nhật ký để giúp gỡ lỗi các sự cố cuối cùng

Xin lưu ý rằng tập lệnh có thể cần tải xuống hình ảnh docker, vì vậy có thể mất thời gian trong lần gọi đầu tiên

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
4

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
5

Sao chép tập lệnh trong

# the current directory and the script directory should be included in the home directory for this to work
docker run -it --rm -v /home:/home -w $PWD php:cli php /home/my_script.php
6 (hoặc bất kỳ đích nào khác có trong $PATH của bạn) và bạn có một lệnh PHP hoạt động với docker

1
2

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
8

Kịch bản có hai hạn chế

  • Nó phải được gọi từ một thư mục được chia sẻ với bộ chứa docker
  • Tập lệnh và các phần phụ thuộc của nó phải nằm trong các thư mục được chia sẻ với vùng chứa

Tại sao lại sử dụng cái này?

Với tập lệnh này, có thể tránh cài đặt PHP trên hệ thống của bạn. Nhưng sử dụng trình quản lý gói như apt vẫn là một lựa chọn tốt. Vì vậy, những lợi thế của giải pháp docker này là gì?

  • Tùy thuộc vào kho lưu trữ trình quản lý gói của bạn, có thể mất thời gian để tải phiên bản PHP mới nhất. Mặt khác, các hình ảnh docker PHP chính thức được cập nhật thường xuyên. Vì vậy, bạn có thể có phiên bản mới nhất nhanh hơn
  • Với tập lệnh này, bạn có thể chạy các phiên bản PHP khác nhau một cách dễ dàng. Bạn chỉ cần thay đổi tên của các hình ảnh trong kịch bản
  • Bạn có thể tạo và sử dụng hình ảnh PHP của riêng mình với các phần mở rộng bổ sung. Chia sẻ hình ảnh với những người còn lại trong nhóm của bạn để họ có thể có cùng một môi trường
  • Bạn cũng có thể sử dụng hình ảnh của một trong các dự án PHP của mình

Trong thực tế, có thể bạn sẽ muốn cài đặt PHP với trình quản lý gói. Nhưng tập lệnh này có thể là một bổ sung tốt cho các trường hợp sử dụng cụ thể

Các ứng dụng khác

Trong ví dụ này, tập lệnh được sử dụng cho PHP. Nhưng nó không bị giới hạn ở đó. Nó có thể được điều chỉnh để sử dụng với các ngôn ngữ kịch bản khác như Node. js hoặc ruby ​​chẳng hạn. Bạn chỉ cần thay đổi thông số cấu hình

Làm cách nào để chạy tệp PHP trong docker?

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 để cài đặt PHP thông qua docker?

Để thiết lập bộ chứa tác nhân PHP cho Docker. Đảm bảo cài đặt PHP có sẵn trong vùng chứa. Ví dụ: sử dụng hình ảnh Docker đã xuất bản như php. 7. 1. Để cài đặt tác nhân, hãy tải xuống gói tác nhân PHP từ trang web tải xuống tệp tar của New Relic và chạy tập lệnh newrelic-install với đối số cài đặt .

Làm cách nào để chạy PHP MySQL trong docker?

Để chạy trong môi trường docker, hãy đặt tất cả mã PHP vào Thư mục src. Chạy nó từ các lệnh Docker cơ bản bằng hình ảnh cơ sở. Sử dụng các lệnh cơ bản của Docker chạy PHP với MySQL bằng phương thức liên kết có tên .

Làm cách nào để sử dụng docker PHP CLI?

Chạy PHP CLI trên Docker .
Tạo tập lệnh PHP – Đầu tiên, tạo tập lệnh PHP mẫu để chạy trên máy chủ web trong bộ chứa Docker. .
Tạo Dockerfile – Tiếp theo tạo một tệp có tên Dockerfile trong cùng thư mục của tập lệnh php. .
Build Docker Image – Bạn có một Dockerfile và một chỉ mục