windows制作docker镜像_.NET Core程序跑在任何有docker的地方

(给DotNet加星标,提升.Net技能)

转自:沛山 cnblogs.com/peyshine/p/12918315.html

一、分别在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程序

15ac907a85b94ebef462b4f922ee8003.png

这里选择启动docker支持,主要是为了能够自动生成dockerfile文件,如果忘记勾选了也没关系,也可以右键解决方案,点击‘添加’,选择‘docker支持’,vs也会自动为我们生成dockerfile,大概长这个样子

52f6213a04d55b25fb866051247fb7a9.png

6b826d2b9bc5974c32b04d09f648d2a9.png

对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/

三、.NET Core 程序在Windows Docker上的运行

b79d02cad9ce1bb1b55af0588608ee58.png

直接在VS中选择以docker方式运行,VS的输出控制台就会打印以下信息内容

5a7f9c6133381fda56056473bfbe83d5.png

可以看到运行之前,VS先做了几个检查工作

  • windows上是否安装了Docker Desktop

  • Docker Desktop是否在运行

  • Docker Desktop的操作系统模式是否与项目的目标操作系统匹配

  • 指定需要的镜像本地是否存在,不存在的就会进行拉取

  • 检查完了之后就是打包镜像和运行容器

四、打包发布镜像到https://hub.docker.com/

选择发布到Docker hub,输入自己的账号密码,没有的话可以注册一个

ecccb246ee60b58ff95b3c63d5bd1a9a.png

点击发布之后,输出控制台可以看到有build打包的过程

c8b52302f84910f65493d0da30efdcca.png

发布完成之后,控制台会有对应的提示信息,已经成功推送带标记的‘latest’的Docker镜像

66d7d202d3566c86de7ef9ed47229304.png

进入Docker hub上,在自己的账户的存储库下面会多处一个镜像文件,也就是刚刚推送过去的

8690ecd10c52a0ebfb4fe53e5d2a7ce0.png

点击进入,可以看到拉取的命令

87fd7ce7379213468184096f7485f78b.png

在powershell中拉取自己的镜像

8565ef08b58dca95d77d597293bffc18.png

运行容器,运行成功会返回一个长的字符串,通过docker ps指令,可以查看容器已经成功运行起来了

133a99bfe2a91bade1283de232be0ab1.png

那么这个镜像是否能在linux上拉取并运行呢?答案是否定的,因为在添加docker支持时候,我这边选了平台支持为windows,如图

fc4b208396abd0e23e90d8d9c786104d.png

步骤四:只是玩一下怎么打包推送镜像文件,不关注的可以直接跳过步骤四

五、DotNet Core 程序在Centos Docker上的运行

重新在VS中添加一个dockerfile,这次选择linux平台的

81c79e7320c7241a869d4f540fd18679.png

这次我们需要修改下dockerfile文件

因为我们提前编译并且发布出来了文件,所以在dockerfile中就不需要这些步骤了

467b7aec04ba9162893cd477d200f069.png

贴一下dockerfile文件

3.1-buster-slim AS 

发布后将Release文件下所有文件上传到centos上,然后执行以下命令打包镜像

docker 

后面的点可以打印出具体的执行步骤细节

9c26bef60b1baa1e1d8d7c0c42b2603f.png

通过指令验证打包结果:# docker images

cec8ed9578c7aace4f21403e4bda45a7.png

最后运行容器

docker 

可以看到容器已经运行起来,并且可以输出页面内容。

六、可能遇见的错误解决方案以及小提示

1、在window上安装docker时需要勾选上Hyper-V

c6796379aed8c276835e355dc5c66f26.png

2、如果在运行容器过程中依然提示错误:“The virtual machine could not be started because a required feature is not installed”,那就需要检查bios中的虚拟功能,拿我的华硕主板和inter处理器来示范,将Inter(VMX) Virtualization Tecjnology 的值设置为 Enabled

0caaaf120c4eb04893a9f8fc095bb3ac.png

然后保存设置退出即可

3、当我们在windows上拉取镜像碰到提示镜像在当前操作系统不支持的时候,可以在linux和Windows容器之间切换。如图

a589d2415248bdca857f1bd914c6b0e3.png

推荐阅读   点击标题可跳转 .NET Core 3.1运行Docke下实现负载均衡 Docker 常用命令(.NET Core示例) ASP.NET Core 3.0跨平台开发体验: Docker

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

63c7de1c1ee1c9a9828d95fb03a6cfbd.png

好文章,我在看❤️

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值