容器化你的 PHP 應用程式 (nginx)
tags: Docker
Nginx
PHP
category: Back-End
description: 容器化你的 PHP 應用程式 (nginx)
created_at: 2021/08/31 22:00:00
前言
暫時懶得想,今天寫了一堆code有點累
事前準備
- 裝好
Docker
環境
拉 Image 下來
這裡使用 Nginx
$ docker pull nginx
PHP 使用 php-fpm
$ docker pull php:8.0-fpm
建立 Docker network
預設是 bridge
, 同一個 bridge
下的容器網路互通,還有其他種模式可以使用,但這邊使用 bridge
$ docker network create my-network
假設目錄結構是這樣
- /root
- /conf.d
- /default.conf
- www
- /index.php
- /conf.d
設定檔直接拿 Laravel 官方的來小改一下
default.conf
server {
listen 80;
server_name example.com;
root /var/www/html;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass php80-fpm:9000; # <--- 主要改了這個
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
index.php
<?php
phpinfo();
先這樣子測試是否運作正常。
建立容器
首先是 php-fpm
$ docker run -d \
--name php80-fpm \
-v {專案目錄}:/var/www/html \
--network my-network
php:8.0-fpm
再來是 nginx
$ docker run -d \
--name nginx \
-p 8000:80 \
-v {設定檔目錄}:/etc/nginx/conf.d \
-v {專案目錄}:/var/www/html \
--network my-network \
nginx
需要注意的是 Windows 不支援這種寫法,要把結尾的 \
都刪除變為一行。所以我是一行寫完再整理成這個格式比較好呈現的
主要就是幫容器做幾件事
- -d: 背景執行(daemon)
- --name: 幫容器取名
- -p:
port
映射,主機port:容器port - -v: 掛
volume
,可以想像成掛載目錄給他 - --network: 設定網路
- 最後一行是要建立的 image
最後到你的瀏覽器上面開啟 localhost:8000
應該就會看到 phpinfo
生成的頁面。
轉換至 docker-compose
建立 docker-compose.yml
version: "3.9"
services:
nginx:
image: nginx:latest
container_name: nginx
networks:
- my-network
ports:
- 8000:80
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./www:/var/www/html
php80-fpm:
image: php:8.0-fpm
container_name: php80-fpm
networks:
- my-network
volumes:
- ./www:/var/www/html
networks:
my-network:
driver: bridge
然後執行下面的指令就可以一次在背景執行2個服務
$ docker-compose up -d
這時候在去 localhost:8000
一樣可以看到結果
如果要把服務關掉,一樣只要一行,就可以把兩個服務刪除。
$ docker-compose down
最後更新時間: 2021年08月31日.