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

  1. 初始密码 方法一: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

相关推荐
全能全知者22 分钟前
docker快速安装与配置mongoDB
mongodb·docker·容器
阿尔帕兹2 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
ZHOU西口4 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
残月只会敲键盘5 小时前
php代码审计--常见函数整理
开发语言·php
ac-er88886 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
ajsbxi6 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
YUJIANYUE9 小时前
PHP将指定文件夹下多csv文件[即多表]导入到sqlite单文件
jvm·sqlite·php
川石课堂软件测试9 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
追风林16 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
龙哥·三年风水18 小时前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统