场景

以前在宿主机部署 nginx 大多都是下载编码编译安装, 例如 runoob 上的这篇教程,但是源码安装有个问题,直接在宿主机上安装,可能会造成环境依赖的问题,比如 gcc-c++ libtool openssl 要是服务器上本身已经有这几个编译工具了,并且版本过低,那就很麻烦,到底是改还是不改,相信没人敢保证改了之后别的程序能正常。这个时候就可以引入 docker ,采用容器部署的方式在宿主机上安装 nginx,并且docker的安装脚本写过一次,可以全平台运行,和宿主机的操作系统、环境、无关,只要你有docker 即可,关于dockerdocker-compose的基本简介,这里就不在描述了,只写一下如何简单的构建 nginx

编写脚本构建

首先在 root 目录下创建 nginx 目录,下面依次建立三个文件夹:conf、html、logs。这三个文件夹 conf 保存配置文件、html 保存 静态页面、logs 保存运行的日志 。

构建需要依赖于基础镜像,我们可以通过 docker 直接查询别人已经写好,并且上传的 nginx 基础镜像:docker search nginx 使用这句命令来查找 基础镜像 在docker上安装Nginx-LMLPHP

本文里面的例子直接选用图片里面的第一个 镜像

然后编写 docker-compose.yml 文件内容如下

version: '3' -- 版本号
services:
    nginx:
     restart: always -- docker重启容器自动重启
     container_name: nginx  --容器名称
     image: nginx --依赖镜像
     ports:
        - 80:80 --映射端口 80是http端口
        - 443:443 -- 443 是https端口
     volumes:
        - /root/nginx/conf/conf.d:/etc/nginx/conf.d -- 挂载宿主机配置文件目录到容器里面
        - /root/nginx/logs:/var/log/nginx --挂载宿主机日志目录到容器的日志目录,以便在宿主机能直接查看容器里面的日志
        - /root/nginx/html:/data/docker/nginx/html -- 挂载宿主机 html文件夹目录到容器目录,以便可以直接在宿主机更新html资源
     environment:
        - TZ=Asia/Shanghai -- 设置nginx 容器里面的时区

运行 docker-compose up -d 命令构建容器 -d 表示后台运行 在docker上安装Nginx-LMLPHP

构建成功然后输出入 sudo docker ps 查看构建成功并且正在运行的容器 在docker上安装Nginx-LMLPHP

如果 'sudo docker ps' 查看正在运行容器 如果 sudo docker ps 没有查询到我们刚刚构建的 nginx, 那么输入 sudo docker ps -a' 查询所有在正在运行以及停止的容器。 之后可以使用 sudo docker logs nginx 查看运行日志,定位出错的地方,按照错误解决

没有出错,构建成功之后,编写一个简单的nginx 配置文件,放在 /root/nginx/conf/conf.d 目录下面,刚才写过 /root/nginx/conf/conf.d:/etc/nginx/conf.d 映射,在宿主机的文件会自动挂载到容器里面 例如

server {
        listen       80;
        #charset koi8-r;
        access_log  /var/log/nginx/test.log  main;
        location / {
            root   /data/docker/nginx/html/;
            index  index.html index.htm;
        }
    }

之后 执行 sudo docker exec -it nginx bash 进入容器内部,刷新配置文件 执行 nginx -t nginx -s reload
在docker上安装Nginx-LMLPHP

刷新成功之后,exit 直接退出容器,然后到 宿主机 /root/nginx/html 目录下编写一个 index.html 里面随便敲几句话,例如 docker nginx

写完index.html文件之后,直接在宿主机执行 curl -v 127.0.0.1:80 来查看一下访问效果,我这边构建成功,访问之后直接打印出来了 docker nginx

在docker上安装Nginx-LMLPHP

到此,全部构建已经完成了

其实还有种方式可以构建,不需要编写 docker-compose.yml 文件,直接写个 run.sh 脚本也可以 docker run --name nginx --restart=always -v /root/nginx/conf/conf.d:/etc/nginx/conf.d -v /root/nginx/logs:/var/log/nginx -v /root/nginx/html:/data/docker/nginx/html -p 80:80 -p 443:443 -d nginx 然后直接执行,效果等同于前面的步骤

后记

docker nginx 的构建暂时告一段段落了,工作中,涉及到服务器环境迁移,新建,可以使用这样的方式。使用 docker 可以快速搭建基础开发和运行环境,还是挺方便的,因为不是专业运维人员,博客可能写的有些粗糙,

03-30 21:55