• (转)让.NetCore程序跑在任何有docker的地方


        原文地址:https://www.cnblogs.com/peyshine/p/12918315.html

    一.分别在Windows/Mac/Centos上安装Docker

    Windows上下载地址:https://docs.docker.com/docker-for-windows/install/(window上安装的常见问题和解决方案请参考下方步骤六)
    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容器之间切换。如图
     
  • 相关阅读:
    OLAP ODS项目的总结 平台选型,架构确定
    ORACLE ORA12520
    ORACLE管道函数
    ORACLE RAC JDBC 配置
    ORACLE RAC OCFS连接产生的错误
    ORACLE 启动和关闭详解
    OLAP ODS项目的总结 起步阶段
    ORACLE RAC 配置更改IP
    ORACLE RAC OCR cann't Access
    ORACLE RAC Debug 之路 CRS0184错误与CRS初始化
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/13337403.html
Copyright © 2020-2023  润新知