Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(二)

接着上一节没有演示完的继续,连接: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

  1. --name:设置容器的名称。
  2. -d:表示在后台运行容器。
  3. -p:指定端口映射。4043是宿主机的端口,供外部访问,80是Nginx容器内部的端口。
  4. nginx:表示根据nginx镜像运行容器。
  5. run 表示运行容器,若是镜像不存在,会自动调用 pull 命令拉取镜像

上图表示Nginx容器已经在运行,经过外部访问4043端口,显示以下,表示成功

第二步: 生成项目镜像文件,并运行项目容器

首先找到项目文件目录,并进入项目根目录当中,而后使用以下命令生成镜像

ls                                --查看本地文件列表
cd  netcoredemo                   --进入到项目根目录
docker build -t myapidemo .       --生成项目镜像文件

上面命令的解释:

  1. -t:表示给镜像起一个名字,例如:myapidemo
  2. 命令最后英文状态的 "." 不能省略,表示在当前目录中查找 Dockerfile文件

经过命令 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

解释说明:

  1. -it:表示分配一个伪终端。
  2. nginx:表示容器的名称,这里也可使用容器ID。
  3. /bin/bash:表示对容器执行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>

相关文章
相关标签/搜索