Docker创建一个Nginx服务器的方法步骤
运行环境:MAC
Docker版本:Dockerversion17.12.0-ce,buildc97c6d6
一、启动Nginx服务器
启动Nginx服务器,并进入模拟终端
dockerrun-p8080:80--namenginx_web-itnginx/bin/bash
二、了解Nginx镜像的配置文件位置
日志文件位置:/var/log/nginx
配置文件位置:/etc/nginx
资源存放的位置:/usr/share/nginx/html
上面的配置路径是我电脑上的虚拟linux中地址,请各位读者,也自己去看下自己的配置位置
三、修改Nginx的默认首页,测试是否可以运行
重要提示:对于不想折腾的同学,可以直接从第四步来运行
/usr/share/nginx/html echo"HelloDocker
">index.html
到这里有的朋友,可能会发现,我访问localhost:8080端口,第一次出现了Nginx的欢迎界面,而第二次就出现了404提示。
关于这个问题,本文不展开详序,如果不明白的,可以参考:
1.docker运行nginx为什么要使用daemonoff
2.docker容器运行后退出,怎么才能一直运行?
3.Dockerrun命令的使用方法
Docker执行dockerrun之后,先在当前操作系统的基础上,虚拟化了一个精简版的linux(仅仅包含系统运行的最精简功能),然后加载我们的Nginx镜像。当Nginx镜像加载到我们的虚拟Linux环境中时,相当于在系统里执行了一个脚本,而这个脚本就是Nginx。
由于默认的Nginx是不作为守护进程运行的。所以当Docker内监听到80端口的请求后,完成之后,就退出了Nginx的进程。该容器内只有一个进程,并且是非守护的,执行完请求进程就销毁了。那么这个容器也就没有存在的必要了,所以Docker中这个服务也就停掉了。这也就是我们执行dockertop看不到当前运行的容器的原因。
作为暂时解决Nginx只执行一次就退出的问题,我们可以进入交互式终端,执行nginx&让nginx作为守护进程后台运行。
查看我们正在运行的容器
roverliang$dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
如果什么内容都没有,说明当前没有正在运行的容器。
查看已经运行结束的容器
roverliang$dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 5bff285f60b3nginx"/bin/bash"9minutesagoExited(0)6minutesagonginx_web
重新启动我们刚刚启动过的容器
dockerstartnginx_web
进入到我们的容器内部
dockerattachnginx_web echo"HelloDocker
">/usr/share/nginx/html/index.html nginx&
然后使用快捷键control+Q退出当前的容器
之后我们在浏览器再次访问:http://localhost:8080/
折腾了这么久,终于看到我们期望的的内容了。
HelloDocker
四、将前面NginxDemo变成一个可以玩的Demo
先创建我们本机需要映射的文件夹
mkdir-pdocker_study/logdocker_study/etcdocker_study/html
注意:在自己的家目录创建
复制我们docker中nginx的配置文件
dockercp65bc23f952db:/etc/nginx//Users/roverliang/docker_study/etc/
关闭掉我们的容器
dockerstopnginx_web
删除掉我们的练习的demo,我们重新来构建一个可以用的。
dockerrmnginx_web
将Nginx镜像和我们本机的目录进行映射,方便我们修改文件
dockerrun\ -p8080:80\ --namenginx_web\ -v/Users/roverliang/docker_study/log/:/var/log/nginx\ -v/Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf\ -v/Users/roverliang/docker_study/html/:/usr/share/nginx/html\ -it\ -d\ nginx\ /bin/bash\
运行到这里,我们可能还是会发现访问http://localhost:8080/没有内容。但是不要急,解决问题的过程,就是学习新东西的过程,继续网上查资料,参考如下:
Docker运行nginx
摘抄文中让我豁然开朗的一段:
我之前运行的时候,一般都采用交互式:-i保证容器的stdin开启-t为容器生成一个tty终端,在命令的最后加一个/bin/bash来保证可以交互。但是实际上,nginx并没有运行,导致我以为容器的端口绑定不是持久化的。
接下来我们需要关掉,并删除我们的容器,再按照如下的命令重启一个:
dockerrun\ -p8080:80\ --namenginx_web\ -v/Users/roverliang/docker_study/log/:/var/log/nginx\ -v/Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf\ -v/Users/roverliang/docker_study/html/:/usr/share/nginx/html\ -d\ nginx
五、修改Nginx配置,解析一个网站
修改我们刚刚复制过来的nginx配置
cd/Users/roverliang/docker_study/etc vimnginx.conf
在Http模块中添加如下配置:
server { listen80; server_namewww.test_nginx.com; indexindex.html; root/usr/share/nginx/html; }
然后回到宿主机,绑定host127.0.0.1 www.test_nginx.com
大功告成
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。