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

接着上一节没有演示完的继续,链接:Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(一)

演示步骤:

1,获取nginx镜像,并运行Nginx容器

2,根据上传的项目生成镜像文件,并运行项目容器

3,配置Nginx反向代理相关映射,并映射到项目容器,实现反向代理

4,最终展示效果

第一步:获取nginx镜像,并运行 nginx容器

要运行容器,首先需要有相应的镜像,使用下面的命令拉取Nginx镜像:如果不指定版本号,默认拉取最新版本

docker pull nginx

获取Nginx镜像之后,就可以根据镜像来运行Nginx容器,使用下边命令运行容器

docker run --name=nginx -d -p 4043:80 nginx

上面命令的解释如下:

  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 文件,将文件内容设置如下:

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>