前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二、php环境之nginx的docker镜像制作

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

原创
作者头像
阿湫..
修改2023-07-04 17:39:19
7500
修改2023-07-04 17:39:19
举报
文章被收录于专栏:阿湫专栏阿湫专栏

因为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制作)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 往期回顾
  • 拉取centos镜像
  • 启动并进入该容器准备安装nginx
    • 先安装nginx所需的相关依赖包
      • 下载对应版本nginx安装包并编译安装
        • nginx相关配置
          • nginx检测及启动
          • 提交创建镜像
          • 准备相关目录和配置测试文件
          • 相关端口和目录映射并启动测试这个镜像容器
            • 相关索引
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档