家境贫寒
努力学习只为补贴家用

使用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文件,并将下面内容复制进去

<?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 参数

参考资料:

  1. https://www.runoob.com/docker/docker-tutorial.html
  2. https://hub.docker.com/_/php
  3. https://hub.docker.com/_/mysql
  4. https://hub.docker.com/_/nginx
  5. https://hub.docker.com/_/redis
  6. https://hub.docker.com/r/itwmw/php
赞(7)
本文原创,如果要转载请务必保留原文链接!墨娘博客 » 使用Docker快速搭建部署LNMP环境