经过上次在Ubuntu上安装PHP环境后, Ubuntu20.04安装nginx&php环境以及swoole&redis扩展,这几天需要更换PHP版本,然后扩展又得再装一遍,感觉到了分外麻烦。在网上找方便快捷解决方案的时候Docker进入了我的眼中。本文介绍如何使用Docker快速搭建部署LNMP环境
Docker是什么?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
准备工作
学习Docker:在网上找了一些Docker的基础资料[1],然后开始尝试
准备基础镜像:PHP[2],Mysql[3],Nginx[4],Redis[5]
然后在原始PHP镜像中装入自己常用的PHP扩展和Composer1、Composer2,打包上传https://hub.docker.com/r/itwmw/php,这个镜像也是下文要用的
正式准备工作
安装Docker
Ubuntu系统以及Debian系统
sudo apt-get update
sudo apt-get install -y docker
Centos系统
yum update
yum install docker
安装完毕后输入docker -v即可看到版本号
安装docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
首先创建一个lnmp文件夹
mkdir lnmp
cd lnmp
进入lnmp文件夹后,将下面内容复制到docker-compose.yaml文件内
version: ‘3’
services:
nginx:
image: nginx:1.19
restart: always
ports:
- “80:80”
- “443:443”
links:
- php:php
volumes:
- “/data/conf.d:/etc/nginx/conf.d”
- “/data/www:/data/www”
php:
image: itwmw/php:7.4-fpm
restart: always
ports:
- “9000:9000”
volumes:
- “/data/www:/data/www”
links:
- mysql:mysql
- redis:redis
mysql:
image: mysql:8.0
restart: always
ports:
- “3306:3306”
- “33060:33060”
volumes:
- “/data/mysql8:/var/lib/mysql”
environment:
MYSQL_ROOT_PASSWORD: 123456
redis:
image: redis:6.0
restart: always
command: redis-server --appendonly yes
ports:
- “6379:6379”
volumes:
- “/data/redis6:/data”
如果不需要Redis,可以删除redis那一栏,并把php下的links内的redis也删除掉,
/data为对应你本地的目录;
/data/www为你的网站储存目录;
/data/conf.d为对应你的Nginx配置目录;
/data/mysql8为对应你的Mysql数据储存目录;
/data/redis6为对应你的Redis数据持久化存储目录;
如果想修改组件的版本号,可以修改image后面的版本号,具体有哪些版本,可以Docker Hub内的信息[2][3][4][5][6]
生成容器
准备工作完成后,在lnmp目录下执行下面命令生成容器
docker-compose up -d
正常情况下,如果你没有pull过镜像,你会有一个拉取镜像的过程,这里已经拉取过镜像,所以直接创建成功了,通过命令
docker ps
可以查看当前存在并运行中的程序
这个时候,可以输入 http://ip 查看到Nginx的页面了
配置Nginx
我们在/data/conf.d中简单配置一个Nginx的配置项,如果你对Nginx配置你熟悉,可以使用这个:配置高性能、安全、稳定的NGINX服务器的最简单方法。
server {
listen 80;
server_name 127.0.0.1;
keepalive_timeout 75s;
keepalive_requests 100;
root /data/www;
location / {
index index.html index.htm index.php;
}
location ~ ^/.+\.php(/|$) {
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_read_timeout 60s;
fastcgi_pass php:9000;
include fastcgi_params;
}
}
上面内容复制到/www/conf.d/127.0.0.1.conf文件中(conf.d目录如果你自己改过,请改为相应的目录),然后让Nginx重载配置,使新配置生效
docker exec -it lnmp_nginx_1 service nginx reload
紧接着,我们在网站目录/data/www下创建一个index.php文件,并将下面内容复制进去