Docker教程:使⽤Docker容器运⾏Nginx并实现反向代理⼀、前⾔
我们知道,为了安全考虑,我们⼀般会设置反向代理,⽤来屏蔽应⽤程序真实的IP和端⼝号。在Linux系统上最常⽤的反向代理就是Nginx。本篇⽂章中,我们会通过Docker容器分别运⾏⼀个Nginx容器和⼀个ASP.NET Core应⽤程序的容器,然后设置反向代理。
⼆、运⾏Nginx容器
1、获取Nginx镜像
要运⾏容器,⾸先需要有相应的镜像,使⽤下⾯的命令拉取NGINX镜像:
docker pull nginx
如图所⽰
2、运⾏Nginx容器
获取Nginx镜像之后,我们就可以根据镜像来运⾏容器
docker run --name=nginx -d -p 4030:80 nginx
上⾯命令的解释如下:
1. --name:设置容器的名称。
2. -d:表⽰在后台运⾏容器。
3. -p:指定端⼝映射。4030是宿主机的端⼝,80是Nginx容器内部的端⼝。
4. nginx:表⽰根据nginx镜像运⾏容器。
如图所⽰
然后在浏览器⾥⾯访问:
出现上⾯的截图,就说明Nginx容器运⾏成功。
三、运⾏ASP.NET Core应⽤程序
1、构建ASP.NET Core应⽤程序镜像
我们在宿主机上⾯创建⼀个demo⽬录,然后在创建⼀个ReverseProxy⽬录,把发布后的项⽬上传到ReverseProxy⽬录下⾯
上传项⽬后的⽬录结构
然后我们使⽤下⾯的命令创建镜像
docker build -t reverseproxy .
上⾯命令的解释:
1. -t:表⽰给镜像起⼀个名字。
上⾯命令最后英⽂状态的"."不能省略,表⽰在当前⽬录中查Dockerfile⽂件。
执⾏过程如下图所⽰
执⾏完成以后,我们就可以看到刚才创建的镜像了
2、运⾏应⽤容器
创建完镜像以后运⾏容器
docker run --name=reverseproxy -d -p 9020:80 reverseproxy
这⾥使⽤宿主机的9020端⼝映射到容器内的80端⼝。
如图所⽰
从上图中我们可以看到容器已经在运⾏了,我们在浏览器⾥⾯访问,验证容器是否运⾏成功
出现上图所⽰的结果,表明容器运⾏成功。
三、设置反向代理
在上⾯的步骤中,我们分别运⾏了nginx容器和ASP.NET Core应⽤程序的容器,并且都可以在浏览器⾥⾯访问,下⾯我们来设置反向代理。反向代理实现如下的效果:在浏览器⾥⾯访问4030端⼝的时候跳转到9020端⼝,浏览器显⽰ASP.NET Core应⽤程序。
配置反向代理,我们需要修改Nginx的配置⽂件。在Nginx的配置⽂件⾥⾯设置反向代理的HTTP地址。
要修改Nginx的配置⽂件,⾸先需要进⼊Nginx容器⾥⾯,使⽤下⾯的命令进⼊容器⾥⾯
docker exec -it nginx /bin/bash
上⾯命令的解释说明:
1. -it:表⽰分配⼀个伪终端。
2. nginx:表⽰容器的名称,这⾥也可以使⽤容器ID。
3. /bin/bash:表⽰对容器执⾏bash操作。
执⾏过程如图所⽰
上⾯的截图中,我们使⽤ls查看,发现⾥⾯其实就是⼀个Linux操作系统。
Nginx默认会安装在etc⽬录下⾯
然后进⼊nginx⽬录
我们看到了f配置⽂件,需要在这个配置⽂件⾥⾯设置反向代理。我们使⽤vim命令编辑f⽂件:
我们看最后红框⾥⾯的内容,表⽰使⽤的是conf.d⽬录下⾯的conf⽂件进⾏配置。我们进⼊conf.d⽬录下⾯,然后编辑f⽂件。要配置反向代理,我们⾸先需要知道要代理的程序的IP地址,所以在修改配置之前,我们⾸先需要获取reverseproxy容器的IP地址。docker inspect 容器名称
如图所⽰
我们会看到很多信息,这⾥只需要关注最后的⽹络配置信息即可
获取到了容器的IP地址以后,我们就可以配置反向代理了。f⽂件
因为容器是内部访问,所以设置的端⼝是80,⽽不是运⾏容器时设置的9020端⼝。修改完成之后保存退出。我们可以使⽤下⾯的命令检查⼀下修改后的配置⽂件是否有错:
nginx -t
如图所⽰
如果修改的配置⽂件没有错误,则退出容器。如果修改的配置⽂件有错误,要改正错误,然后退出容器。
由于我们修改了配置,所以需要重新运⾏容器,以便配置⽣效。
然后我们在浏览器⾥⾯访问4030端⼝
docker进入容器可以看到页⾯被代理到了9020端⼝显⽰的内容。这样就实现了反向代理。