docker-compose搭建nginx+php环境
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();
可以正常访问: