接着上一节没有演示完的继续,连接:Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(一)html
演示步骤:nginx
1,获取nginx镜像,并运行Nginx容器docker
2,根据上传的项目生成镜像文件,并运行项目容器vim
3,配置Nginx反向代理相关映射,并映射到项目容器,实现反向代理centos
4,最终展现效果api
第一步:获取nginx镜像,并运行 nginx容器安全
要运行容器,首先须要有相应的镜像,使用下面的命令拉取Nginx镜像:若是不指定版本号,默认拉取最新版本bash
docker pull nginx
获取Nginx镜像以后,就能够根据镜像来运行Nginx容器,使用下边命令运行容器服务器
docker run --name=nginx -d -p 4043:80 nginx
上面命令的解释以下:ide
上图表示Nginx容器已经在运行,经过外部访问4043端口,显示以下,表示成功
第二步: 生成项目镜像文件,并运行项目容器
首先找到项目文件目录,并进入项目根目录当中,而后使用以下命令生成镜像
ls --查看本地文件列表 cd netcoredemo --进入到项目根目录 docker build -t myapidemo . --生成项目镜像文件
上面命令的解释:
经过命令 docker images 查看当前运行的镜像,能够看到上边的镜像已经建立成功,而且自动建立相关依赖镜像。
建立完镜像后, 使用下边命令运行容器
docker run --name=myapidemo -d -p 9020:80 myapidemo
解释:
1,容器名:myapidemo
2,对外开放端口:9020
上图能够看到,容器已经成功运行,到如今,就能够远程经过 9020端口直接访问项目了,以下:调用API项目接口:
可是为了安全,生产环境是不容许这样直接访问容器的,因此须要使用Nginx来代理访问!
第三步:配置Nginx相关映射,并映射到项目容器,实现反向代理
首先进入Nginx容器,查看Nginx默认配置都是神马内容,使用下面的命令进入容器里面
docker exec -it nginx /bin/bash
解释说明:
若是你看到上图错误,说明你的Nginx容器没有运行,使用命令 docker start nginx 启动便可!
正常状况下你会看到以下图所示,你会发现,终端帐户名称变了,从原来的 @centos7 变成了 @xxxxxx5b,说明已经进入到容器当中了
使用命令 exit 能够退出容器
Nginx默认会安装在etc目录下面,经过命令 ls 和命令 cd 结合,一层层往下找!
使用vim命令编辑 nginx.conf 文件,这时候邦德一下,发现居然报错了!
缘由是由于 vim命令须要安装一下,系统自己是没有安装的,直接执行以下命令进行更新安装:
apt-get update --先更新来源 apt-get install -y vim --安装 vim
注意:上边两个命令,不是用 yum命令安装,而是用 apt-get 命令!
再次使用vim命令编辑 nginx.conf 文件
看最后红框里面的内容 include /etc/nginx/conf.d/*.conf,表示默认使用的是conf.d目录下面的conf文件进行配置。
那么接下来,咱们的映射内容也将会针对 conf.d目录展开,能够看到conf.d目录下有个 default.conf文件!
所谓映射的目的就是隐藏服务器上真实的本地目录,使用自定义的别名对外开放,供外部访问!
首先在服务器上建立nginx的一些自定义文件存储目录,用于去隐藏真实目录或文件!
执行以下命令,建立三个文件目录 www、logs、conf
mkdir -p /root/nginx/www /root/nginx/logs /root/nginx/conf
查看nginx容器id
将nginx容器中,conf.d目录下的配置文件copy到本地,cp 表示复制
docker cp ea37c8eaef5b:/etc/nginx/conf.d/default.conf /root/nginx/conf
上图表示已经成功复制过来了!
要给netcore容器配置反向代理,首先须要知道netcore项目容器的IP地址,因此在修改配置以前,首先须要获取myapidemo容器的IP地址。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名 or 容器Id
而后使用vim命令编辑 default.conf 文件(这个目录下:/root/nginx/conf),将文件内容设置以下:
server{ listen 80; charset utf-8; server_name 172.17.0.3; location / { proxy_pass http://172.17.0.3:80; proxy_redirect default; } }
由于容器是内部访问,因此设置的端口是80,而不是运行容器时设置的对外的9020端口。 修改完成以后,:wq 保存退出
如今从新建立一个新的nginx容器,名称为:nginxapi,并将www,logs,conf目录映射到本地,对外端口设置为:4030
docker run -d -p 4030:80 --name nginxapi \ -v /root/nginx/www:/usr/share/nginx/html \ -v /root/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf \ -v /root/nginx/logs:/var/log/nginx \ nginx
上图能够看到,新的容器成功建立并运行,而且对外设置的端口为:4030,
如今咱们经过4030端口在访问咱们上边的项目接口,以下图所示,访问成功!
而用未设置映射的Nginx容器,4043端口访问接口,则返回的是 <404 Not found>