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
47FROM 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
48version: '1.0'
steps:
main_clone:
title: Cloning main repository...
type: git-clone
repo: 'codefresh-contrib/php-composer-sample-app'
revision: master
git: github
MyAppDockerImage:
title: Building Docker Image
type: build
image_name: my-php-image
working_directory: ./
tag: master
dockerfile: Dockerfile
Khi bạn chạy đường dẫn này, Codefresh sẽ tạo hình ảnh Docker cho ứng dụng Php
Lưu ý rằng tất cả các phụ thuộc được tải xuống khi dockerfile được tạo
Khởi chạy hình ảnh Docker
Codefresh cũng có thể khởi chạy Docker image [sử dụng Docker swarm phía sau hậu trường]. Với mỗi tài khoản Codefresh, bạn có quyền truy cập vào một số môi trường Docker giới hạn có thể lưu trữ bất kỳ hình ảnh Docker hoặc tệp soạn thảo Docker nào
Trước tiên hãy tìm hình ảnh của bạn trong
Nhấp vào nút khởi chạy và một quy trình mới sẽ chạy để triển khai
Lưu ý rằng nhật ký đường ống hiển thị URL động của ứng dụng. Chỉ cần truy cập nó bằng trình duyệt của bạn và bạn sẽ thấy kết quả
Lưu ý rằng các môi trường này chỉ dành cho thử nghiệm và xem trước ứng dụng của bạn khi nó được phát triển. Chúng KHÔNG dành cho mục đích sản xuất
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ố 8Cá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
8version: '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
0Cũ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
; enable opcache
opcache.enable_cli = 1
opcache.enable = 1
opcache.fast_shutdown = 1
; revalidate everytime [effectively disabled for development]
opcache.validate_timestamps = 0
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
| ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
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
| ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
| ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
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ầnMakefile
| ├── 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
77sversion: '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
5php-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
9git 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
7Hiệ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
7nginx
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
8Xin 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
└── .. /
0Có 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
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 quagit 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
87git 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
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
└── .. /
1Tệ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
└── .. /
4Thiế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
└── .. /
20env. 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
└── .. /
5Cá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
└── .. /
6Bâ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
└── .. /
7Chú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
└── .. /
9Lư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
00và
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
01Bả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
02Vì 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
03và 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
04Kiể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
05và 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
06Makefile và | ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
3
| ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
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âmSử dụng | ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
4 làm điểm vào trung tâm
| ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
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ìnhCả 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 tabGhi 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ẵnversion: '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
07Là 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
08Cà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
└── .. /
57Truy cập container dễ dàng thông qua | ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
5. trình trợ giúp bashrc
| ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
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ạnversion: '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
09Phầ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ìnhNguyê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útHiể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
50giả đị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
52Giả 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 quagit 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
53bố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ạygit 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
54tuy 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
└── .. /
74git 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
55Bố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 toMộ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ựngmẫ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
56Cá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
└── .. /
83Hã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
57Tậ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 quagit 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
└── .. /
85Docker 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. ggit 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ùngMọ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
70Tậ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 quagit 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
71Cá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ứaCung 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
└── .. /
96git 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
72Vì 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
└── .. /
99Tạ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
003Thay đổ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
82Mộ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ườngChú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êngit 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
73Chú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
74Tậ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 quagit 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
75trong đó
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
014Khi 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ụnggit 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
76Readme 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
77Nế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
018Có 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
78ghi 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
79Sử dụng | ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
6 cho cấu hình trước khi chạy
| ├── php-fpm/
| | ├── php-fpm.d/
| | | └── pool.conf
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
6Vì 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
0Trong 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
2Bâ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
3Như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
4Ví 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
5Lư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ìnhNhư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
6Cung 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
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
053Trong 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
7Tậ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
8ghi 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 xdebugkế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