centos7通过docker搭建nginx+php环境

以下环境都是基于centos7.9完成。

1.安装docker

yum install docker-ce
说明:这一步,由于centos软件仓库没有收纳docker,需要自己去官网爬文档安装。
安装完成之后,就是启动docker服务以及添加到开机启动。
systemctl enable docker
systemctl start docker

2.拉取镜像

这里是使用的nginx作为web服务
docker pull nginx:1.15
说明:这里nginx:1.15是nginx的1.15版本,这里根据需要来修改,例如需要nginx的1.20版本,这里就是docker pull nginx:1.20
查看拉取的镜像是否成功
docker images ls
如果成功,就可以看到拉取的nginx 的1.15版本的一条记录。

3.创建docker内建网络

docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 docker-net
参数说明:
-d: 网络驱动类型,
–subnet: 子网网段以及掩码
–gateway:子网网关
docker-net: 这是创建的网络的名称,根据自己喜好进行定义。
查看docker 网络命令
docker network ls
查看某个指定的网络信息
docker network inspect <network name| network id>

4.创建docker容器

sudo docker run \ --name nginx1 \ -d \ --restart always \ --network docker-net \ --ip 172.18.0.2 \ -p 8080:8080 \ -v /home/sqm/documents/workspaces/wwwroot:/var/www/html \ -v /home/sqm/documents/dockerconfig/nginx1/nginx.conf:/etc/nginx/nginx.conf \ -v /home/sqm/documents/dockerconfig/nginx1/conf.d:/etc/nginx/conf.d/ \ -v /home/sqm/documents/dockerconfig/logs/nginx1:/var/logs/nginx \ nginx:1.15

参数说明:
–name: 容器名称,根据喜好自定义
-d : 后台运行
–restart: 启动类型
–network: 使用的docker网络名,这里是需要使用docker网络中存在的网络名称
–ip: 指定该容器绑定的ip,这里建议绑定,否则容器重启,可能出现容器的IP发生改变的情况
-p: 端口映射,宿主机端口: docker容器端口
-v: 文件或文件夹映射,宿主机路径:docker容器内部路径
nginx:1.15: 使用的镜像名称以及版本
补充说明:部分容器可能会出现需要设置容器内部软件的启动命令,例如redis容器中redis启动,命令如下:
sudo docker run \ --name redis \ -d \ --restart=always \ --network docker-net \ --ip 172.18.0.5 \ -p 6379:6379 \ --log-opt max-size=100m \ --log-opt max-file=2 \ -v /home/sqm/documents/dockerconfig/redis/redis.conf:/etc/redis/redis.conf \ -v /home/sqm/documents/workspaces/redisdata:/data \ -v /home/sqm/documents/dockerconfig/logs/redis:/var/log/redis \ redis:latest \ redis-server /etc/redis/redis.conf
最后一行的命令就是设置在容器启动的时候,就执行redis启动的命令。

查看容器的ip命令:
docker inspect <container_id || container_name>

5.创建php容器

sudo docker run \ --name php72 \ -d \ --restart always \ --network docker-net \ --ip 172.18.0.3 \ -p 9000:9000 \ -v /home/sqm/documents/workspaces/wwwroot:/var/www/html \ -v /home/sqm/documents/dockerconfig/php7.2/php-fpm.conf:/usr/local/php/etc/php-fpm.conf \ -v /home/sqm/documents/dockerconfig/php7.2/www.conf:/usr/local/php/etc/php-fpm.d/www.conf \ -v /home/sqm/documents/dockerconfig/php7.2/php.ini:/etc/php.ini \ -v /home/sqm/documents/dockerconfig/logs/php:/var/log/php \ php:7.2-fpm
如果缺少拓展,可以去https://pecl.php.net/ 下载需要的拓展,然后进行安装。以下以swoole作为例子:
docker cp swoole.6.1.2 php72:/usr/src/php/ext/swoole 将解压出来的swoole目录复制到php72容器中的/usr/src/php/ext/下,并重命名为swoole。
docker exec -it php72 bash 进入到php72容器中
/usr/local/bin/docker-php-ext-install swoole 在容器中执行的命令,意思是将swoole编译安装并加入到php中。

6.mysql安装

至于mysql 建议在宿主机上进行安装。

6.1 添加源

http://repo.mysql.com/ 这个地址去查找对应的源 这里下载的是mysql57-community-release-el7-9.noarch.rpm

6.2.安装

sudo yum -y install mysql-community-server

6.3.出现如下错误

Failing package is: mysql-community-common-5.7.43-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
说明是key过期了,需要更新
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

6.4.启动

systemctl start mysqld
systemctl enable mysqld

6.5. 初始密码

方法一:sudo cat /var/log/mysqld.log | grep “password” 查看
方法二:vim /etc/my.cnf 添加在[mysqld]下面 skip-grant-tables
然后重启服务

6.6.登录 mysql -u root -p

6.7.用命令修改密码 alter user ‘root’@‘localhost’ identified by ‘Admin123!@#’; 用方法二重置密码的,需要重新去配置文件中将添加的配置注释或者删除

特别说明:以上的命令中的本机映射路径,最好提前创建好,否则会出现在容器搭建完成,容器无法启动而报错的问题,如果是配置文件,最好提前拿到并放到指定的地方。

至此整个环境安装完成。
如果需要做数据库的主从,可以研究一下mysql的docker容器的安装。

熟悉了上面的环境,可以在虚拟机中搭建一个简易的负载均衡的环境,本机nginx + 2个docker-nginx +
1个docker-php容器。 在本机nginx上配置负载均衡的策略,将连接转发到2个docker-nginx中。

以下是自己在做这套环境的时候,做的记录,特此记录,以备后续可能会使用到。

vmware workstation 下载地址:https://customerconnect.vmware.com/en/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro/16_0
提前安装宿主机的nginx,下载php的源码安装包,redis源码包,主要是需要这三个的配置文件

mkdir -p /home/sqm/documents/workspaces/wwwroot mkdir -p
/home/sqm/documents/dockerconfig/nginx1 mkdir -p
/home/sqm/documents/dockerconfig/nginx2 mkdir -p
/home/sqm/documents/dockerconfig/logs/nginx1 mkdir -p
/home/sqm/documents/dockerconfig/logs/nginx2 mkdir -p
/home/sqm/documents/dockerconfig/php7.2 mkdir -p
/home/sqm/documents/dockerconfig/logs/php mkdir -p
/home/sqm/documents/dockerconfig/redis mkdir -p
/home/sqm/documents/workspaces/redisdata mkdir -p
/home/sqm/documents/dockerconfig/logs/redis

安装docker yum -y install docker-ce 查找自己需要的镜像 docker search nginx:ver
#ver 是版本号 拉取镜像 docker pull nginx:1.15 #这里拉取nginx1.15的版本 创建docker 需要的网络 docker network create -d bridge --subnet 172.18.0.0/16 --gateway
172.18.0.1 docker-net 创建docker容器 sudo docker run
–name nginx1
-d
–restart always
–network docker-net
–ip 172.18.0.2
-p 8080:8080
-v /home/sqm/documents/workspaces/wwwroot:/var/www/html
-v /home/sqm/documents/dockerconfig/nginx1/nginx.conf:/etc/nginx/nginx.conf

-v /home/sqm/documents/dockerconfig/nginx1/conf.d:/etc/nginx/conf.d/
-v /home/sqm/documents/dockerconfig/logs/nginx1:/var/logs/nginx \ nginx:1.15

sudo docker run
–name nginx2
-d
–restart always
–network docker-net
–ip 172.18.0.4
-p 8081:8081
-v /home/sqm/documents/workspaces/wwwroot:/var/www/html
-v /home/sqm/documents/dockerconfig/nginx2/nginx.conf:/etc/nginx/nginx.conf

-v /home/sqm/documents/dockerconfig/nginx2/conf.d:/etc/nginx/conf.d/
-v /home/sqm/documents/dockerconfig/logs/nginx2:/var/logs/nginx \ nginx:1.15

查看容器ip docker inspect <container_id || container_name>

sudo docker run
–name php72
-d
–restart always
–network docker-net
–ip 172.18.0.3
-p 9000:9000
-v /home/sqm/documents/workspaces/wwwroot:/var/www/html
-v /home/sqm/documents/dockerconfig/php7.2/php-fpm.conf:/usr/local/php/etc/php-fpm.conf

-v /home/sqm/documents/dockerconfig/php7.2/www.conf:/usr/local/php/etc/php-fpm.d/www.conf

-v /home/sqm/documents/dockerconfig/php7.2/php.ini:/etc/php.ini
-v /home/sqm/documents/dockerconfig/logs/php:/var/log/php \ php:7.2-fpm

sudo docker run
–name redis
-d
–restart=always
–network docker-net
–ip 172.18.0.5
-p 6379:6379
–log-opt max-size=100m
–log-opt max-file=2
-v /home/sqm/documents/dockerconfig/redis/redis.conf:/etc/redis/redis.conf

-v /home/sqm/documents/workspaces/redisdata:/data
-v /home/sqm/documents/dockerconfig/logs/redis:/var/log/redis \ redis:latest \ redis-server /etc/redis/redis.conf

cp /etc/nginx/nginx.conf /home/sqm/documents/dockerconfig/nginx1/ cp
-r /etc/nginx/conf.d /home/sqm/documents/dockerconfig/nginx1/ 同理,将配置文件复制到nginx2中 注意:nginx1和nginx2中有个地方需要修改,在default.conf文件中:
/scripts$fastcgi_script_name; => d o c u m e n t r o o t document_root documentrootfastcgi_script_name

php容器中安装拓展
1.下载拓展包 地址https://pecl.php.net/,查找需要的。
2.将下载的包放到宿主机中,并且解压开来。
3.在宿主机中将解压开来的文件夹移动到php容器中指定位置 docker cp swoole.6.1.2 php72:/usr/src/php/ext/swoole
4.进入到容器中,使用命令进行安装 /usr/local/bin/docker-php-ext-install swoole
5.安装gd库 docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/

centos7 安装mysql 1 添加源 http://repo.mysql.com/ 这个地址去查找对应的源
这里下载的是mysql57-community-release-el7-9.noarch.rpm
2.安装 sudo yum -y install mysql-community-server

3.出现如下错误 Failing package is: mysql-community-common-5.7.43-1.el7.x86_64 GPG Keys are configured
as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql 说明是key过期了,需要更新 rpm
–import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

4.启动 systemctl start mysqld systemctl enable mysqld
5. 初始密码 方法一:sudo cat /var/log/mysqld.log | grep “password” 查看 方法二:vim /etc/my.cnf 添加在[mysqld]下面 skip-grant-tables 然后重启服务
6.登录 mysql -u root -p
7.用命令修改密码 alter user ‘root’@‘localhost’ identified by ‘Admin123!@#’; 用方法二重置密码的,需要重新去配置文件中将添加的配置注释或者删除

出现ssl过期的问题: yum install ca-certificates -y 或 update-ca-trust extrac

连接数据库出现 QLSTATE[HY000] [2002] No such file or
directory错误:将host的localhost 改成127.0.0.1 SQLSTATE[HY000]: General
error: 1364 Field ‘date’ doesn’t have a default val 解决办法:
在配置文件中将sql-mode="STRICT TRANS TABLES,NO AUTO CREATE USER,NO ENGINE
SUBSTITUTION"注释,
没有就不管,然后重新加入一行sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION。重启服务

php gd库添加freetype
1.下载freetype 并安装
2.进入到php源码目录下的ext目录的gd目录 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/ --with-zlib-dir --with-gd sudo make sudo make install

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

VD6283TX环境光传感器驱动开发(1)----获取ID

VD6283TX环境光传感器驱动开发----1.获取ID 概述视频教学样品申请源码下载模块参数IIC接线方式设备ID生成STM32CUBEMX串口配置 IIC配置串口重定向模块地址获取ID主函数结果演示 概述 环境光传感器是一种光电探测器&#xff0c;能够将光转换为电压或者电流&#xff0c;使用多光…

计算机网络常见面试题

梳理计算机网络相关的面试题&#xff0c;相关知识结构主要参考谢希仁老师的《计算机网络&#xff08;第五版&#xff09;》一书&#xff0c;并整理互联网上常见面试题。 计算机网络性能指标 性能指标从不同的方面来度量计算机网络的性能。下面介绍常用的七个性能指标。 1、速…

23-properties文件和xml文件以及dom4j的基本使用操作

特殊文件 我们利用这些特殊文件来存放我们 java 中的数据信息&#xff0c;当数据量比较大的时候&#xff0c;我们可以利用这个文件对数据进行快速的赋值 对于多个用户数据的存储的时候我们要用这个XML来进行存储 关于这些特殊文件&#xff0c;我们主要学什么 了解他们的特点&…

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之软件安装&#xff1a;华为云云耀云服务器环境下安装 Docker 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树 前言一. 验证二叉搜索树二. 不同的二叉搜索树三. 不同的二叉搜索树II 前言 想要精通算法和SQL的成长之路 - 系列导航 二叉搜索树的定义&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包…

【前段基础入门之】=>CSS浮动

浮动的简介 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一。 元素浮动后的特点 &#x1f922; 脱离文档流。&#x1f60a; 不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽…

GRACE-FO L2产品的发布说明 - 版本UTCSR RL-06.1产品

数据更新日期&#xff1a;2023-5-11 0&#xff09;此说明取代了所有先前与UTCSR-RL06.1 GRACE-FO Level-2产品相关的旧版本发布说明。 1&#xff09;截止到本发布说明日期的GRACE-FO RL-06.1产品文件列表如下&#xff1a; 2&#xff09;通常情况下&#xff0c;每个日历月有四…

游戏逆向中的 NoClip 手段和安全应对方式

文章目录 墙壁边界寻找碰撞 NoClip 是一种典型的黑客行为&#xff0c;允许你穿过墙壁&#xff0c;所以 NoClip 又可以认为是避免碰撞体积的行为 墙壁边界 游戏中设置了碰撞体作为墙壁边界&#xff0c;是 玩家对象 和墙壁发生了碰撞&#xff0c;而不是 相机 玩家对象有他的 X…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 核心类持久化存储

文章目录 一、持久化存储的方式与路径二、公共模块序列化 / 反序列化异常规定 三、持久化存储数据库数据管理文件数据管理读写规定新增 /删除规定内存中 Message 的规定存储规定代码编写 硬盘数据管理 一、持久化存储的方式与路径 交换机,队列,绑定关系,这些我们使用数据库来管…

警用装备管理系统|智装备DW-S304的主要功能

东识科技&#xff08;DONWIT&#xff09;警用装备管理系统DW-S304是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 在国外很早开始便使用警用装备管理系统对警用装备的管理使用进行…

Explain执行计划字段解释说明---select_type、table、patitions字段说明

1、select_type的类型有哪些 2、select_type的查询类型说明 1、SIMPLE 简单的 select 查询,查询中不包含子查询或者UNION 2、PRIMARY 查询中若包含任何复杂的子部分&#xff0c;最外层查询则被标记为Primary 3、DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生)&…

基于ssm的互联网废品回收/基于web的废品资源利用系统

摘 要 本毕业设计的内容是设计并且实现一个基于SSM框架的互联网废品回收。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。互联网废品回收的功能已基本实现&#xff0c;主要包括用户、回收员、物品分类、回收物品、用户下单…

【Python 基础 2023 最新】第七课 Pandas

【Python 基础 2022 最新】第七课 Pandas 概述Pandas 是什么?Pandas 的应用场景安装 Pandas Pandas 数据结构Series 数组什么是 Series?Series 创建 Series 数组操作数据检索数据修改过滤Series 数组运算总结 什么是 DataFrameDataFrame 创建 DataFrame 操作数据检索筛选数据…

决策树C4.5算法的技术深度剖析、实战解读

目录 一、简介决策树&#xff08;Decision Tree&#xff09;例子&#xff1a; 信息熵&#xff08;Information Entropy&#xff09;与信息增益&#xff08;Information Gain&#xff09;例子&#xff1a; 信息增益比&#xff08;Gain Ratio&#xff09;例子&#xff1a; 二、算…

密码技术 (6) - 证书

一. 前言 前面介绍的公钥密码和数字签名&#xff0c;都无法解决一个问题&#xff0c;那就是判断自己获取的公钥是否期望的&#xff0c;不能确定公钥是否被中间攻击人掉包。所以&#xff0c;证书的作用是用来证明公钥是否合法的。本文介绍的证书就是解决证书的可靠性的技术。 二…

最新反编译小程序教程(支持分包一键反编译),反编译成功率高达99%

最新反编译小程序教程&#xff08;支持分包一键反编译&#xff09;&#xff0c;反编译成功率高达99% 优点&#xff1a; 1.支持多个分包以及主包一次性反编译&#xff1b; 2.使用wxappUnpacker无法进行解析的小程序包&#xff0c;一键反编译解析&#xff08;咱没有发现反编译失败…

使用ExLlamaV2在消费级GPU上运行Llama2 70B

Llama 2模型中最大也是最好的模型有700亿个参数。一个fp16参数的大小为2字节。加载Llama 270b需要140 GB内存(700亿* 2字节)。 只要我们的内存够大&#xff0c;我们就可以在CPU上运行上运行Llama 2 70B。但是CPU的推理速度非常的慢&#xff0c;虽然能够运行&#xff0c;速度我…

正点原子嵌入式linux驱动开发——TF-A移植

经过了之前的学习&#xff0c;除了TF-A的详细启动流程仍待更新&#xff0c;TF-A的使用和其对应的大致启动流程已经进行过了学习。但是当我们实际做产品时&#xff0c;硬件平台肯定会和ST官方的有区别&#xff0c;比如DDR容量会改变&#xff0c;自己的硬件没有使用到官方EVK开发…

[ruby on rails] postgres sql explain 优化

一、查看执行计划 sql User.all.to_sql # 不会实际执行查询 puts ActiveRecord::Base.connection.explain(sql)# 会实际执行查询&#xff0c;再列出计划 User.all.explain# 会实际执行查询&#xff0c;再列出计划 ActiveRecord::Base.connection.execute(EXPLAIN (ANALYZE, V…

EM聚类(下):用EM算法对王者荣耀英雄进行划分

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…