当前位置: 首页 > news >正文

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静态测试页面说明搭建成功了!

相关文章:

docker部署lnmp环境

文章目录 前期准备&#xff1a;一、部署mysql1.1 获取 Mysql 5.7.22 镜像1.2 启动mysql容器 二、部署php2.1 获取php 7.2镜像2.2 启动php 容器2.3 php的扩展安装 三、部署nginx3.1 获取nginx:1.14镜像3.2 启动nginx容器3.3 编写nginx虚拟主机配置文件&#xff0c;使其支持php3.…...

数据结构 | 带头双向循环链表专题

数据结构 | 带头双向循环链表专题 前言 前面我们学了单链表&#xff0c;我们这次来看一个专题带头的双向循环链表~~ 文章目录 数据结构 | 带头双向循环链表专题前言带头双向循环链表的结构实现双向链表头文件的定义创建节点哨兵位初始化尾插尾删头插头删打印查找指定位置前插入…...

Redis使用Pipeline(管道)批量处理

Redis 批量处理 在开发中&#xff0c;有时需要对Redis 进行大批量的处理。 比如Redis批量查询多个Hash。如果是在for循环中逐个查询&#xff0c;那性能会很差。 这时&#xff0c;可以使用 Pipeline (管道)。 Pipeline (管道) Pipeline (管道) 可以一次性发送多条命令并在执…...

Linux中at命令添加一次性任务

1、工作原理 功能&#xff1a;在某个时间点&#xff0c;执行一次命令。 特点&#xff1a;任务是用户隔离的。 条件&#xff1a;必须要保证atd进程存在。 ps -ef |grep atd 原理&#xff1a;atd进程循环遍历队列里的任务&#xff0c;有任务&#xff0c;且到达执行时间&#xff…...

交换机基础知识之安全配置

交换机在网络基础设施中扮演着重要角色&#xff0c;它促进了设备之间数据包的流动。正因此&#xff0c;采取适当的安全措施来保护网络免受未经授权的访问和潜在攻击至关重要。本文将全面解读交换机基础安全配置知识&#xff0c;并提供实践方案&#xff0c;以保证安全的网络环境…...

Netty入门指南之Reactor模型

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言单线程…...

Ubuntu20.04软件安装顺序

目录 0.网卡驱动1. sogoupinyin2. terminator3.1zsh3.2升级Cmake&#xff08;有些后面的软件需要高版本Cmake&#xff09;4.显卡驱动(在cuda之前)5.CUDA与cudnn,TensorRT6.OpenCV(在ROS之前)6.1先安装各种依赖6.2安装Ceres-1.14.06.3安装Pangolin6.4安装Sophus6.5安装VTK6.5编译…...

适配器模式 ( Adapter Pattern )(6)

适配器模式 ( Adapter Pattern ) 适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁 适配器模式涉及到一个单一的类&#xff0c;该类负责加入独立的或不兼容的接口功能 举个真实的例子&#xff0c;读卡器是作为内存卡和笔记本之间的适配器…...

JAVA G1垃圾收集器介绍

为解决CMS算法产生空间碎片和其它一系列的问题缺陷&#xff0c;HotSpot提供了另外一种垃圾回收策略&#xff0c;G1&#xff08;Garbage First&#xff09;算法&#xff0c;通过参数-XX:UseG1GC来启用&#xff0c;该算法在JDK 7u4版本被正式推出&#xff0c;官网对此描述如下&am…...

十方影视后期“领进门”,成长与成就还得靠自身

在这个充满视觉冲击的时代&#xff0c;影视后期制作已经成为了一种炙手可热的艺术形式。而在这个领域&#xff0c;Adobe After Effects&#xff08;AE&#xff09;这款软件无疑是王者之一。十方影视后期作为十方教育科技旗下的艺术设计学科&#xff0c;不仅培养了数万名优秀的后…...

Golang之火爆原因

引言 在计算机编程领域&#xff0c;有很多种编程语言可供选择。然而&#xff0c;近年来&#xff0c;Golang&#xff08;Go&#xff09;这门相对年轻的编程语言却越来越受欢迎&#xff0c;备受推崇。那么&#xff0c;为什么Golang如此火爆&#xff1f;本文将探讨Golang之火爆原…...

WPF中Dispatcher对象的用途是什么

在WPF (Windows Presentation Foundation) 中&#xff0c;Dispatcher 对象的主要用途是提供一个与UI线程关联的消息循环系统&#xff0c;这允许开发者在UI线程上安排和执行任务。由于WPF的UI元素不是线程安全的&#xff0c;因此任何对UI元素的访问都必须从创建该元素的线程&…...

图论17-有向图的强联通分量-Kosaraju算法

文章目录 1 概念2 Kosaraju算法2.1 在图类中设计反图2.2 强连通分量的判断和普通联通分量的区别2.3 代码实现 1 概念 2 Kosaraju算法 对原图的反图进行DFS的后序遍历。 2.1 在图类中设计反图 // 重写图的构造函数public Graph(TreeSet<Integer>[] adj, boolean dire…...

ubuntu中使用 vscode 连接docker开发环境

文章目录 ubuntu中使用 vscode 连接docker开发环境步骤一&#xff1a;安装 Remote Development 插件步骤二&#xff1a;连接远程环境步骤三&#xff1a;开发 问题解决参考连接 ubuntu中使用 vscode 连接docker开发环境 Remote Development 是一个 Visual Studio Code 插件&…...

【广州华锐视点】海外制片人VR虚拟情景教学带来全新的学习体验

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种利用电脑模拟产生一个三维的虚拟世界&#xff0c;提供用户关于视觉、听觉、触觉等感官的模拟体验的技术。随着科技的进步&#xff0c;VR已经被广泛应用到许多领域&#xff0c;包括游戏、教育、医疗、房…...

龙芯loongarch64麒麟服务器配置yum源

服务器信息&#xff1a; uname -a # 命令 Linux bogon 4.19.90-52.22.v2207.a.ky10.loongarch64 #1 SMP Tue Mar 14 11:18:26 CST 2023 loongarch64 loongarch64 loongarch64 GNU/Linux yum源配置&#xff1a; cd /etc/yum.repos.d/ vim kylin_loongarch64.repo 将下面内容拷贝…...

Centos7 单用户模式修改密码 3步搞定 666 (百分比成功)

1.第一步重新服务器 2.进入这个页面按e进入单用户模式 3.找到linux16这行 在后面添加 init/bin/bash 按ctrlx进入 4.注意是事项直接修改是报错passud: Authentication token manipulation error 需要执行权限&#xff1a;mount -o remount,rw /...

深度学习 机器视觉 车位识别车道线检测 - python opencv 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …...

Java主流分布式解决方案多场景设计与实战

Java的主流分布式解决方案的设计和实战涉及到多个场景&#xff0c;包括但不限于以下几点&#xff1a; 分布式缓存&#xff1a;在Java的分布式系统中&#xff0c;缓存是非常重要的一部分。常用的分布式缓存技术包括Redis、EhCache等。这些缓存技术可以用来提高系统的性能和响应…...

docker安装MongoDB数据库,并且进行密码配置

很美的一首小诗> 我在外面流浪&#xff0c;回来时 故乡瘦了一圈—— 墩子叔走了&#xff0c;门前的池水 干了一半。 屋后驼背的柳树 头发散落了一地&#xff0c; 老房子蹲在坟边&#xff0c;屋顶的白云 仍在风中奔跑。 安装配置 要在Docker中安装MongoDB并启用远程连接&…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...