一、使用docker构建.net api镜像并且运行容器
如果你使用的是windows,确保你已经安装了docker
打开Windows PowerShell 运行
docker version
如果能显示客户端和服务端信息,说明 Docker 环境正常。
在webapi中右键dockerfile文件
系统具体做了以下操作:
🔍 1. VS 调用了 Docker CLI 命令
VS2022 内部集成了对 Docker Desktop 的支持。
当你右键 “生成 Docker 镜像” 时,它实际上会调用类似下面的命令:
-
-
-f Dockerfile
→ 指定你右键的 Dockerfile -
-t
→ 给镜像起名字(通常是<项目名>:latest
) -
<上下文路径>
→ 一般是项目所在目录(VS 会自动传入)
-
🔍 2. Docker Desktop 后台执行 build
这个命令被交给 Docker Desktop 的 Engine(守护进程),由它负责:
-
打包你的项目目录作为 build 上下文
-
按 Dockerfile 的步骤分层执行(拉取基础镜像、复制文件、dotnet publish、设置 ENTRYPOINT 等)
-
最终生成一个镜像,存储到本地 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 镜像”时,本质上就是:
-
VS 调用
docker build
-
Docker Desktop 执行构建 → 存储镜像
-
你在 Docker Desktop GUI 里就能看到
-
根据镜像创建容器并指定端口映射
docker run -itd -p 宿主机的端口:项目端口 镜像名称
docker run -itd -p 9991:8881 name
输入查询命令,确定容器在运行
浏览器输入http://localhost:8881查看效果。
二、在ubuntu创建Nginx容器
1. 启动容器时映射端口
如果你启动容器时没加 -p
,外部是访问不到的。
建议重新启动容器:
这样,容器的 80 端口(nginx 默认监听的端口)会映射到宿主机的 8080。
2. 在容器里启动 nginx
进入容器:
安装并启动 nginx(你之前装过的话只要启动即可):
查看nginx状态:
service nginx start
确认 nginx 进程是否运行:
3. 从宿主机访问
现在在宿主机浏览器访问:
应该能看到 Welcome to nginx! 页面。
三、使用Nginx进行反向代理
请求链路:
浏览器 (http://localhost:8109/api/User/test) ↓ Nginx 容器(反向代理)↓ 宿主机 .NET WebAPI (http://host.docker.internal:9991/api/User/test) ↓ 返回响应给浏览器
1.先在宿主机(如果是本地的docker就是本机)准备好conf文件,需要把这个conf个挂载到nginx容器上。
2.根据nginx镜像与本地的conf启动一个容器
//根据镜像启动一个容器
docker run -d --name nginx109 -p 8109:80 -v E:\nginx\nginx.conf:/etc/nginx/nginx.conf nginx
3.测试api接口
通过docker中的api容器访问:
通过docker中的nginx代理访问: