docker-compose搭建nginx+php環境
准備工作
docker-compose的下載安裝:
創建工作目錄和需要掛載的目錄:
# 工作目錄(一會兒docker-compose命令將在工作目錄下執行)
mkdir -p /disk2/docker/docker-compose
# 需要掛載的目錄
mkdir -p /disk2/www
mkdir -p /disk2/nginx/log
mkdir -p /disk2/nginx/conf.d
# 進入工作目錄
cd /disk2/docker/docker-compose
添加nginx配置:
vim /disk2/nginx/conf.d/detault.conf
把下面配置放到default.conf
server {
listen 80 default_server;
server_name localhost;
root /usr/share/nginx/html;
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
編寫docker-compose.yml文件
創建docker-compose.yml
vim /disk2/docker/docker-compose/docker-compose.yml
先上yml文件, 然后再說明作用
version: "3"
services:
nginx:
image: nginx:latest
container_name: "compose-nginx"
restart: always
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai
depends_on:
- "php"
volumes:
- "/disk2/nginx/conf.d:/etc/nginx/conf.d"
- "/disk2/www:/usr/share/nginx/html"
- "/disk2/nginx/log:/var/log/nginx"
networks:
- net-app
php:
image: php:7.4-fpm
container_name: "compose-php"
restart: always
ports:
- "9000:9000"
environment:
- TZ=Asia/Shanghai
volumes:
- "/disk2/www:/usr/share/nginx/html"
networks:
- net-app
networks:
net-app:
version: 指定compose版本, 目前主流版本3.x,支持docker1.13.0及以上的版本
services: 定義服務信息
nginx和php: 用戶自定義,表示服務名稱
image: 鏡像
container_name: 容器名稱
restart: 定義重啟策略
no:是默認的重啟策略,在任何情況下都不會重啟容器。
always:容器總是重新啟動。
on-failure:在容器非正常退出時(退出狀態非0),才會重啟容器。
unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經停止了的容器
ports: 設置宿主機和容器之間的端口映射關系
environment: 設置環境變量(TZ=Asia/Shanghai:設置時區)
volumes: 數據卷,定義映射關系,將目錄或文件掛載到容器
networks: 定義網絡信息,詳細的可以去這里看看https://deepzz.com/post/docker-compose-file.html#toc_31
depends_on: 設置依賴關系,可以讓docker-compose按依賴關系啟動
執行docker-compose
docker-compose up -d
運行命令后鏡像下載了,但是卻出現了些問題(沒有問題的跳過該部分)
?出現端口占用
解決:利用下面命令找出端口,停止或kill
netstat -tunlp|grep 端口
? 掛載目錄或文件出現問題
解決: 檢查目錄或文件是否存在
修改配置文件后,重啟容器
docker-compose up -d --force-recreate
啟動成功:
現在來試試:
vim /disk2/www/index.php
在文件添加一下內容
<?php phpinfo();
可以正常訪問: