Thiết lập dự án php với 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

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
47

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

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
48

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

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

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

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ả

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

Trong phần này của loạt bài hướng dẫn phát triển PHP trên Docker, chúng ta sẽ đặt nền tảng cơ bản để xây dựng cơ sở hạ tầng phát triển hoàn chỉnh và giải thích cách "cấu trúc" thiết lập Docker như một phần của dự án PHP. Cấu trúc như trong - cấu trúc thư mục ["đặt cái gì ở đâu"] - Mẫu Dockerfile - giải quyết các vấn đề phổ biến [quyền truy cập tệp, cấu hình thời gian chạy,. ]

Chúng tôi cũng sẽ tạo một thiết lập vùng chứa tối thiểu bao gồm php-fpm, nginx và vùng chứa không gian làm việc mà chúng tôi cấu trúc lại từ các phần trước của hướng dẫn này

Tất cả các mẫu mã đều có sẵn công khai trong kho Hướng dẫn Docker PHP của tôi trên Github. Nhánh của hướng dẫn này là part_3_structuring-the-docker-setup-for-php-projects

Tất cả các phần đã xuất bản của Docker PHP Tutorial được thu thập dưới một trang chuyên dụng tại Docker PHP Tutorial. Phần trước là Thiết lập PhpStorm với Xdebug để phát triển cục bộ trên Docker và phần sau là Docker từ đầu cho PHP 8. 1 Ứng dụng năm 2022

Nếu bạn muốn theo dõi, vui lòng đăng ký nguồn cấp RSS hoặc để nhận thông báo tự động khi phần tiếp theo ra mắt. ]

Mục lục

Giới thiệu

Khi tôi bắt đầu vai trò hiện tại là Trưởng phòng Công nghệ Tiếp thị tại ABOUT YOU vào năm 2016, chúng tôi phụ thuộc rất nhiều vào Vagrant [cụ thể là. Homestead] là cơ sở hạ tầng phát triển của chúng tôi. Mặc dù điều đó tốt hơn nhiều so với làm việc trên các máy cục bộ của chúng tôi, nhưng chúng tôi đã gặp phải một số vấn đề trong quá trình thực hiện [e. g. phần mềm phân kỳ, hình ảnh cồng kềnh, thời gian bắt đầu chậm, readme phức tạp để giới thiệu, nâng cấp php,. ]

Ngày nay, mọi thứ chúng tôi cần cho cơ sở hạ tầng đều nằm dưới sự kiểm soát nguồn và được cam kết trong cùng một kho lưu trữ mà chúng tôi sử dụng cho ứng dụng chính của mình. Trên thực tế, chúng tôi có cơ sở hạ tầng giống nhau cho mọi nhà phát triển, bao gồm các bản cập nhật tự động "miễn phí". Việc sửa đổi các bản cập nhật/công cụ mới cực kỳ dễ dàng do tính chất tạm thời của docker khi phá bỏ và xây dựng lại chỉ mất một lệnh và vài phút

Để có cảm giác về quá trình diễn ra như thế nào, chỉ cần thực hiện các lệnh sau

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test

Bây giờ bạn sẽ có một môi trường docker đang chạy để phát triển PHP trên docker [trừ khi hoặc ;]]

Cấu trúc kho lưu trữ

Trong khi chơi với docker, tôi đã thử nhiều cách khác nhau để "cấu trúc" các tệp và thư mục và kết thúc với các khái niệm sau. - mọi thứ liên quan đến docker được đặt trong thư mục

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
8 ở cùng cấp độ với ứng dụng chính - trong thư mục này - mỗi dịch vụ có thư mục con riêng để cấu hình - là thư mục
; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9 chứa tập lệnh và cấu hình theo yêu cầu của nhiều dịch vụ - là thư mục
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
1

Kết quả trông đại khái như thế này

________số 8

Các. thư mục docker

Như tôi đã đề cập, đối với tôi, việc giữ định nghĩa cơ sở hạ tầng gần với cơ sở mã là rất có ý nghĩa, bởi vì nó có sẵn ngay lập tức cho mọi nhà phát triển. Đối với các dự án lớn hơn có nhiều thành phần, sẽ có một kết nối cơ sở hạ tầng mã [e. g. theo kinh nghiệm của tôi, thường không thể đơn giản chuyển MySQL sang PostgreSQL mà không có bất kỳ thay đổi nào khác] và đối với một thư viện, đó là một cách rất thuận tiện [mặc dù có ý kiến] để bắt đầu

Cá nhân tôi cảm thấy khá khó chịu khi muốn đóng góp cho một dự án mã nguồn mở nhưng lại thấy mình dành một lượng thời gian đáng kể để thiết lập môi trường một cách chính xác thay vì chỉ có thể làm việc với mã

Ymmv, mặc dù [e. g. bởi vì bạn không muốn mọi người có quyền ghi vào repo ứng dụng của bạn cũng có thể thay đổi mã cơ sở hạ tầng của bạn]. Chúng tôi thực sự đã đi một con đường khác trước đây và có một kho lưu trữ thứ hai ["-inf"] chứa nội dung của thư mục

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
8

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
0

Cũng hoạt động tốt, nhưng chúng tôi thường gặp phải các tình huống trong đó nội dung của repo sẽ cũ đối với một số nhà phát triển, ngoài ra, nó chỉ đơn giản là chi phí bổ sung mà không có lợi ích nào khác cho chúng tôi vào thời điểm đó. Có thể các mô-đun con git sẽ cho phép chúng tôi tận dụng tối đa cả hai thế giới - Tôi sẽ viết blog về nó sau khi chúng tôi thử;]

Thư mục
; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9

Khi xử lý nhiều dịch vụ, rất có thể một số dịch vụ đó sẽ được cấu hình tương tự nhau, e. g. cho - cài đặt phần mềm phổ biến - thiết lập người dùng unix [có cùng id] - cấu hình [nghĩ rằng php-cli cho công nhân và php-fpm cho các yêu cầu web]

Để tránh trùng lặp, tôi đặt các tập lệnh [tệp bash đơn giản] và tệp cấu hình trong thư mục

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9 và cung cấp nó trong ngữ cảnh xây dựng cho từng dịch vụ. Tôi sẽ giải thích quá trình chi tiết hơn dưới đây

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
0

Thực sự chỉ là một tập lệnh bash đơn giản bao gồm một số thử nghiệm cấp cao để đảm bảo rằng các vùng chứa được xây dựng chính xác. xem phần

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
1 và
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
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
69 sử dụng for một cách thuận tiện để định nghĩa và. Vì tệp
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
70 này dành riêng cho môi trường nên nó KHÔNG phải là một phần của kho lưu trữ [i. e. bỏ qua qua
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
73]. Thay vào đó, chúng tôi cung cấp tệp
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
1 chứa các biến môi trường bắt buộc bao gồm các giá trị mặc định hợp lý. Một nhà phát triển mới thường chạy
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
75 sau khi kiểm tra kho lưu trữ lần đầu tiên. xem phần

Makefile

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
4 và
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
77 là một trong những điều mà thỉnh thoảng tôi có nghe nói đến nhưng chưa bao giờ thực sự quan tâm để hiểu [chủ yếu là vì tôi liên kết chúng với C]. Chàng trai, tôi đã bỏ lỡ. Tôi đã so sánh các chiến lược khác nhau để cung cấp công cụ chất lượng mã [trình kiểm tra kiểu, trình phân tích tĩnh, kiểm tra,. ] và đi từ tập lệnh bash tùy chỉnh qua tập lệnh của nhà soạn nhạc để cuối cùng kết thúc ở
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
77s

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
77 phục vụ như một điểm vào trung tâm và đơn giản hóa việc quản lý các container docker, e. g. để [tái] xây dựng, bắt đầu, dừng, đăng nhập, v.v. xem phần

Định nghĩa dịch vụ. php-fpm, nginx và không gian làm việc

Chúng ta hãy xem một ví dụ thực tế và "tái cấu trúc" các , và các thùng chứa từ phần đầu tiên của loạt bài hướng dẫn này

Đây là cấu trúc thư mục

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
5

php-fpm

Nhấn vào đây để xem Dockerfile php-fpm đầy đủ

Vì chúng ta sẽ có hai bộ chứa PHP, nên chúng ta cần đặt chung. ini trong thư mục

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
7

Hiện tại,

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
81 sẽ chỉ chứa thiết lập opcache của chúng tôi

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0

Cấu hình nhóm chỉ phù hợp với php-fpm, vì vậy nó sẽ nằm trong thư mục của dịch vụ. btw. Tôi đánh giá cao video này về Cấu hình PHP-FPM nếu foo php-fpm của bạn chưa vượt quá 9000

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf

Sửa đổi cấu hình nhóm

Chúng tôi đang sử dụng để đặt người dùng và nhóm sở hữu các quy trình php-fpm

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
6

ĐIỂM VÀO tùy chỉnh

Vì php-fpm cần có thể gỡ lỗi, chúng tôi cần đảm bảo rằng mục nhập DNS

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
7 tồn tại, vì vậy chúng tôi sẽ sử dụng để thực hiện điều đó

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
7

nginx

Nhấn vào đây để xem đầy đủ nginx Dockerfile

Thiết lập nginx thậm chí còn đơn giản hơn. Không có cấu hình dùng chung, vì vậy mọi thứ chúng tôi cần đều nằm trong

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
8

Xin lưu ý rằng nginx chỉ có tệp

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
84 để cấu hình [i. e. không có thư mục
git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
85 hoặc hơn], vì vậy chúng tôi cần xác định cấu hình đầy đủ trong đó

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
0

Có hai điều cần lưu ý

  • người dùng và nhóm được sửa đổi động
  • chúng tôi chỉ định
    git clone //github.com/paslandau/docker-php-tutorial.git
    cd docker-php-tutorial
    git checkout part_3_structuring-the-docker-setup-for-php-projects
    make docker-clean
    make docker-init
    make docker-build-from-scratch
    make docker-test
    
    86 là thư mục chứa các tệp cấu hình cho các tệp riêng lẻ thông qua
    git clone //github.com/paslandau/docker-php-tutorial.git
    cd docker-php-tutorial
    git checkout part_3_structuring-the-docker-setup-for-php-projects
    make docker-clean
    make docker-init
    make docker-build-from-scratch
    make docker-test
    
    87

Chúng ta cần ghi nhớ điểm cuối cùng, bởi vì chúng ta phải sử dụng cùng một thư mục trong Dockerfile

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
1

Tệp cấu hình của trang web

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
88 có một biến [
git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
89] cho chỉ thị
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
00 và chúng tôi "kết nối" nó với fpm-container thông qua
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
01

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
2

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02 sẽ phân giải thành bộ chứa
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02, vì chúng tôi sử dụng php-fpm làm tên dịch vụ trong tệp soạn thảo docker, vì vậy nó sẽ là

Các vùng chứa khác trên cùng một mạng có thể sử dụng tên dịch vụ hoặc bí danh [an] để kết nối với một trong các vùng chứa của dịch vụ

Trong Dockerfile, chúng tôi sử dụng

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
3

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
04 sẽ được chuyển qua docker-compose khi chúng tôi xây dựng vùng chứa và được gắn dưới dạng thư mục dùng chung từ hệ thống máy chủ

không gian làm việc [trước đây là php-cli]

Nhấn vào đây để xem toàn bộ không gian làm việc Dockerfile

Chúng tôi sẽ sử dụng vùng chứa

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
05 cũ và biến nó thành
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
06 của chúng tôi như đã giới thiệu trong phần 2 của hướng dẫn này bên dưới

Đây sẽ là vùng chứa mà chúng tôi sử dụng để trỏ IDE của mình tới, e. g. để thực hiện các bài kiểm tra. Dockerfile của nó trông gần giống với dịch vụ của

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02, ngoại trừ thiết lập SSH

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
4

Thiết lập docker-compose

Để sắp xếp quá trình xây dựng, chúng tôi sẽ sử dụng docker-compose

soạn thảo docker. yml

Xem toàn bộ docker-compose. tệp yml trong kho lưu trữ

Những điều cần lưu ý. - mỗi dịch vụ sử dụng

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
08 để có quyền truy cập vào thư mục
; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9. Bối cảnh luôn luôn - tất cả các đối số mà chúng tôi đã sử dụng trong Dockerfiles được xác định trong phần
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
10 thông qua
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
11 - cơ sở mã được đồng bộ hóa từ máy chủ trong tất cả các vùng chứa thông qua
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
12 - dịch vụ
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
13 hiển thị các cổng trên máy chủ để chúng tôi có thể truy cập . Dịch vụ
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
13 có một bí danh bổ sung cho phép chúng tôi xác định tên máy chủ tùy ý thông qua
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
17 Tôi muốn có một tên máy chủ chuyên dụng cho mỗi dự án [e. g.
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
18] thay vì sử dụng trực tiếp
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
19 hoặc
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
20

env. ví dụ

Để điền vào tất cả các biến/đối số bắt buộc, chúng tôi đang sử dụng tệp

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
1 với nội dung sau

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
5

Các biến

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
22 lúc đầu thiết lập một số hợp lý

Xây dựng và vận hành container

Đến bây giờ, chúng ta nên có mọi thứ chúng ta cần thiết lập để bắt đầu và chạy quá trình phát triển PHP dockerized của chúng ta. Nếu bạn chưa thực hiện, bây giờ sẽ là thời điểm tuyệt vời để sao chép kho lưu trữ và kiểm tra nhánh

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
23

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
6

Bây giờ sao chép

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
24 sang
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
70. Tất cả các giá trị mặc định sẽ hoạt động ngay lập tức - trừ khi bạn đã có thứ gì đó đang chạy trên cổng
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
26 hoặc
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
27. Trong trường hợp đó, bạn phải thay đổi
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
28 thành cổng miễn phí

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
7

Chúng ta có thể kiểm tra docker-compose "cuối cùng". yml sau khi thay thế biến thông qua

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
8
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
9

Lưu ý rằng lệnh này được chạy từ

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
29. Nếu chúng tôi chạy cái này từ
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
30, chúng tôi chỉ có thể sử dụng
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
31 - nhưng vì chúng tôi sẽ xác định điều đó trong Makefile sau này, nên "độ chi tiết" bổ sung sẽ không thành vấn đề;]

Lệnh này cũng là một cách tuyệt vời để kiểm tra các đường dẫn khác nhau được phân giải thành dạng tuyệt đối của chúng, e. g

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
00

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
01

Bản dựng thực tế được kích hoạt thông qua

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
02

Vì chúng tôi có nhiều hơn một vùng chứa, nên việc xây dựng với

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
32 là điều hợp lý

Để bắt đầu các container, chúng tôi sử dụng

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
03

và nên xem

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
04

Kiểm tra nếu mọi thứ hoạt động

Sau khi viết lại thiết lập docker của chúng tôi một vài lần, tôi đánh giá cao một cách có cấu trúc để kiểm tra xem "mọi thứ" có hoạt động không. Mọi thứ như trong. - có phải tất cả các container đang chạy không? . người đóng tàu. internal" có tồn tại không? - chúng tôi có thấy đầu ra chính xác khi gửi yêu cầu tới nginx/php-fpm không? - tất cả các phần mở rộng php bắt buộc đã được cài đặt chưa?

Điều này có vẻ thừa [xét cho cùng, chúng ta chỉ định nghĩa rõ ràng điều đó trong Dockerfiles], nhưng sẽ đến lúc bạn [hoặc ai đó] cần thực hiện các thay đổi [phiên bản PHP mới, tiện ích mở rộng mới, v.v. ] và có một cái gì đó chạy tự động và thông báo cho bạn về những sai sót rõ ràng là một trình tiết kiệm thời gian thực

Bạn có thể xem file test đầy đủ trong kho. Vì bash của tôi không phải là tốt nhất, tôi cố gắng giữ nó đơn giản nhất có thể. Các bài kiểm tra có thể được chạy qua

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
05

và sẽ mang lại một cái gì đó như thế này

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
06

Makefile và
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
3

Trong các phần trước tôi đã giới thiệu một vài lệnh, e. g. để xây dựng và vận hành container. Và thành thật mà nói, tôi thấy hơi khó để ghi nhớ chúng mà không cần phải tìm kiếm các lựa chọn và lập luận chính xác. Tôi thường tạo một hàm trợ giúp hoặc bí danh trong tệp

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
3 cục bộ của mình trong tình huống như vậy - nhưng điều đó sẽ không có sẵn cho các thành viên khác trong nhóm khi đó và nó sẽ rất cụ thể đối với dự án này. Thay vào đó, chúng tôi sẽ cung cấp một
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
77 làm điểm tham chiếu trung tâm

Sử dụng
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
4 làm điểm vào trung tâm

Vui lòng tham khảo kho lưu trữ để biết toàn bộ

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
77

Đi sâu vào chi tiết của

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
4 hơi nằm ngoài phạm vi của bài viết này, vì vậy tôi vui lòng tham khảo một số bài viết đã giúp tôi bắt đầu. - Makefile dành cho các nhà phát triển lười biếng - Tại sao bạn cần Makefile cho Dự án của mình

Cả hai đều được viết với ngữ cảnh PHP. Mẹo. Nếu bạn đang sử dụng PhpStorm, hãy dùng thử plugin hỗ trợ Makefile. Và đừng quên quy tắc số một. Một

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
77 yêu cầu các tab

Ghi chú. Nếu bạn đang sử dụng Windows, có thể không có

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
4. Xem hướng dẫn để thiết lập 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
77 ist nằm trong thư mục gốc của ứng dụng. Vì chúng tôi sử dụng mục tiêu
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
42 để tự tạo tài liệu cho
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
77, nên chúng tôi chỉ cần chạy
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
4 để xem tất cả các lệnh có sẵ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
07

Là một nhà phát triển mới, phần "giới thiệu" của bạn để có được cơ sở hạ tầng đang chạy sẽ trông như thế này

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
08

Cài đặt make trên Windows [MinGW]

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
4 không tồn tại trên Windows và cũng không phải là một phần của bản cài đặt tiêu chuẩn của MinGW [bấm vào đây ] Việc thiết lập rất đơn giản nhưng với "mọi thứ giao diện người dùng", sẽ dễ dàng hơn nếu bạn thực sự có thể "xem những gì tôi đang làm" -

Các bước thực hiện như sau. - Thiết lập

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
46 - Hướng dẫn. https. // trang web. lưu trữ. org/web/20200226035236/http. //www. mingw. org/wiki/getting_started#toc5 - Tải xuống. https. //nguồnforge. net/dự án/mingw/tệp/Trình cài đặt/mingw-get-setup. exe/tải xuống - Cài đặt và. ghi chú. - Không sử dụng đường dẫn cài đặt có dấu cách. - Đường dẫn cài đặt có thể khác với vị trí MinGW của bạn - Cài đặt
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
50 qua
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
51 - tạo tệp
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
52 với nội dung
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
53 - Lưu ý. Đôi khi Windows sẽ không nhận ra. exe - vì vậy thay vì
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
52, bạn có thể cần đặt tên tệp là
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
55 [có cùng nội dung] - Mở trình bao mới và nhập
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
4. Đầu ra sẽ trông giống như thế này
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
57

Truy cập container dễ dàng thông qua
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
5. trình trợ giúp bashrc

Tôi có một tiện ích cuối cùng để làm việc với Docker mà tôi luôn sử dụng

Đăng nhập vào một container đang chạy thông qua và trình trợ giúp

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
60

Để thực hiện công việc này, hãy đặt đoạn mã sau vào tệp

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
3 của bạ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
09

Phần

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
62 sẽ tìm thấy một phần khớp trên các vùng chứa đang chạy cho đối số đầu tiên và chuyển kết quả cho lệnh
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
59. Trên thực tế, chúng tôi có thể đăng nhập vào bất kỳ vùng chứa nào bằng cách chỉ cung cấp một chuỗi khớp tối thiểu trên tên vùng chứa. e. g. để đăng nhập vào bộ chứa
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
06, giờ đây tôi có thể chỉ cần nhập
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
65 từ bất kỳ đâu trên hệ thống của mình

Nguyên tắc cơ bản về xây dựng container

Vì bây giờ chúng ta đã "thấy" kết quả cuối cùng, chúng ta hãy xem xét kỹ hơn hậu trường. Tôi cho rằng bạn đã phần nào quen thuộc với

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
66 và đã sử dụng
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
69 để điều phối nhiều dịch vụ [nếu không, hãy xem và]. Nhưng có một số điểm tôi muốn trình bày chi tiết hơn một chút

Hiểu bối cảnh xây dựng

Có hai phần thiết yếu khi xây dựng một container

  • Dockerfile
  • bối cảnh xây dựng

Bạn có thể đọc về mô tả chính thức trong. Bạn thường sẽ thấy một cái gì đó như thế này

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
50

giả định rằng bạn sử dụng thư mục hiện tại làm bối cảnh xây dựng và có một Dockerfile trong cùng thư mục

Nhưng bạn cũng có thể bắt đầu xây dựng thông qua

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
51

Đối với tôi, ý chính là thế này. Bối cảnh xây dựng xác định các tệp và thư mục [đệ quy] trên máy của bạn được gửi từ Docker CLI đến Docker Daemon thực thi quy trình xây dựng của vùng chứa để bạn có thể tham chiếu các tệp đó trong Dockerfile [e. g. thông qua

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
68]. Lấy cấu trúc sau đây làm ví dụ

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
52

Giả sử rằng thư mục làm việc hiện tại là

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
69. Nếu chúng tôi bắt đầu xây dựng thông qua

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
53

bối cảnh sẽ không bao gồm thư mục

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9 vì vậy chúng tôi sẽ không thể
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
68 thư mục con
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
72. Nếu chúng tôi chạy

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
54

tuy nhiên, điều đó sẽ làm cho thư mục

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9 khả dụng. Trong chính Dockerfile, tôi cần biết bối cảnh xây dựng là gì, vì tôi cần điều chỉnh các đường dẫn cho phù hợp. Ví dụ cụ thể cho cấu trúc thư mục ở trên và bản dựng được kích hoạt qua
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
74

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
55

Bối cảnh xây dựng cho tất cả các vùng chứa của chúng tôi sẽ là thư mục

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
8, để tất cả các quy trình xây dựng có quyền truy cập vào các tập lệnh và cấu hình của
; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
9. Vâng, điều đó cũng có nghĩa là bộ chứa
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02 có quyền truy cập vào các tệp chỉ liên quan đến bộ chứa
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
78 [ví dụ], nhưng hình phạt về hiệu suất là hoàn toàn có thể bỏ qua. Ngoài ra, miễn là chúng tôi không chủ động
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
68 những tệp không liên quan đó, chúng sẽ không làm hình ảnh của chúng tôi phình to

Một vài lưu ý. - Tôi từng nghĩ rằng build context luôn gắn liền với vị trí của Dockerfile nhưng đó chỉ là mặc định, nó có thể là bất kỳ thư mục nào - thực ra build context được gửi đến quá trình build - tôi. e. bạn nên tránh các tệp/thư mục không cần thiết vì điều này có thể ảnh hưởng đến hiệu suất, đặc biệt là trên các tệp lớn [iaw. không sử dụng

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
80 làm ngữ cảnh. ] - tương tự như
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
81, Docker biết khái niệm a để loại trừ các tệp khỏi việc đưa vào bối cảnh xây dựng

mẫu Dockerfile

Dockerfiles cho các container gần như tuân theo cấu trúc được nêu bên dưới

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
56

Các nhận xét sẽ đủ để cung cấp cho bạn một cái nhìn tổng quan - vì vậy hãy nói chi tiết về các phần riêng lẻ

Đặt múi giờ

Kịch bản.

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
83

Hãy bắt đầu với một điều đơn giản và rõ ràng. Đảm bảo rằng tất cả các vùng chứa sử dụng cùng một múi giờ hệ thống [xem tại đây và tại đây]

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
57

Tập lệnh sau đó được gọi từ

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
66 qua

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
58

Đồng bộ hóa quyền sở hữu tệp và thư mục trên ổ đĩa được chia sẻ

Kịch bản.

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
85

Docker giúp chia sẻ tệp giữa các vùng chứa thực sự dễ dàng bằng cách sử dụng ổ đĩa. Để đơn giản, bạn có thể hình dung một ổ đĩa đơn giản như một đĩa bổ sung mà nhiều vùng chứa có quyền truy cập. Và vì chúng ta đang nói về PHP ở đây, chia sẻ các tệp ứng dụng giống nhau là một yêu cầu phổ biến [e. g. cho

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02,
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
13,
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
88]

Miễn là bạn chỉ xử lý một container, cuộc sống thật dễ dàng. Bạn có thể chỉ cần

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
89 tệp cho đúng người dùng. Nhưng vì các vùng chứa có thể có thiết lập người dùng khác nên quyền/quyền sở hữu trở thành một vấn đề. Hãy xem video này trên Docker & File Permissions để biết ví dụ thực tế trong ứng dụng Laravel

Điều đầu tiên đối với tôi là hiểu rằng quyền sở hữu tệp không phụ thuộc vào tên người dùng mà phụ thuộc vào id người dùng. Và bạn có thể đã đoán ra. Hai vùng chứa có thể có một người dùng có cùng tên nhưng có id khác nhau. Điều này cũng đúng với các nhóm, btw. Bạn có thể kiểm tra id bằng cách chạy

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
90, e. g

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
59

Điều đó bất tiện nhưng khá dễ giải quyết trong hầu hết các trường hợp, vì chúng tôi có toàn quyền kiểm soát các vùng chứa và có thể gán id theo ý muốn [sử dụng

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
91] và do đó đảm bảo mọi vùng chứa sử dụng cùng tên người dùng với cùng id người dùng

Mọi thứ trở nên phức tạp khi volume không chỉ là Docker volume mà là shared folder trên host. Đây thường là những gì chúng tôi muốn để phát triển, để những thay đổi trên máy chủ được phản ánh ngay lập tức trong tất cả các vùng chứa

Sự cố này chỉ ảnh hưởng đến người dùng có hệ thống máy chủ linux. Docker Desktop [trước đây gọi là Docker cho Mac / Docker cho Win] có một lớp ảo hóa ở giữa sẽ xóa tất cả các cài đặt quyền sở hữu một cách hiệu quả và cung cấp mọi thứ được chia sẻ từ máy chủ cho mọi người dùng trong một vùng chứa

Chúng tôi sử dụng tập lệnh sau để đảm bảo thiết lập người dùng nhất quán khi xây dựng vùng chứa

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
70

Tập lệnh sau đó được gọi từ

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
66 qua

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
71

Các giá trị mặc định có thể được ghi đè bằng cách chuyển vào tương ứng

Người dùng Linux nên sử dụng id người dùng của người dùng trên hệ thống máy chủ của họ - đối với người dùng Docker Desktop, các giá trị mặc định đều ổn

Sửa đổi tập tin cấu hình

Đối với hầu hết các dịch vụ, chúng tôi có thể cần một số cài đặt cấu hình tùy chỉnh, như - cài đặt php. ini - thay đổi người dùng mặc định của dịch vụ - thay đổi vị trí của tệp nhật ký

Có một vài
cách tiếp cận phổ biến để sửa đổi cấu hình ứng dụng trong docker và chúng tôi hiện đang cố gắng tuân theo hai quy tắc. 1. cung cấp các tệp bổ sung ghi đè giá trị mặc định nếu có thể 2. thay đổi các giá trị không tĩnh bằng một tìm kiếm đơn giản và thay thế qua

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
93 trong quá trình xây dựng vùng chứa

Cung cấp các tập tin cấu hình bổ sung

Hầu hết các dịch vụ cho phép đặc tả các tệp cấu hình bổ sung ghi đè các giá trị mặc định trong tệp cấu hình mặc định. Điều này thật tuyệt vì chúng tôi chỉ cần xác định các cài đặt mà chúng tôi thực sự quan tâm thay vì sao chép toàn bộ tệp có nhiều giá trị dư thừa

Lấy ví dụ. Nó cho phép đặt các tệp

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
95 bổ sung vào một thư mục cụ thể để ghi đè các giá trị mặc định. Một cách dễ dàng để tìm thư mục này là
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
96

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
72

Vì vậy, thay vì cung cấp tệp

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
94 "đầy đủ", thay vào đó, chúng tôi sẽ sử dụng tệp
git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
81, chỉ chứa tệp. ini mà chúng tôi thực sự muốn thay đổi và đặt nó dưới
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
99

Tại sao lại là

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
000?

[. ] Trong mỗi thư mục, PHP sẽ quét tất cả các tệp kết thúc bằng. ini theo thứ tự bảng chữ cái

vì vậy nếu chúng tôi muốn đảm bảo rằng chúng tôi. ini xuất hiện sau cùng [ghi đè tất cả các cài đặt trước đó], chúng tôi sẽ cung cấp cho nó một tiền tố tương ứng. ]

Toàn bộ quá trình sẽ như thế này. - đặt tệp vào thư mục

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
8, e. g. tại
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
002 - chuyển thư mục dưới dạng bối cảnh xây dựng - trong Dockerfile, sử dụng
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
003

Thay đổi giá trị không tĩnh

Kịch bản.

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
82

Một số giá trị cấu hình tùy thuộc vào cài đặt cục bộ và do đó không được mã hóa cứng trong tệp cấu hình. Lấy cấu hình

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
005 cho
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02 làm ví dụ. Có thể ai đó trong nhóm chỉ có thể dành một lượng bộ nhớ hạn chế cho docker, vì vậy
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
005 phải được giữ ở mức thấp hơn bình thường

Chúng tôi sẽ tính đến thực tế đó bằng cách sử dụng một biến có tiền tố là

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
008 thay vì giá trị thực và thay thế nó bằng một đối số động trong Dockerfile. Ví dụ cho
git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
81 đã nói ở trên

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
73

Chúng tôi sử dụng tập lệnh sau

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
82 để thay thế giá trị

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
74

Tập lệnh sau đó được gọi từ

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
66 qua

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
75

trong đó

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
012 có giá trị mặc định là
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
013 nhưng có thể bị ghi đè khi bắt đầu quá trình xây dựng thực tế

Cài đặt tiện ích mở rộng php

Kịch bả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
014

Khi các phần mở rộng php bị thiếu, googling thường sẽ chỉ ra câu trả lời cho các hệ thống linux bình thường sử dụng

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
015 hoặc
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
016, e. g.
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
017. Nhưng đối với hình ảnh docker chính thức, cách được đề xuất là sử dụng. Thật không may, một số tiện ích mở rộng có phần phụ thuộc khá phức tạp nên việc cài đặt không thành công. May mắn thay, có một dự án tuyệt vời trên Github có tên là docker-php-extension-installer đảm nhận việc đó cho chúng tôi và cực kỳ dễ sử dụng

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
76

Readme cũng chứa một phiên bản PHP. Để đảm bảo rằng tất cả các vùng chứa PHP của chúng tôi đều có cùng phần mở rộng, chúng tôi cung cấp tập lệnh sau

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
77

Nếu bạn không chắc ứng dụng của mình yêu cầu tiện ích mở rộng nào, hãy dùng thử ComposerRequireChecker

Cài đặt phần mềm thông dụng

Kịch bả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
018

Có một bộ phần mềm nhất định mà tôi muốn có sẵn trong mọi vùng chứa. Vì đây là thiết lập phát triển nên tôi ưu tiên tính dễ sử dụng/gỡ lỗi hơn hiệu suất/kích thước hình ảnh, vì vậy điều này có vẻ hơi "quá nhiều". Tôi nghĩ rằng tôi cũng hơi bị nuông chiều bởi quá khứ Homestead của mình, bởi vì thật tiện lợi khi có mọi thứ ngay trong tầm tay của bạn. ]

Dù sao, kịch bản là thẳng về phía trước

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
78

ghi chú. - danh sách này phải phù hợp với bộ công cụ truy cập của riêng bạn. Tôi khá cởi mở trong việc thêm nội dung mới vào đây nếu nó tăng tốc quy trình làm việc của nhà phát triển. Nhưng nếu bạn không cần một số công cụ, hãy loại bỏ chúng. - sắp xếp phần mềm theo thứ tự bảng chữ cái là một cách thực hành tốt để tránh trùng lặp không cần thiết. Đừng làm điều này bằng tay, mặc dù. Nếu bạn đang sử dụng IDE/trình soạn thảo văn bản đã được thiết lập, rất có thể đây là chức năng tích hợp sẵn hoặc có sẵn plugin. Tôi đang sử dụng Trình sắp xếp dòng cho PhpStorm

Dọn dẹp

Kịch bả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
019

Đẹp và đơn giản

git clone //github.com/paslandau/docker-php-tutorial.git
cd docker-php-tutorial
git checkout part_3_structuring-the-docker-setup-for-php-projects
make docker-clean
make docker-init
make docker-build-from-scratch
make docker-test
79

Sử dụng
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 cho cấu hình trước khi chạy

Docker đã quay trở lại gốc unix với điều được thể hiện trong hướng dẫ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
021 và
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6

Vì tôi đã gặp khó khăn trong việc hiểu những hướng dẫn đó khi bắt đầu với Docker, đây là cách tôi mô tả các thuật ngữ của một giáo dân. - vì một container nên làm một việc, chúng ta cần chỉ định điều đó. Đó là những gì chúng tôi làm với

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6. ví dụ cụ thể. - một bộ chứa
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
78 có lẽ nên chạy trình nề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
025 - một bộ chứa
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02. tốt,
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02 -
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
021 được chuyển làm đối số mặc định cho
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 -
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 được thực thi mỗi khi chúng tôi chạy một vùng chứa. Một số điều không thể được thực hiện trong quá trình xây dựng mà chỉ trong thời gian chạy [e. g. tìm IP của máy chủ từ bên trong vùng chứa - xem phần Cung cấp
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
7 cho hệ thống máy chủ linux ] -
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 là một giải pháp tốt cho vấn đề đó - về mặt kỹ thuật, chúng tôi chỉ có thể ghi đè một
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 đã tồn tại từ hình ảnh cơ sở. Nhưng mà. Chúng ta có thể cấu trúc
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 mới giống như một công cụ trang trí bằng cách thêm
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
035 vào cuối để mô phỏng sự kế thừa từ hình ảnh gốc

Để mở rộng điểm cuối cùng, hãy xem xét

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 mặc định của [2019-02-23; . 3] Hình ảnh
/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
0

Trong chúng tôi tìm thấy các hướng dẫn sau

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
1

Điều đó có nghĩa là. Khi chúng tôi chạy vùng chứa, nó sẽ chuyển chuỗi "php-fpm" tới tập lệnh

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6
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
039 làm đối số, sau đó sẽ thực thi nó [do hướng dẫ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
035 ở cuối]

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
2

Bây giờ chúng ta có thể ghi đè "php-fpm" mặc định của

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
021 bằng một thứ khác, e. g. một
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
042 đơn giản.
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 sẽ vui vẻ thực hiện nó

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
3

Nhưng bây giờ quy trình

/
├── .docker/
|   ├── .shared/
|   |   ├── config/
|   |   └── scripts/
|   ├── php-fpm/
|   |   └── Dockerfile
|   ├── .. /
|   ├── .env.example
|   ├── docker-compose.yml
|   └── docker-test.sh
├── Makefile
├── index.php
└──  .. /
02 không bắt đầu nữa. Làm cách nào chúng tôi có thể lặp lại "xin chào" nhưng vẫn tiếp tục chạy quy trình fpm?

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
4

Ví dụ đầy đủ [sử dụng qua chuỗi Heredoc]

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
5

Lưu ý rằng chúng tôi đã thêm

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 của hình ảnh gốc ________ 1039 làm đối số cho tập lệnh _________ 36 của riêng chúng tôi ________ 1049 để chúng tôi không làm mất chức năng của nó. Và chúng tôi cần xác định rõ ràng hướng dẫ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
021, bởi vì hướng dẫn từ hình ảnh gốc sẽ tự động bị xóa sau khi chúng tôi xác định
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 của riêng mình

Nhưng mà. nó hoạt động

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
6

Cung cấp
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
7 cho hệ thống máy chủ linux

Kịch bả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
053

Trong phần trước của loạt bài hướng dẫn này, tôi đã giải thích cách xây dựng bộ chứa Docker sao cho nó hoạt động tốt với PhpStorm và Xdebug. Các phần quan trọng là quyền truy cập SSH và mục nhập DNS

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
7 kỳ diệu. Điều này hoạt động tốt cho Docker Desktop [Windows và Mac] nhưng không hoạt động cho Linux. Mục nhập DNS không tồn tại ở đó. Vì chúng tôi dựa vào mục nhập đó, nên chúng tôi sẽ đặt "thủ công" nếu máy chủ không tồn tại với tập lệnh sau [lấy cảm hứng từ bài viết Truy cập máy chủ từ bộ chứa docker]

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
7

Tập lệnh được đặt tại

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
055 và được thêm dưới dạng
|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 trong Dockerfile qua

; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
8

ghi chú. - vì tập lệnh này phụ thuộc vào cấu hình thời gian chạy, nên chúng tôi cần chạy nó dưới dạng

|   ├── php-fpm/
|   |   ├── php-fpm.d/
|   |   |   └── pool.conf
6 - không cần kiểm tra rõ ràng loại HĐH - chúng tôi chỉ cần đảm bảo rằng mục nhập DNS tồn tại và thêm nó nếu không có - chúng tôi' . Mẹo. Nếu bạn cần tìm ra gói cho một lệnh cụ thể, hãy cung cấp https. //lệnh không tìm thấy. com/ thử. Ví dụ, xem mục nhập cho
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
058. - cách giải quyết này chỉ bắt buộc trong các vùng chứa mà chúng tôi muốn gỡ lỗi qua xdebug

kết thúc

Xin chúc mừng, bạn đã làm được. Nếu bây giờ một số điều không hoàn toàn rõ ràng, đừng ngần ngại để lại nhận xét. Ngoài ra, bây giờ bạn sẽ có một thiết lập docker đang chạy để phát triển PHP cục bộ của mình cũng như một "dòng chảy" thú vị để bắt đầu mỗi ngày

Trong phần tiếp theo của hướng dẫn này, chúng ta sẽ thêm một số vùng chứa khác [php worker, mysql, redis] và sử dụng bản cài đặt mới của Laravel 9 để sử dụng chúng

Vui lòng đăng ký nguồn cấp RSS hoặc để nhận thông báo tự động khi phần tiếp theo này ra mắt. ]

Muốn giữ liên lạc?

Vì bạn đã kết thúc blog này, nên khả năng cao là bạn sẽ tham gia Phát triển phần mềm [có thể là PHP, Laravel, Docker hoặc Google Big Query] và tôi là một người rất thích phản hồi và kết nối mạng

Vì vậy - nếu bạn muốn giữ liên lạc, vui lòng gửi email cho tôi với đôi lời về bản thân và/hoặc kết nối với tôi trên LinkedIn hoặc Twitter hoặc chỉ cần đăng ký nguồn cấp dữ liệu RSS của tôi hoặc đi theo con đường điên rồ và đăng ký . ]

Theo dõi bài viết qua mail

Địa chỉ email

Họ

Chúng tôi sử dụng Mailchimp làm nhà cung cấp bản tin của mình. Bằng cách nhấp vào đăng ký, bạn xác nhận rằng thông tin của bạn sẽ được chuyển đến Mailchimp để xử lý. Tìm hiểu thêm về thực tiễn bảo mật của Mailchimp tại đây

Làm cách nào để thiết lập PHP với docker?

Trong các bước sau, chúng ta đang tạo và chạy ứng dụng php. .
Tạo một thư mục
Tạo một tệp Php
Tạo một DockerFile
Tạo hình ảnh Docker
Chạy hình ảnh Docker

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

DAMP - Thiết lập máy chủ cục bộ Apache, MySQL & PHP bằng Docker .
Tạo một thư mục mới cho máy chủ cục bộ của bạn [MY_APP được sử dụng làm trình giữ chỗ]
Thêm docker-compose. yml, Dockerfile và nginx. .
Với ứng dụng đầu cuối yêu thích của bạn

Docker có PHP không?

Phần mở rộng lõi PHP . Không cần phải chạy docker-php-source theo cách thủ công trong trường hợp này, vì điều đó được xử lý bởi các tập lệnh cấu hình và cài đặt. If an extension needs custom configure arguments, you can use the docker-php-ext-configure script like this example. There is no need to run docker-php-source manually in this case, since that is handled by the configure and install scripts.

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 tiện ích mở rộng PHP trong hình ảnh PHP Docker chính thức .
Tải xuống tập lệnh một cách nhanh chóng. Với Dockerfile. .
Sao chép tập lệnh từ hình ảnh Docker. .
Cài đặt các phiên bản cụ thể của tiện ích mở rộng. .
Cài đặt từ mã nguồn. .
cài đặt trình soạn nhạc. .
Sự cố với chứng chỉ Let's Encrypt

Chủ Đề