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

相关推荐
程序员 小柴34 分钟前
docker的与使用
java·docker·eureka
Xiaok101837 分钟前
解决 Hugging Face SentenceTransformer 下载失败的完整指南:ProxyError、SSLError与手动下载方案
开发语言·神经网络·php
ghostwritten1 小时前
Docker Registry Clean
运维·docker·容器
Jtti1 小时前
PHP在Debian环境上的并发处理能力如何
开发语言·debian·php
宋冠巡2 小时前
Windows安装Docker(Docker Desktop)
windows·docker·容器
阿噜噜小栈3 小时前
最新国内可用的Docker镜像加速器地址收集
运维·笔记·docker·容器
海鸥815 小时前
podman和与docker的比较 及podman使用
docker·容器·podman
viqecel11 小时前
网站改版html页面 NGINX 借用伪静态和PHP脚本 实现301重定向跳转
nginx·php·nginx重定向·301重定向·html页面重定向
zyk_52012 小时前
Docker desktop如何汉化
运维·docker·容器
韭菜盖饭12 小时前
解决Docker端口映射后外网无法访问的问题
运维·docker·容器