Ubuntu下安装Docker并部署.NET API(二)

上一节已经在服务器安装了docker,这一节将介绍把我们的.net 6Web Api程序使用docker来运行:

1.为项目添加docker支持,如下图:

弹出如下所示界面:

直接点击"确定" 即可;

2.修改Dockerfile文件:

操作完成后,在你的工程下面会生成一个Dockerfile文件,如下图:

双击打开文件,将不用的地方注释掉,最后文件如下所示:

cs 复制代码
# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。

# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80


# 此阶段用于生成服务项目
#FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
#ARG BUILD_CONFIGURATION=Release
#WORKDIR /src
#COPY ["CityInvest.Api/CityInvest.Api.csproj", "CityInvest.Api/"]
#COPY ["CityInvest.Domain/CityInvest.Domain.csproj", "CityInvest.Domain/"]
#COPY ["CityInvest.Infrastructure/CityInvest.Infrastructure.csproj", "CityInvest.Infrastructure/"]
#RUN dotnet restore "./CityInvest.Api/CityInvest.Api.csproj"
COPY . .
#WORKDIR "/src/CityInvest.Api"
#RUN dotnet build "./CityInvest.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build
#
## 此阶段用于发布要复制到最终阶段的服务项目
#FROM build AS publish
#ARG BUILD_CONFIGURATION=Release
#RUN dotnet publish "./CityInvest.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
#
## 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值)
#FROM base AS final
#WORKDIR /app
#COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "CityInvest.Api.dll"]

3.发布项目

发布项目的时候填入:

填写完成,点击发布即可,等待一会儿发布完成。

注意:发布的文件包里面可能没有把刚刚新建的Dockerfile文件包含进去,这时就需要手动将文件拷贝进去。

4.打包镜像

将发布的文件目录拷贝到服务器上,进入工程目录,执行命令:

bash 复制代码
docker build -t cityinvest.api .

注意:cityinvest.api 是我自己的工程名称,在Dockerfile文件里面可以看到: 就是dll前面的部分,但是要将大写字母换为小写,后面还要跟一个 空格 + .等待一会儿,打包镜像完成;此时,使用docker images可以看到打包的镜像,如下所示:

bash 复制代码
docker images

REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
cityinvest.api   latest    b74648279b2a   About a minute ago   292MB
hello-world      latest    1b44b5a3e06a   5 months ago         10.1kB

第一列代表是镜像的名称,第二列是镜像的标签(可以更改的);

5.启动容器:

使用命令:

bash 复制代码
docker run -d -p 8080:8000 --name cityinvest-docker  cityinvest.api

-p 8080:8000将容器的8080端口映射到主机的8000端口(8000端口是我服务自己配置的端口 "Url": "http://*:8000" ),使用docker运行后,则使用8080来访问了。

cityinvest-docker 是自定义的容器名称;

cityinvest.api:就是我刚刚打包好的镜像的名称;

启动成功后,将打印出一串代码,这个是容器的 ID,可以通过这个 ID 来管理自己的容器,例如查看容器的日志或停止容器等;

6.测试:

此时用postman或者apifox等进行接口的测试,使用 8080端口,若接口调试通过,则表示启动成功。

注意事项:

1.服务的防火墙需要关闭;

2.如果运行报错如下:因为我们之前选择的是

System.InvalidOperationException: Unable to resolve service for type '***.***.***' while attempting to activate '***.***.***' 错误意思就是加载dll文件失败,后面将目标运行时改为 可移植 然后重新发布,更新后,重新运行dcoker;

补充:常用docker命令:

bash 复制代码
#查看正在运行的容器
sudo docker ps
 
#查看所有容器(包括停止的)
sudo docker ps -a


#停止容器(格式:docker stop 容器ID/容器名)
sudo docker stop cityinvest-docker
 
#启动已停止的容器
sudo docker start cityinvest-docker
 
#重启容器
sudo docker restart cityinvest-docker

#进入正在运行的容器(格式:docker exec [参数] 容器ID/容器名 命令)
sudo docker exec -it cityinvest-docker /bin/bash
 
# 删除容器(格式:docker rm 容器ID/容器名)
# 注意:删除容器前需要先停止容器
sudo docker stop cityinvest-docker
sudo docker rm cityinvest-docker
 
# 查看容器日志(格式:docker logs 容器ID/容器名)
# 示例:查看cityinvest-docker容器的最新10条日志
sudo docker logs --tail 10 cityinvest-docker

#显示所有本地镜像
docker images

#删除一个镜像
docker rmi 镜像名称

#删除多个镜像
docker rmi 镜像名称1  镜像名称2 ...

后续研究K8s待补充...

相关推荐
小p18 小时前
docker学习: 1. docker基本使用
docker
蝎子莱莱爱打怪1 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀1 天前
Docker部署Nacos
docker·容器
缓解AI焦虑1 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
mudtools1 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的2 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
1candobetter2 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
シ風箏2 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
呉師傅2 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑