经过上次在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 remove docker docker-common docker-selinux docker-engine
# 安装Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
# 启动Docker
systemctl start docker
# 加入开机自启
systemctl enable docker
安装完毕后输入docker -v
即可看到版本号
安装docker-compose
在https://github.com/docker/compose/releases
获取最新版本进行下载安装
或直接使用命令:
Centos:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.1.0/docker-compose-$(name=$(uname -s)&& echo ${name,})-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose --version
关于国内下载Github资源慢或者无法下载,可以使用Git加速工具
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
文件,并将下面内容复制进去
<?php
echo "PHP脚本解析成功 <br />";
try {
$conn = "mysql:host=mysql;port=3306;charset=utf8mb4";
$pdo = new PDO($conn, "root", "123456");
echo "Mysql 连接成功<br />";
}catch (PDOException $e){
echo "Mysql 连接失败<br />";
}
$redis = new Redis();
$redis->connect('redis',6379,5);
try {
$redis->ping();
echo "Redis 连接成功<br />";
$redis->close();
}catch (RedisException $e){
echo "Redis 连接失败<br />";
}
重新访问你的网站http:ip

到此Lnmp配置完成,可以正常使用PHP,Mysql,Redis了
其他命令
- 关闭单个容器
docker stop [容器ID或者名称]
- 启动单个容器
docker start[容器ID或者名称]
- 删除单个容器
docker rm [容器ID或者名称]
此命令必须在Docker停止后才可执行,否则请加-f
参数 - 容器编组启动,在编组目录下执行
docker-compose start
- 容器编排停止,在编组目录下执行
docker-compose stop
- 容器编排删除,在编组目录下执行
docker-compose rm
此命令必须在Docker停止后才可执行,否则请加-f
参数