Docker nginx + php-fpm

Mục tiêu mà chúng tôi sẽ cố gắng đạt được là chạy một ứng dụng PHP đơn giản bằng cách sử dụng kho Docker chính thức cho cả PHP và Nginx. Có một số kho lưu trữ docker kết hợp PHP-FPM với Nginx, nhưng tùy thuộc vào kho lưu trữ chính thức sẽ mang lại cho bạn một số lợi ích, chẳng hạn như sử dụng dịch vụ được định cấu hình bởi người bảo trì và bạn luôn có thể chọn giữa phiên bản mới nhất và lớn nhất hoặc phiên bản khác nhau của cả hai dịch vụ,

Tất nhiên, điều đầu tiên bạn phải làm là cài đặt Docker (nếu bạn chưa có). Điều kiện tiên quyết thứ hai là tải Docker Compose (có sẵn trong hộp công cụ Mac). Bây giờ chúng ta đã biết mình muốn đạt được điều gì và có các công cụ để đạt được điều đó – hãy bắt tay vào làm

Thiết lập Nginx

Chúng tôi sẽ bắt đầu bằng cách tự nhận một máy chủ web và dựa trên các yêu cầu của chúng tôi, đây sẽ là vùng chứa chạy hình ảnh Nginx chính thức. Vì chúng ta sẽ sử dụng Docker Compose nên chúng ta sẽ tạo docker-compose sau. yml, tệp này sẽ chạy hình ảnh Nginx mới nhất và sẽ hiển thị cổng 80 của nó thành cổng 8080

web:
 image: nginx:latest
 ports:
 - "8080:80"

Bây giờ chúng ta có thể chạy

docker-compose up

Điều này sẽ cung cấp cho bạn màn hình Nginx mặc định trên cổng 8080 cho máy chủ cục bộ hoặc IP của máy docker của bạn

Docker nginx + php-fpm

Bây giờ chúng ta có một máy chủ, hãy thêm một số mã. Đầu tiên chúng ta phải cập nhật docker-compose. yml để gắn thư mục cục bộ. Tôi sẽ sử dụng một thư mục có tên code, nằm trong cùng thư mục với docker-compose của tôi. yml và nó sẽ được gắn dưới dạng mã thư mục gốc trong vùng chứa

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./code:/code

Bước tiếp theo là cho Nginx biết rằng thư mục này tồn tại
Hãy tạo trang web sau. conf ở cùng cấp độ với docker-compose. tập tin yml

server {
    index index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /code;
}

Nếu bạn không có nhiều kinh nghiệm với Nginx, đây là những gì chúng tôi xác định ở đây – chỉ mục. html sẽ là chỉ mục mặc định của chúng tôi, tên máy chủ là php-docker. local và nó phải trỏ (cập nhật tệp máy chủ của bạn) vào môi trường Docker của bạn (máy chủ cục bộ nếu bạn đang sử dụng Linux hoặc máy docker nếu bạn đang sử dụng Mac hoặc Windows), chúng tôi chỉ ra các nhật ký lỗi là những nhật ký được hiển thị bởi bộ chứa mặc định

Để kích hoạt thiết lập này, chúng tôi cần áp dụng một sửa đổi khác đối với docker-compose. tập tin yml

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./code:/code
        - ./site.conf:/etc/nginx/conf.d/site.conf

Điều này sẽ thêm trang web. conf vào thư mục mà Nginx đang tìm kiếm các tệp cấu hình để đưa vào. Giờ đây, bạn có thể đặt chỉ mục. html trong thư mục mã có nội dung khiến bạn hài lòng. Và nếu chúng ta chạy

docker-compose up

một lần nữa, chỉ mục. tệp html phải khả dụng trên php-docker. địa phương. 8080

vâng. Chúng ta đã đi được nửa chặng đường

Thêm PHP-FPM

Bây giờ chúng ta đã thiết lập và chạy Nginx, hãy thêm PHP vào trò chơi. Điều đầu tiên chúng tôi sẽ làm là kéo repo PHP7-FPM chính thức và liên kết nó với bộ chứa Nginx của chúng tôi. docker-compose của chúng tôi. yml sẽ trông như thế này bây giờ

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./code:/code
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm

Điều tiếp theo cần làm là định cấu hình Nginx để sử dụng bộ chứa PHP-FPM để diễn giải các tệp PHP. Trang web cập nhật của bạn. conf sẽ trông như thế này

server {
    index index.php index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /code;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Để kiểm tra điều này, hãy đổi tên chỉ mục. tệp html để lập chỉ mục. php và thay thế nội dung của nó bằng tiêu chuẩn

________số 8_______

một trận chung kết

docker-compose up

Và chúng ta nên tốt để đi. Nhưng

Thay vì nhận được trang thông tin PHP thích hợp, chúng tôi nhận được thông báo khá đáng lo ngại

docker-compose up
0

Vì PHP đang chạy trong môi trường riêng của nó (vùng chứa) nên nó không có quyền truy cập vào mã. Để khắc phục điều này, chúng ta cũng cần gắn thư mục mã trong bộ chứa PHP. Bằng cách này, Nginx sẽ có thể phục vụ bất kỳ tệp tĩnh nào và PHP sẽ có thể tìm thấy các tệp mà nó phải diễn giải. Một thay đổi cuối cùng đối với docker-compose. yml

docker-compose up
1

Cuối cùng, lần cuối cùng này (lần này là thật)

docker-compose up

cung cấp cho chúng tôi thông tin PHP mong muốn

Docker nginx + php-fpm

Đây chính là nó

Chúng ta có thể chạy bất kỳ ứng dụng PHP đơn giản nào bên trong bộ chứa Docker, sử dụng hình ảnh chính thức cho Nginx và PHP

Bạn có thể tìm thấy dự án mẫu tại đây https. //github. com/mikechernev/dockerised-php

BIÊN TẬP. Vì kho lưu trữ GitHub đã thay đổi khá nhiều, tôi đã thêm một bài đăng blog mới giải thích các cải tiến - Làm cho ứng dụng PHP dockerised của bạn thậm chí còn tốt hơn