首先还是 docker pull nginx
然后根据刚刚pull下来的image创建容器,docker run -p 8800:80 --name mynginx -d nginx
然后使用docker ps查看有木有这个容器(可能会看到you can get programm blabla.core,blabla.full什么的,笔者也没管,不知道做了操作了什么就好了。。。也许是没下载完把),如果你找到了这个mynginx,那么就直接访问localhost:8800(我们把docker的容器8800端口映射成了nginx的80端口),就能看到喜人的nginx欢迎页面了。
但是我们还要配置nginx,使其能够反向代理我们的后端接口,还能均衡一下请求(负载均衡)。
docker配置nginx有好几种方式,我们主要说一下两种:1,挂载宿主机的文件;2,直接进入容器去修改配置文件。
第二种比较好理解,我们来讲一下第一种。
什么叫做挂载宿主机的文件呢?其实很简单。这就好比一女侍二夫。
在我的机器里面搞出一个文件来,这个文件就是这个欲求不满的女人,她的一个丈夫就是我们的宿主机,因为她在我的操作系统里面,所以我们可以使用cat命令看光她的身体,也可以用vi命令随便蹂躏她。
然后我们在创建nginx容器的时候告诉容器,你老婆在外面被搞呢(好贱哦)。然后容器就很烦,但是也没什么好办法,毕竟自己那么小。
但是终究是自己的老婆,我们也得让容器把这个 文件搞到自己的被窝里面。
言归正传。
把这个文件存为xxx.conf文件,(xxx自己起名字,后缀是.conf)就行了。
为了不与刚才创建的容器混淆,删除掉刚刚创建的容器。(蛋疼么)
然后docker run -p 8800:80 --name mynginx -d nginx -v xxx/xxx.conf:yyy/yyy.conf。
什么意思呢,就是把容器外面的文件映射到里面这个文件上(xxx路径自己找,yyy路径需要改为nginx的配置文件路径。一般十/etc/nginx/conf.d找不到的话别问我,问百度。yyy.conf文件名随便取)。
这样,如果你想修改nginx配置,就可以在外面直接修改,然后docker restart mynginx就行了,容器会自动刷新文件(自己的老婆当然要最新的状态)。
第二种呢,就是直接进去bash修改了。但是一般镜像不带vim编辑器,所以需要先安装一个vim。
后来,在进行Nginx配置的时候,笔者使用nginx的80端口映射到容器的8800端口,玛德死活成功不了。后来改成808映射外面容器的8800,又出现了502 BateGateWay,度娘告诉我说docker有自己的虚拟网卡地址,所以配置的127.0.0.1访问不到别的docker容器。吓的我赶紧ifconfig,复制粘贴。没想到,成功啦,啊哈哈哈哈。
PS:第一种必须重启容器才能读取最新的配置文件,但是第二种最好不要重启容器,而是在bash里面重启nginx 。使用nginx -s reload。否则,配置写错了,容器就启动不了了,也就无法进去修改配置文件了。
PPS:如果要修改已经创建容器的端口映射,去修改/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json就好了(笔者亲测不管用)