一、系统环境
window10:
- Visual Studio
- Docker desktop
- .Net core
Ubuntu1804:
- Docker
二、部署流程
1. 发布前的准备
因为我们后端的代码是运行在某个端口上的,因此需要在程序文件中指定程序运行的端口号(例如9000):
program.cs:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// webBuilder.UseStartup<Startup>(); // 原本的代码
webBuilder.UseStartup<Startup>()
.UseUrls("http://*:9000");
});
2. 生成release文件
- ① 更改解决方案配置为Release,默认为Debug模式
- ② 右键项目点击生成或重新生成,控制台显示生成成功和生成文件位置:
- 在Release目录下新建Dockerfile文件(没有后缀),文件路径及内容如下:
注:
- 这里的9000表示向外暴露的端口号,因此需要根据自己的情况修改,与第一步程序运行的端口号一致
- xxx.dll 表示项目名称的dll文件,因此要与 工程名\bin\Release\netcoreapp3.1目录下的 xxx.dll文件名一致。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR ./
COPY . ./
EXPOSE 9000
ENTRYPOINT ["dotnet", "xxx.dll"]
3. 生成镜像
镜像仓库: Docker默认使用的是国外的镜像仓库,因此在拉取基础镜像时会很慢,因此可以考虑使用国内的阿里云镜像仓库作为自己的远程仓库,这样也方便部署的时候直接拉取镜像到服务器,配置方式可参考:XXX
在 xxx\bin\Release\netcoreapp3.1 目录(Dockerfile所在目录)下执行如下命令生成镜像:
注:
- xxx:镜像名称
- v0.0.1:镜像版本
docker build -f Dockerfile . -t xxx:v0.0.1
成功生成镜像(由于我之前生成过,所以显示build时间很快),这时可以在Docker desktop中看到我们的镜像。
或直接通过命令docker images
查看镜像信息。
4. push镜像到远程仓库
为了方便我们在服务器上方便的拉取镜像部署以及对镜像版本的迭代,可以将我们的镜像push到我们阿里云的镜像仓库(因为国内访问Docker Hub太慢)。命令参考阿里云镜像仓库的操作。以下操作参考自己阿里云镜像仓库的操作指南。
- 登录到阿里云Docker registry,输入注册时的密码
docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
- 重新给当前镜像加tag(也可以直接push,这里只是为了规范)
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/beyonderwei/xxx:[镜像版本号]
- 推送镜像到自己的阿里云Docker Registry
docker push registry.cn-hangzhou.aliyuncs.com/beyonderwei/xxx:[镜像版本号]
5. 在服务器上拉取镜像
- 登录到阿里云Docker registry
docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
- 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/beyonderwei/xxx:[镜像版本号]
6. 最终部署
- 执行命令得到容器
docker run -d --name [容器名] -p 9000:9000 [镜像名称]:[版本号]
eg:
docker run -d --name xxx -p 9000:9000 registry.cn-hangzhou.aliyuncs.com/beyonderwei/xxx:v0.0.1
注:这里的端口映射应与第一步配置的端口相同,不然将导致接口无法被访问到。
7. 接口测试
- 查看运行状体
- 通过浏览器或postman测试开放的接口。
三、帮助文章
- 开通阿里云镜像仓库Docker Registry
- Docker常用命令
关于作者:
个人网站:http://beyonderwei.com
邮箱:beyonderwei@gmail.com