使用Docker快速搭建部署LNMP环境

经过上次在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文件,并将下面内容复制进去

"; try { $conn = "mysql:host=mysql;port=3306;charset=utf8mb4"; $pdo = new PDO($conn, "root", "123456"); echo "Mysql 连接成功
"; }catch (PDOException $e){ echo "Mysql 连接失败
"; } $redis = new Redis(); $redis->connect('redis',6379,5); try { $redis->ping(); echo "Redis 连接成功
"; $redis->close(); }catch (RedisException $e){ echo "Redis 连接失败
"; } 重新访问你的网站http:ip

你可能感兴趣的:(docker,linux,nginx)