场景
以前在宿主机部署 nginx
大多都是下载编码编译安装, 例如 runoob 上的这篇教程,但是源码安装有个问题,直接在宿主机上安装,可能会造成环境依赖的问题,比如 gcc-c++ libtool openssl
要是服务器上本身已经有这几个编译工具了,并且版本过低,那就很麻烦,到底是改还是不改,相信没人敢保证改了之后别的程序能正常。这个时候就可以引入 docker
,采用容器部署的方式在宿主机上安装 nginx
,并且docker的安装脚本写过一次,可以全平台运行,和宿主机的操作系统、环境、无关,只要你有docker
即可,关于docker
和docker-compose
的基本简介,这里就不在描述了,只写一下如何简单的构建 nginx
编写脚本构建
首先在 root 目录下创建 nginx
目录,下面依次建立三个文件夹:conf、html、logs。这三个文件夹 conf
保存配置文件、html
保存 静态页面、logs
保存运行的日志 。
构建需要依赖于基础镜像,我们可以通过 docker
直接查询别人已经写好,并且上传的 nginx
基础镜像:docker search nginx
使用这句命令来查找 基础镜像
本文里面的例子直接选用图片里面的第一个 镜像
然后编写 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
表示后台运行
构建成功然后输出入 sudo docker ps
查看构建成功并且正在运行的容器
如果 '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
刷新成功之后,exit
直接退出容器,然后到 宿主机 /root/nginx/html
目录下编写一个 index.html
里面随便敲几句话,例如 docker nginx
写完index.html文件之后,直接在宿主机执行 curl -v 127.0.0.1:80
来查看一下访问效果,我这边构建成功,访问之后直接打印出来了 docker nginx
到此,全部构建已经完成了
其实还有种方式可以构建,不需要编写 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
可以快速搭建基础开发和运行环境,还是挺方便的,因为不是专业运维人员,博客可能写的有些粗糙,