docker部署lnmp环境

文章目录

  • 前期准备:
  • 一、部署mysql
    • 1.1 获取 Mysql 5.7.22 镜像
    • 1.2 启动mysql容器
  • 二、部署php
    • 2.1 获取php 7.2镜像
    • 2.2 启动php 容器
    • 2.3 php的扩展安装
  • 三、部署nginx
    • 3.1 获取nginx:1.14镜像
    • 3.2 启动nginx容器
    • 3.3 编写nginx虚拟主机配置文件,使其支持php
    • 3.4 php测试静态页编写
  • 四、访问浏览器测试

前期准备:

  • 系统环境:centos7
  • 软件环境:docker:18.09.6
  • lnmp环境:nginx:1.14 ,mysql:5.7.22,php:7.2

注:软件版本可自选

一、部署mysql

1.1 获取 Mysql 5.7.22 镜像

[root@localhost ~]# docker pull mysql:5.7.22
5.7.22: Pulling from library/mysql
be8881be8156: Pull complete 
......
c3995dabd1d7: Pull complete 
2b3c2e6bacee: Pull complete 
Digest: sha256:aaba540cdd9313645d892f4f20573e8b42b30e5be71c054b7befed2f7da5f85b
Status: Downloaded newer image for mysql:5.7.22

1.2 启动mysql容器

  • 创建mysql挂载目录
[root@localhost ~]# mkdir -p /opt/app/mysql/mysql
  • 编写mysql挂载配置文件
[root@localhost ~]# vim  /opt/app/mysql/my.cnf[client]
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
port=3306
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
long_query_time = 5
slow_query_log = 1
slow_query_log_file = slow.log
max_connections=3000
skip-name-resolve
back_log=384
log-bin=mysql-bin
binlog_format=mixed
expire_logs_days = 7
server-id = 123
  • 编写mysql容器启动脚本
[root@localhost ~]# cd /opt/app/mysql/
[root@localhost mysql]# ls
my.cnf  mysql
[root@localhost mysql]# vim mysql-run.sh 
#!/bin/bashdocker run -itd --restart=unless-stopped -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone --name mysql -p 13306:3306 -v /opt/app/mysql/mysql:/var/lib/mysql -v /opt/app/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.22
  • 为启动脚本赋予执行权限
[root@localhost mysql]# chmod +x mysql-run.sh [root@localhost mysql]# ll mysql-run.sh 
-rwxr-xr-x 1 root root 271 8月   6 15:10 mysql-run.sh
  • 启动mysql数据库容器
[root@localhost mysql]# pwd
/opt/app/mysql[root@localhost mysql]# ./mysql-run.sh 
c6d5d69bcede92f6b5ea685af50277924c76ca04b7808bc7dda48292a1b862b9
  • 查看mysql容器启动情况
[root@localhost php]# docker ps  -a --no-trunc --filter name=^mysql$
CONTAINER ID                                                       IMAGE               COMMAND                         CREATED             STATUS              PORTS                     NAMES
c6d5d69bcede92f6b5ea685af50277924c76ca04b7808bc7dda48292a1b862b9   mysql:5.7.22        "docker-entrypoint.sh mysqld"   18 minutes ago      Up 18 minutes       0.0.0.0:13306->3306/tcp   mysql,php/mysql

二、部署php

2.1 获取php 7.2镜像

[root@localhost mysql]# docker pull php:7.2-fpm
7.2-fpm: Pulling from library/php
f5d23c7fed46: Pull complete 
......
8d5ce70a71c0: Pull complete 
Digest: sha256:e52c0cd1487d76decf8523da5b0a65f2cfd47d8bbbfef077476fff90ceae2fa8
Status: Downloaded newer image for php:7.2-fpm

2.2 启动php 容器

  • 创建php存放文件目录
[root@localhost ~]# mkdir -p /opt/app/php
  • 编写php容器启动脚本
[root@localhost ~]# cd /opt/app/php/
[root@localhost php]# vim php-run.sh
#!/bin/bashdocker run -d -v /opt/app/nginx/html:/var/www/html -p 9000:9000 --link mysql:mysql --name php php:7.2-fpm
  • 为启动脚本赋予执行权限
[root@localhost php]# chmod +x php-run.sh [root@localhost php]# ll php-run.sh 
-rwxr-xr-x 1 root root 120 8月   6 15:28 php-run.sh
  • 启动php容器
[root@localhost php]# ./php-run.sh 
7750e24826b74c8fb355cf2abfa27d4eb8a7104672728ad18cd75332e62e2fb9
  • 查看php容器启动情况
[root@localhost php]# docker ps  -a --no-trunc --filter name=^php$
CONTAINER ID                                                       IMAGE               COMMAND                           CREATED             STATUS              PORTS                    NAMES
7750e24826b74c8fb355cf2abfa27d4eb8a7104672728ad18cd75332e62e2fb9   php:7.2-fpm         "docker-php-entrypoint php-fpm"   54 seconds ago      Up 53 seconds       0.0.0.0:9000->9000/tcp   php

php容器启动参数说明

-d 让容器运行在后台

-p 添加主机到容器的端口映射

-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一定非要一样,如果不一样在配置nginx的时候需要注意

-name 容器的名称

-link 容器之间建立起来联系 (需要建立联系的容器名:mysql)

2.3 php的扩展安装

  • 安装php-redis

进入php容器
docker exec -it php bash

安装php-redis命令
pecl install redis && docker-php-ext-enable redis

[root@localhost ~]# docker exec -it php bash
root@7750e24826b7:/var/www/html# pecl install redis && docker-php-ext-enable redis
downloading redis-5.0.2.tgz ...
Starting to download redis-5.0.2.tgz (243,270 bytes)
..................................................done: 243,270 bytes
25 source files, building
running: phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
enable igbinary serializer support? [no] :  //no  或者空格都可以
enable lzf compression support? [no] :      //no  或者空格都可以
building in /tmp/pear/temp/pear-build-defaultuser9cKHej/redis-5.0.2
running: /tmp/pear/temp/redis/configure 
......此处省略
configuration option "php_ini" is not set to php.ini location
You should add "extension=redis.so" to php.ini
  • 查看安装的php插件
    容器内执行:php -m
root@7750e24826b7:/var/www/html# php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
redis   //这就是安装的redis
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib[Zend Modules]

三、部署nginx

3.1 获取nginx:1.14镜像

[root@localhost ~]# docker pull nginx:1.14
1.14: Pulling from library/nginx
27833a3ba0a5: Pull complete 
0f23e58bd0b7: Pull complete 
8ca774778e85: Pull complete 
Digest: sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Status: Downloaded newer image for nginx:1.14

3.2 启动nginx容器

  • 新建nginx挂载目录
[root@localhost ~]# mkdir -p /opt/app/nginx/{conf,html,logs,cert}
  • 编写nginx主配置文件
[root@localhost ~]# cd /opt/app/nginx/[root@localhost nginx]# vim nginx.confworker_processes  4;
user  nginx;
#pid /opt/app/nginx/sbin/nginx.pid;
events {worker_connections  409600;
}
http {include       mime.types;default_type  application/octet-stream;server_tokens  off;autoindex on;autoindex_exact_size off;autoindex_localtime on;keepalive_timeout  65;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log  main;error_log  /var/log/nginx/error.log  error;include /etc/nginx/conf.d/*.conf;
}
  • 编写nginx容器启动脚本
[root@localhost nginx]# pwd
/opt/app/nginx[root@localhost nginx]# vim  nginx-run.sh
#!/bin/bashdocker run -itd --restart=unless-stopped  -v /etc/localtime:/etc/localtime  -v /etc/timezone:/etc/timezone  -p 80:80  --name nginx  -v /opt/app/nginx/html:/usr/share/nginx/html  -v /opt/app/nginx/logs:/var/log/nginx  -v /opt/app/nginx/cert:/etc/nginx/cert  -v /opt/app/nginx/nginx.conf:/etc/nginx/nginx.conf  -v /opt/app/nginx/conf:/etc/nginx/conf.d --link php:phpfpm nginx:1.14

参数解释:

-v 添加目录映射,这里nginx容器的静态页目录最好和php容器中静态页目录映射的目录一致。但是不一定非要一样,如果不一样在配置nginx的时候需要注意

–link 容器之间建立起来联系,此处nginx需要与php容器建立联系(写法:php容器名称:phpfpm),此参数必须写在使用镜像名称之前。

  • 为启动脚本赋予执行权限
[root@localhost nginx]# chmod +x nginx-run.sh [root@localhost nginx]# ll nginx-run.sh 
-rwxr-xr-x 1 root root 393 8月   6 16:28 nginx-run.sh
  • 启动nginx容器
[root@localhost nginx]# ./nginx-run.sh 
850e27b026be83886f2deee90d8b36754eb29eeffd1e27e18a6e5724bc29f3f7
  • 查看nginx容器启动情况
[root@localhost nginx]# docker ps -a --no-trunc --filter name=nginx$
CONTAINER ID                                                       IMAGE               COMMAND                    CREATED             STATUS              PORTS                NAMES
850e27b026be83886f2deee90d8b36754eb29eeffd1e27e18a6e5724bc29f3f7   nginx:1.14          "nginx -g 'daemon off;'"   30 seconds ago      Up 29 seconds       0.0.0.0:80->80/tcp   nginx

3.3 编写nginx虚拟主机配置文件,使其支持php

[root@localhost conf]# pwd
/opt/app/nginx/conf[root@localhost conf]# vim nginx-php.conf server {listen       80;server_name  10.20.29.36;location / {root /usr/share/nginx/html;index  index.php index.html index.htm;}location ~ \.php$ {root    html;fastcgi_pass 10.20.29.36:9000;fastcgi_index index.php;fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;include fastcgi_params;}access_log  /var/log/nginx/access.php.log  main;}

注意!!!

location / {root /usr/share/nginx/html;   //修改这里的默认路径为nginx静态页面路径
fastcgi_pass 10.20.29.93:9000;   
#这里可以用容器ID,容器名称,容器IP+端口或者宿主机IP+端口,都可以找到php服务
即:fastcgi_pass 7750e24826b7/php/172.17.0.3/10.20.29.93:9000;   
  • 进入到容器里面重新加载配置文件
[root@localhost conf]# docker exec -it nginx bash   #进入nginx容器
root@850e27b026be:/# nginx -t    #nginx检测配置文件是否正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@850e27b026be:/# nginx -s reload   #平滑重启nginx,不影响nginx服务使用

3.4 php测试静态页编写

在主机/opt/app/nginx/html 目录下创建php测试页面,会直接映射到容器里面

[root@localhost html]# pwd
/opt/app/nginx/html[root@localhost html]# vim index.php<?phpinfo();
?>

四、访问浏览器测试

看到php静态测试页面说明搭建成功了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【以图会意】操作系统的加载流程

声明&#xff1a;本图为博主方便自己记忆理解&#xff0c;诸多疏漏望请博友理性观看&#xff01;如有错误不足恳请指正。 首先&#xff0c;操作系统是一段程序&#xff0c;他保存在ROM中&#xff0c;在开机时&#xff0c;CPU被激活&#xff0c;首先将IR置为BIOS&#xff08;Bas…

《洛谷深入浅出基础篇》 图的基本应用

什么是图&#xff1f; 我们在生活中学习中能看见很多图&#xff0c;地图&#xff0c;路线图&#xff0c;思维导图等等&#xff0c;它们都有一个特点&#xff0c; 你从中任找一个点&#xff0c;你可以找到&#xff0c;从这个点出发&#xff0c;能够到达什么地方&#xff0c;也…

【C++历练之路】list的重要接口||底层逻辑的三个封装以及模拟实现

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 在C的世界中&#xff0c;有一种数据结构&#xff0c;它不仅像一个神奇的瑰宝匣&#xff0c;还像一位能够在数据的海洋中航行的智慧舵手。这就是C中的list&#xff0c;一个引人入胜的工具…

低代码平台全解析:衍生历程、优势呈现与未来趋势一览无余

在数字化时代&#xff0c;应用程序的开发与更新已成为企业保持竞争力的关键。传统的编码方式&#xff0c;虽然精细且功能强大&#xff0c;但耗时且要求开发者具备较高的技术水平。在这样的背景下&#xff0c;低代码开发平台的出现无疑为企业带来了福音。 低代码开发平台是一种创…

大数据-之LibrA数据库系统告警处理(ALM-12057 元数据未配置周期备份到第三方服务器的任务)

告警解释 系统安装完成后会检查元数据是否有周期备份到第三方服务器的任务&#xff0c;然后每1小时会检查一次。如果元数据未配置周期备份到第三方服务器的任务&#xff0c;将发送严重告警。 在用户创建元数据周期备份到第三方服务器的任务后&#xff0c;告警消除。 告警属性…

Redis ACL 规则说明

Redis ACL 规则说明 前情回顾ACL 定义规范启用和禁用用户允许和禁止调用命令允许或禁止访问某些 Key为用户配置有效密码 ACL 命令说明 前情回顾 上一篇文章 我们整体性的介绍了 Redis 的 ACL&#xff0c;我们来回顾下 ACL 的两种配置方式。 redis 使用 acl 有两种方式可以配置…

微服务 Spring Cloud 7,Nacos配置中心的Pull原理,附源码

目录 一、本地配置二、配置中心1、以Nacos为例&#xff1a;2、Pull模式3、也可以通过Nacos实现注册中心 三、配置中心提供了哪些功能四、如何操作配置中心1、配置注册2、配置反注册3、配置查看4、配置变更订阅 五、主流的微服务注册中心有哪些&#xff0c;如何选择&#xff1f;…

程序员的护城河-并发编程

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

为何公司强调流程员工总是觉得反感?

在企业管理中&#xff0c;流程设计对于提高效率和降低风险至关重要。然而&#xff0c;很多企业在流程设计时常犯一些常见的错误&#xff0c;导致基层员工对流程感到烦扰&#xff0c;甚至产生抵触情绪。本文将通过分析一个企业的报销流程问题&#xff0c;探讨如何优化流程以提高…

开关电源测试方法分享:开关电源关机维持时间的测试步骤、测试标准

开关电源关机维持时间是指切断电源后输出电压下降到稳压范围外为止的时间。关机维持时间是开关电源测试项目之一&#xff0c;测试时需要用到交流电源、电子负载、示波器等测试设备。那么开关电源测试系统要如何测试关机维持时间呢? 开关电源关机维持时间的测试步骤 关机维持时…

[C/C++]数据结构 LeetCode:用栈实现队列

题目描述: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返…

java基础练习缺少项目?看这篇文章就够了(上)!

公众号&#xff1a;全干开发 。 专注分享简洁但高质量的动图技术文章&#xff01; 项目概述 本教程适合刚学习完java基础语法的同学&#xff0c;涉及if语句、循环语句、类的封装、集合等基础概念&#xff0c;使用大量gif图帮助读者演示代码操作、效果等&#xff0c;是一个非常…

如何在 Linux 上部署 RabbitMQ

如何在 Linux 上部署 RabbitMQ 文章目录 如何在 Linux 上部署 RabbitMQ安装 Erlang从预构建的二进制包安装从源代码编译 Erlang RabbitMQ 的安装使用 RabbitMQ Assistant 连接 RabbitMQ Assistant 是一款优秀的RabbitMQ 可视化管理工具&#xff0c;提供丰富的管理功能。下载地址…

9、传统计算机视觉 —— 边缘检测

本节介绍一种利用传统计算机视觉方法来实现图片边缘检测的方法。 什么是边缘检测? 边缘检测是通过一些算法来识别图像中物体之间,或者物体与背景之间的边界,也就是边缘。 边缘通常是图像中灰度变化显著的地方,标志着不同区域的分界线。 在一张图像中,边缘可以是物体的…

2024有哪些免费的mac苹果电脑内存清理工具?

在我们日常使用苹果电脑的过程中&#xff0c;随着时间的推移&#xff0c;可能会发现设备的速度变慢了&#xff0c;甚至出现卡顿的现象。其中一个常见的原因就是程序占用内存过多&#xff0c;导致系统无法高效地运行。那么&#xff0c;苹果电脑内存怎么清理呢&#xff1f;本文将…

【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

文章目录 前言1.调用形式2.LoadBalancerInterceptor3.负载均衡流程分析3.1 调用流程图3.2 intercept&#xff08;&#xff09;方法3.3 execute&#xff08;&#xff09;方法3.4 getServer()方法3.4 子类的chooseServer&#xff08;&#xff09;方法3.5 getLoadBalancerStats().…

基于Spring Boot 框架的试卷自动生成系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题&#xff0c;今天给大家介绍…

配置Jetson扩展头--配置CSI相机

每个Jetson开发工具包包括几个扩展头和连接器(统称为“头”): 40‑pin expansion header: 让您将Jetson开发工具包连接到现成的树莓派HATs(硬件附加在顶部),如Seeed Grove模块,SparkFun Qwiic产品等。许多引脚可以用作GPIO或“特殊功能I/O”(SFIO),如I2C, I2S等。 CSI conne…

【大连民族大学C语言CG题库练习题】——判断一个矩阵是另一个矩阵的子矩阵

【问题描述】 从标准输入中输入一个N&#xff08;N<9&#xff09;阶矩阵和一个M&#xff08;M<N&#xff09;阶矩阵&#xff0c;判断矩阵M是否是N的子矩阵&#xff0c;若是则输出M在N中的起始位置&#xff0c;若不是则输出-1。若矩阵M能与N中某一区域完全相等&#xff0…

美国网站服务器SSL证书介绍

美国网站服务器的SSL证书也是一种数字证书&#xff0c;由权威数字证书机构CA验证网站的身份后所颁发&#xff0c;可实现浏览器与网站主机之间的数据传输加密。美国网站服务器搭建的网站在安装SSL证书后会在浏览器显示安全锁标志&#xff0c;数据传输协议则从HTTP传统协议升级为…