二、php环境之nginx的docker镜像制作

2023-07-04 17:39:19 浏览数 (1)

因为php是一个脚本语言,我是打算把php的环境都打包到一个docker镜像中(主要是nginx php php的各种拓展,数据库mysql,redis这些为了安全一般使用云服务器的RDS和redis),以后起新的服务,直接拉这个镜像运行就行,避免每次的环境安装,同时以后有安全补丁啥的都再做一次镜像就行,其他的服务用这个镜像或用这个镜像调整即可,毕竟每次整环境是最烦人的,其实也是没必要的。 同时用镜像做服务还一个好处,php站点容易被黑挂马什么的,这样发现被黑了抛弃旧的容器,直接重启一个新的容器即可,不用再麻烦处理了,以前有个被黑挂马的站藏的很深,它修改了内核系统命令,你登录服务器时主动杀死挖矿程序,等你退出后它又自动运行,处理这个很麻烦

往期回顾

一.docker的安装

上期已经讲了服务器宿主机的 docker 安装,那么接下来我们就准备先做个nginx镜像

拉取centos镜像

centos版本选择 见后面的常见问题归纳 1

docker pull centos

启动并进入该容器准备安装nginx

docker run -it centos /bin/bash

先安装nginx所需的相关依赖包

检测这些依赖包是否安装过以及作用 见后面的常见问题归纳 3

yum -y install gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel && yum clean all

我安装过程中遇到的问题 见后面的常见问题归纳 4

下载对应版本nginx安装包并编译安装

nginx版本选择 见后面的常见问题归纳 2

代码语言:shell复制
#下载nginx安装包
cd /tmp
wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 解压到指定目录
tar -zxvf /tmp/nginx-1.24.0.tar.gz -C /usr/local/
# 进入目录进行编译安装
cd /usr/local/nginx-1.24.0
#进行编译配置(yum安装的pcre也可以不指定目录)
./configure --prefix=/usr/local/nginx --with-http_gzip_static_module --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-pcre=/usr/share/doc/pcre
# 检测配置是否准确,返回0就可以下一步编译安装了
echo $?
0
#编译安装
make && make install && make clean
#检测是否安装成功
/usr/local/nginx/sbin/nginx -v

#创建软链接 之后就能直接使用nginx命令了
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

#创建相关用户组及用户(一般用软件名区分用户,比如nginx)
#我这里因为都是web站点,所以统一用www(包括后续的php安装)
groupadd www
useradd -g www www

nginx相关配置

nginx.conf 配置见后面的 conf配置说明

代码语言:shell复制
#创建软链接 之后就能直接使用nginx命令了
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

#创建相关用户组及用户(一般用软件名区分用户,比如nginx)
#我这里因为都是web站点,所以统一用www(包括后续的php安装)
groupadd www
useradd -g www www

#修改调整 nginx.conf 配置
vi /usr/local/nginx/conf/nginx.conf

#根据配置创建站点vhost 便于后期容器配置目录映射
mkdir -p /usr/local/nginx/conf/vhost/nginx_online
#根据配置创建日志目录 便于后期容器nginx日志目录映射
mkdir -p /home/wwwlogs
chown -R www:www /home/wwwlogs

#规划创建项目目录 便于后期项目目录映射
mkdir -p /www/wwwroot

nginx检测及启动

代码语言:shell复制
#检测nginx配置项
nginx -t

#使用绝对路径指定配置文件启动,这样比较显性和安全,一般shell脚本中都指明路径和配置
#启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#停止
/usr/local/nginx/sbin/nginx -s stop
#平滑重启
/usr/local/nginx/sbin/nginx -s reload

#当然这些命令都创建了软链接故而平常使用可以直接用nginx命令

#监测nginx进程是否正常启动
ps -ef | grep nginx

提交创建镜像

基本安装和配置在docker中已经完成,我们来提交创建我们刚才的容器做成镜像

代码语言:shell复制
#容器内执行exit退出该容器
exit

#查看容器信息
[root@xxx]docker ps -a
CONTAINER ID   IMAGE       COMMAND       CREATED        STATUS                    PORTS         NAMES
f4d7d1bf8f06   centos      "/bin/bash"   1 days ago     Exited (0) 1 days ago                   distracted_noether

#提交制作容器
#docker commit <容器 ID 或容器名> [<仓库名>[:<标签>]]
[root@xxx]docker commit f4d7d1bf8f06  my/lnp:v1

#查看我们新制作的image镜像
[root@xxx]docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
my/lnp       v1        e0519f62bdfe   1 days ago      691MB
centos       latest    5d0da3dc9764   21 months ago   231MB

准备相关目录和配置测试文件

代码语言:shell复制
#服务器上准备相关映射目录,便于后期经常改动的东西放在服务器上不用到容器内部调整
#同时保障容器镜像只是干净的服务环境,程序和日志配置什么的都在宿主机上

#用作程序目录
mkdir -p /wwwdocker/wwwroot/www.test.com
#用作nginx日志目录
mkdir -p /wwwdocker/wwwlogs
#用作nginx配置目录
mkdir -p /wwwdocker/vhost
代码语言:shell复制
#建一个测试文件
cat /wwwdocker/wwwroot/www.test.com/index.html
欢迎访问我的站点
代码语言:shell复制
#建一个最简单测试的nginx配置文件
#此处的www.test.com只是个测试域名,请用你自己真实的测试域名
cat /wwwdocker/vhost/www.test.com.conf
server {
    listen    80;
    server_name  www.test.com;
    root /www/wwwroot/www.test.com;
    index index.html index;
}

相关端口和目录映射并启动测试这个镜像容器

服务器端口80对应容器内80端口

服务器 /wwwdocker/wwwroot 目录映射到 容器的/www/wwwroot 目录用作程序站点目录

服务器 /wwwdocker/wwwlogs 目录映射到 容器的/home/wwwlogs 目录用作nginx日志目录

服务器 /wwwdocker/vhost 目录映射到 容器的/usr/local/nginx/conf/vhost/nginx_online 目录用作容器内nginx配置目录

代码语言:shell复制
#docker run -itd --name [新容器名称] 
#             -p [服务端口]:[容器端口] 
#             -v [服务器目录]:[容器目录] [镜像名称] 
#             /bin/bash

docker run -itd --name mylnp_test -p 80:80 -v /wwwdocker/wwwroot:/www/wwwroot -v /wwwdocker/wwwlogs:/home/wwwlogs -v /wwwdocker/vhost:/usr/local/nginx/conf/vhost/nginx_online my/lnp:v1 /bin/bash

#先手动启动一下容器nginx 后续写个脚本 运行容器的时候自动启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#当然也可以直接运行nginx启动,但后续脚本最后写全地址和指定配置比较好
nginx -t
nginx

#Ctrl   Q 可以退出容器不关闭容器

#docker ps
CONTAINER ID   IMAGE       COMMAND       CREATED      STATUS       PORTS                               NAMES
5873bc26528f   my/lnp:v1   "/bin/bash"   1 days ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp   mylnp_test

#后期容器内环境没有变化的话就只需要 启动 关闭这个容器即可
#程序变动直接在服务器的/wwwdocker/wwwroot下修改即可
#nginx配置变更后 执行下面命令重启容器内部的nginx即可,不需要再进入了
docker exec <容器 ID 或容器名> nginx -s reload
#后期运营的一些nginx日志直接在/wwwdocker/wwwlogs下查看即可

这些做好了,解析你的域名到服务器的外网ip上

访问对应域名或IP应该就能正常访问到你的站点测试内容啦

下篇内容 三、php环境之php的docker镜像制作

相关索引

nginx.conf配置说明
常见问题归纳(nginx环境docker制作)

0 人点赞