当前位置: 首页 > news >正文

使用docker构建.net api镜像及nginx反向代理 - binzi

一、使用docker构建.net api镜像并且运行容器

如果你使用的是windows,确保你已经安装了docker

打开Windows PowerShell 运行

docker version

如果能显示客户端和服务端信息,说明 Docker 环境正常。

在webapi中右键dockerfile文件

局部截取_20250914_224034

系统具体做了以下操作:

🔍 1. VS 调用了 Docker CLI 命令

VS2022 内部集成了对 Docker Desktop 的支持。
当你右键 “生成 Docker 镜像” 时,它实际上会调用类似下面的命令:

 
docker build -f Dockerfile -t <镜像名>:<tag> <上下文路径>
    • -f Dockerfile → 指定你右键的 Dockerfile

    • -t → 给镜像起名字(通常是 <项目名>:latest

    • <上下文路径> → 一般是项目所在目录(VS 会自动传入)


🔍 2. Docker Desktop 后台执行 build

这个命令被交给 Docker Desktop 的 Engine(守护进程),由它负责:

    1. 打包你的项目目录作为 build 上下文

    2. 按 Dockerfile 的步骤分层执行(拉取基础镜像、复制文件、dotnet publish、设置 ENTRYPOINT 等)

    3. 最终生成一个镜像,存储到本地 Docker Desktop 的镜像库里


🔍 3. 镜像写入本地存储

镜像最终会存在 Docker 的本地存储里(Linux 上是 /var/lib/docker,Windows 的 Docker Desktop 是在 WSL2 虚拟机里)。
所以你在 Docker Desktop GUI 里能看到刚生成的镜像。


🔍 4. 为什么 VS2022 可以无缝对接 Docker

因为 安装 Docker Desktop 后,Windows 上有个 Docker CLI (docker.exe),它默认通过 npipe:////./pipe/docker_engine 或者 WSL2 通道和 Docker Desktop 的 daemon 通信。
VS2022 就是直接调用这个 CLI 接口来操作 Docker 的。


✅ 总结:
当你在 VS2022 里“生成 Docker 镜像”时,本质上就是:

      1. VS 调用 docker build

      2. Docker Desktop 执行构建 → 存储镜像

      3. 你在 Docker Desktop GUI 里就能看到

 

 

根据镜像创建容器并指定端口映射

docker run -itd -p  宿主机的端口:项目端口 镜像名称
docker run -itd -p  9991:8881 name

输入查询命令,确定容器在运行

image

 

image

 

浏览器输入http://localhost:8881查看效果。

局部截取_20250914_230019

 

 

二、在ubuntu创建Nginx容器

1. 启动容器时映射端口

如果你启动容器时没加 -p,外部是访问不到的。

建议重新启动容器:

 
docker run -it -p 8080:80 --name testnginx ubuntu bash

这样,容器的 80 端口(nginx 默认监听的端口)会映射到宿主机的 8080。


2. 在容器里启动 nginx

进入容器:

docker exec -it testnginx bash

安装并启动 nginx(你之前装过的话只要启动即可):

apt-get update 
apt-get install -y nginx
service nginx start

查看nginx状态:

service nginx start

确认 nginx 进程是否运行:

ps aux | grep nginx

3. 从宿主机访问

现在在宿主机浏览器访问:

http://localhost:8080

应该能看到 Welcome to nginx! 页面。

局部截取_20250914_000237

 

 

三、使用Nginx进行反向代理

请求链路:

浏览器 (http://localhost:8109/api/User/test)
    ↓
Nginx 容器(反向代理)↓
宿主机 .NET WebAPI (http://host.docker.internal:9991/api/User/test)
    ↓
返回响应给浏览器

1.先在宿主机(如果是本地的docker就是本机)准备好conf文件,需要把这个conf个挂载到nginx容器上。

image

 

 2.根据nginx镜像与本地的conf启动一个容器

//根据镜像启动一个容器


docker run -d --name nginx109 -p 8109:80 -v E:\nginx\nginx.conf:/etc/nginx/nginx.conf nginx

 

image

image

3.测试api接口

 通过docker中的api容器访问:

image

 

通过docker中的nginx代理访问:

image

 

 

 

 

 

 

 

http://www.hskmm.com/?act=detail&tid=27661

相关文章:

  • 利用sprintf与snprintf巧妙实现数值变量转换为字符串型
  • Helmholtz-Gibbs自由能与熵弹性
  • 日志|电话号码的字母组合|子集|回溯
  • Docker实用篇(初识Docker,Docker的基本操作,Dockerfile自定义镜像,Docker-Compose,Docker镜像仓库) - a
  • ROIR 2023
  • Rust 的验证码图像识别系统设计与实现
  • 【题解】P12992 [GCJ 2022 #1C] Intranets
  • ysyx:pa3.1批处理系统
  • C 语言的验证码图像识别系统实现
  • Nginx典型流控配置示例
  • 基于 C 语言的验证码图像识别系统实现
  • oppoR9m刷Linux系统: 引导知识
  • 操作系统知识点
  • JAVA: Mybatis添加xml执行多行更新语句时报错
  • 安装Docker(CentOS安装Docker,CentOS7安装DockerCompose,Docker镜像仓库) - a
  • 上代码演示下Profile-Guided Optimization (PGO)
  • 所有文档每页的第一行居中对齐
  • 109
  • 一个有趣的网站,可以给自己生成一个奖牌:aitokenawards.com
  • 20232416 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • day008
  • lzr 的区间(interval)
  • IRB-120机械臂socket通信接受上位机指令运行程序段
  • 1.1.1.1 金融市场的定义与功能
  • 使用c#操作elasticsearch8
  • CF45C Dancing Lessons 题解
  • APUE学习笔记之文件IO(三) - Invinc
  • note
  • 供应链优化技术助力应对疫情挑战
  • 搜索关键词 - 呓语