让.NetCore程序跑在任何有docker的地方
让.NetCore程序跑在任何有docker的地方
一.分别在Windows/Mac/Centos上安装Docker
Windows上下载地址: https://docs.docker.com/docker-for-windows/install/(window上安装的常见问题和解决方案请参考下方步骤六)
Mac上下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac
Centos上安装Docker请参考我上篇文章链接: https://www.cnblogs.com/peyshine/p/12915317.html
二.打开vs 新建一个Web程序
这里选择启动docker支持,主要是为了能够自动生成dockerfile文件,如果忘记勾选了也没关系,也可以右键解决方案,点击‘添加’,选择‘docker支持’,vs也会自动为我们生成dockerfile,大概长这个样子
对dockerfile文件解释说明:
1.FROM
通过FROM指令来设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上进行拉取
2.WORKDIR
通过workdir指令用于设置Dockerfile中的RUN、CMD和ENTRYPOINT指令执行命令的工作目录(默认为/目录),该指令在Dockerfile文件中可以出现多次,如果使用相对路径则为相对于WORKDIR上一次的值
3.COPY
通过COPY指令来从指定路径拷贝一个文件或目录到容器的指定路径中
4.RUN
RUN指令会在一个新的容器中执行任何命令,然后把执行后的改变提交到当前镜像,提交后的镜像会被用于Dockerfile中定义的下一步操作,RUN中定义的命令会按顺序执行并提交,这正是Docker廉价的提交和可以基于镜像的任何一个历史点创建容器的好处,就像版本控制工具一样
5.EXPOSE
通过EXPOSE指令用来告诉Docker这个容器在运行时会监听哪些端口
6.ENTRYPOINT
通过ENTRYPOINT指令我们指定在容器启动时要运行的应用程序
关于dockerfile的更多用法可以参考: https://docs.docker.com/engine/reference/builder/
三.DotNet Core 程序在Windows Docker上的运行
直接在VS中选择以docker方式运行,VS的输出控制台就会打印以下信息内容
可以看到运行之前,VS先做了几个检查工作
windows上是否安装了Docker Desktop
Docker Desktop是否在运行
Docker Desktop的操作系统模式是否与项目的目标操作系统匹配
指定需要的镜像本地是否存在,不存在的就会进行拉取
检查完了之后就是打包镜像和运行容器
四.打包发布镜像到https://hub.docker.com/
选择发布到Docker hub,输入自己的账号密码,没有的话可以注册一个
点击发布之后,输出控制台可以看到有build打包的过程
发布完成之后,控制台会有对应的提示信息,已经成功推送带标记的‘latest’的Docker镜像
进入Docker hub上,在自己的账户的存储库下面会多处一个镜像文件,也就是刚刚推送过去的
点击进入,可以看到拉取的命令
在powershell中拉取自己的镜像
运行容器,运行成功会返回一个长的字符串,通过docker ps指令,可以查看容器已经成功运行起来了
那么这个镜像是否能在linux上拉取并运行呢?答案是否定的,因为在添加docker支持时候,我这边选了平台支持为windows,如图
步骤四:只是玩一下怎么打包推送镜像文件,不关注的可以直接跳过步骤四
五.DotNet Core 程序在Centos Docker上的运行
重新在VS中添加一个dockerfile,这次选择linux平台的
这次我们需要修改下dockerfile文件
因为我们提前编译并且发布出来了文件,所以在dockerfile中就不需要这些步骤了
贴一下dockerfile文件
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
COPY . /app
ENTRYPOINT ["dotnet", "WebApp_Docker.dll"]
发布后将Release文件下所有文件上传到centos上,然后执行以下命令打包镜像
docker build -t docker_web_test:1.0 .
后面的点可以打印出具体的执行步骤细节
通过指令验证打包结果:# docker images
最后运行容器
docker run --name docker_web_test -d -p 7788:80 docker_web_test:1.0
可以看到容器已经运行起来,并且可以输出页面内容。
六.可能遇见的错误解决方案以及小提示:
1.在window上安装docker时需要勾选上Hyper-V
2.如果在运行容器过程中依然提示错误:“The virtual machine could not be started because a required feature is not installed”,那就需要检查bios中的虚拟功能,拿我的华硕主板和inter处理器来示范,将Inter(VMX) Virtualization Tecjnology 的值设置为 Enabled
然后保存设置退出即可
3.当我们在windows上拉取镜像碰到提示镜像在当前操作系统不支持的时候,可以在linux和Windows容器之间切换。如图
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
美媒揭露疑点?以色列vs伊朗,港口袭击的幕后黑手
2020年5月18日美国《华盛顿邮报》披露,伊朗的阿巴斯港市的 Shahid Rajaei港口于本月初计算机系统遭受的攻击似乎是以色列发起的“报复”。 为何是报复? 不知各位看官们是否记得4月24日至4月25日两天发生的“以色列全国水利设施遭受不同程度网络攻击事件”,伊朗被怀疑利用美国服务器对以色列的供水命令和控制系统展开破坏。 于是紧接着5月9日,伊朗的阿巴斯港市的 Shahid Rajaei港口负责控制船只、货车和货物流通的计算机系统受到网络攻击。 根据获取的卫星图像显示,该网络攻击导致9日当天通往沙希德拉贾伊港的公路出现绵延数公里的拥堵。 12日依旧有数十艘装载集装箱的货船停泊在邻近港口的等候区水域。 选择攻击阿巴斯港(Bandar Abbas)的原因是什么? 让我们大胆的猜测一下,或许是因为阿巴斯港(Bandar Abbas)是位于伊朗南部波斯湾 霍尔木兹海峡沿岸的一座城市,也是霍尔木兹甘省(HormozgānProvince)的首府和最大城市。 历史上我国的郑和下西洋时曾到过这里,这座城市因沿着 霍尔木兹海峡,具有一定的战略位置, 是伊朗海军的主要基地所在地。 最初,官员们否...
- 下一篇
首届 Apache Spark AI智能诊断大赛重磅来袭!
Spark“数字人体”AI挑战赛——脊柱疾病智能诊断大赛介绍 首届 Apache Spark AI智能诊断大赛由阿里云、Intel、Databricks 共同举办。Spark“数字人体”AI挑战赛——脊柱疾病智能诊断大赛,召集全球开发者利用人工智能技术探索高效准确的脊柱退化性疾病自动诊断,并积极推动相关技术的临床应用。本次比赛尤其鼓励企业参赛,代表企业参赛并进入第二赛季的队伍,将有机会成为阿里云医疗行业合作伙伴。 本次大赛分为第一赛季、第二赛季、决赛三个阶段, 进入第二赛季的队伍将会被要求选择赛道,结合选手初赛排名情况和意向,选手将会被分配分别到GPU赛道和CPU赛道。 报名及实名认证(2020年5月20日-7月17日)第一赛季(2020年6月10日-7月17日,UTC+8)第二赛季(2020年7月20日-8月30日,UTC+8)
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果