本文共 1886 字,大约阅读时间需要 6 分钟。
运行环境:
CentOS 7
Docker
.Net core版本:2.1
程序开发工具 vs2017
新建asp.net core项目
选择API,一定要勾选启用Docker支持
新建一个ApiController
命名为LoginController,然后新建一个测试方法checkLogin
这步完成后,一个简单的测试工程就建好了。接下就是要发布,用来获取生成docker镜像文件需要的文件。发布之前,先改一些配置
在Program.cs中的 CreateWebHostBuilder方法加.UseKestrel().UseUrls("http://*:8080")。设定默认端口。
修改Dockerfile文件,内容如下:
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.#For more information, please see https://aka.ms/containercompat#基于 `microsoft/dotnet:2.1-aspnetcore-runtime` 来构建我们的镜像FROM microsoft/dotnet:2.1-aspnetcore-runtime #拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中 COPY . /publish#设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹WORKDIR /publish#设置Docker容器对外暴露8080端口EXPOSE 8080ENTRYPOINT ["dotnet", "myNetCoreDocker.dll"]#设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
如果要访问Oracle这里要加
#设置时区
ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone否则提示
ORA-01882: timezone region not found
保存后更改dockerfile的属性
重新生成后发布
发布成功后去查看一下目标目录
这种发布方式在项目引用其它组件时,可能会不完整,这里建议用管理员模式进入命令窗口,进入项目文件夹,
执行dotnet publish -c Release
要确定目录有Dockerfile这个文件,生成docker镜像时必需。将publish目录放到docker所在的centos系统中,可以使用ftp传过去。
将整个目录传过去之后,进入publish这个目录,可以看到刚刚发布的文件。
开始生成镜像
执行 docker build -t mynetcoredocker .
生成一个名字叫 mynetcoredocker的镜像,注意build命令后面的 . 不可去掉,这个 . 代表的是当前构建镜像的上下文路径
生成过程中的提示
生成完毕
会看到Successfully built的字样
执行docker images查看镜像
[root@localhost publish]# docker images
运行这个镜像:
docker run --name mynetcoredocker -d -p 8080:8080 mynetcoredocker
--name 容器的名称
mynetcoredocker 镜像名称
-d 后台进程
-p 是进行宿主和容器之间端口的映射(-p 宿主端口:容器端口)
执行docker ps -a查看运行结果
验证一下asp.net core webapi是否工作。通过postman调用一下
可以返回结果,docker上部署asp.net core程序完毕。
这里需要注意一下项目中的文件引用路径,如css,js的引用路径大小写问题,Linux下区分大小写,Windows下正常工作的,发布后部署到docker中,就会出现加载不了css和js的问题。
转载地址:http://ngqbi.baihongyu.com/