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待补充...

相关推荐
无风听海1 小时前
.NET 10 之dotnet run的功能
.net
馨谙1 小时前
Ansible 配置文件详解:让自动化管理更轻松
运维·github·ansible
码云数智-大飞2 小时前
.NET 中高效实现 List 集合去重的多种方法详解
.net
easyboot2 小时前
使用tinyply.net保存ply格式点云
.net
江湖有缘2 小时前
基于华为openEuler搭建ServerBee服务器监控工具
运维·服务器
那就回到过去2 小时前
RSTP的工作原理
运维·服务器·网络
张人玉2 小时前
WPF 多语言实现完整笔记(.NET 4.7.2)
笔记·.net·wpf·多语言实现·多语言适配
UpYoung!2 小时前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
运维·数据库·sqlserver·运维开发·数据库管理·开发工具·sqlserver2019
Gofarlic_OMS2 小时前
Altium许可证状态自动化监控方案
大数据·运维·服务器·人工智能·自动化·github