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

连接数据库出现 QLSTATEHY000 2002 No such file or

directory错误:将host的localhost 改成127.0.0.1 SQLSTATEHY000: 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

相关推荐
晚风吹长发9 分钟前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ21318 分钟前
Docker Compose 安装与配置指南
运维·docker·容器
shencz20001 小时前
在windows10里的apache2.4加php7.2的环境下上安装Laravel5.8框架
php·laravel
BullSmall1 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
chexus3 小时前
21. 深入 Nginx HTTP 缓存源码:CDN功能
nginx·http·缓存
java_logo5 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
生活爱好者!18 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo18 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客18 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
TlSfoward19 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php