zoukankan      html  css  js  c++  java
  • 发布 .Net Core WebAPI 应用程序到 Docker

    本文创建一个简单的 .net core webapi 项目,并通过 Docker 运行起来。涉及到 Dockerfile 编写,生成镜像,并运行镜像到容器里。

    1. 创建 .net core webapi 项目

    创建基于 .net core 2.0 的 webapi 项目,命名为 GetMachNameWebAPI。

    并修改 ValuesController 的 Get() 方法返回当前机器的机器名或其他操作。

    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { Environment.MachineName, Environment.OSVersion.Platform.ToString() };
    }
    

    2. 编译应用

    在项目根目录使用 dotnet publish 命令发布应用程序,发布后的资源被保存在目录
    inDebug etcoreapp2.0publish 下面。

    3. 创建 Dockerfile 文件

    在publish里目录里面新建一个Dockerfile文件(文件名就是Dokerfile,没有扩展名),并在该文件中定义如下的内容:

    # 基于microsoft/aspnetcore:2.0构建Docker Image
    FROM microsoft/aspnetcore:2.0
     
    # 设置工作路径
    WORKDIR /app
     
    # 将当前文件夹下的所有文件全部复制到工作目录
    COPY *.* ./
     
    # 配置环境变量ASPNETCORE_URLS
    ENV ASPNETCORE_URLS http://0.0.0.0:5000
    
    # 暴露5000端口
    EXPOSE 5000
     
    # 执行dotnet GetMachNameWebAPI.dll命令
    CMD ["dotnet", "GetMachNameWebAPI.dll"]
    

    FROM:第一个指令必须为 FROM。 此指令用于初始化新的生成阶段,并为剩余指令设置基础映像。可使用多个FROM为多个映像。

    WORKDIR:为剩余的任意 RUN、CMD、ENTRYPOINT、COPY 和 ADD Dockerfile 指令设置工作目录。 如果不存在,则会创建该目录。

    COPY:从源路径复制新文件或目录,并将它们添加到目标容器文件系统。

    ENV:用来在镜像构建过程中设置环境变量。

    RUN:在当前映像之上的一个新层中执行任何命令,并提交结果。

    ENTRYPOINT:支持以可执行文件的形式运行容器。每个Dockerfile中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。

    详细请参考官网Dockerfile reference文档

    注意ASPNETCORE_URLS的配置可以直接在代码里面Program的Main方法里指定,比如:

    .UseUrls("http://localhost:5001")
    

    也可以如本文通过环境变量配置。可参看.Net Core 修改默认的启动端口

    4. 上传文件到服务器

    通过WinSCP类似的软件,将该目录下的全部内容复制到Ubuntu机器上。

    5. 生成Docker Image

    在 Dockerfile 文件同目录下执行以下命令,创建Docker Image。千万别省略了最后一个点号,它表示采用当前路径的Dockerfile来生成Docker Image。

    docker build -t getmachinewebapi:v0.1 .
    

    在这条命令中:

    -t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。

    最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

    详细请参考官网docker build文档

    6. 在Docker Container中运行 Web API应用

    现在,我们就可以使用docker run来执行刚才产生的Docker Image了。docker run会把Docker Image加载到Docker Container中,然后执行由Dockerfile指定的命令(也就是dotnet DockerWebAPI.dll命令)。docker run的命令如下

    docker run -it -p 8080:5000 getmachinewebapi:v0.1
    

    在这条命令中:

    -it参数:表示需要提供一个模拟的shell环境,并要求有用户交互功能,这样在本机窗口输入的命令,就会传入容器。

    -p 8080:5000参数:表示需要将Docker Container的5000端口映射到主机环境的8080端口,也就是客户端可以直接通过8080端口访问我们的应用程序。

    getmachinewebapi:v0.1参数:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。

    详细请参考官网docker run文档

    7. 测试

    在Linux主机里面通过curl测试:

    curl http://localhost:8080/api/values && echo
    

    或者在另外一台机器访问地址 例如http://192.168.174.135:8080/api/values

    源代码

    参考

  • 相关阅读:
    实验一
    BZOJ 2564
    P4557 [JSOI2018]战争
    移动自动化-Mac-IOS-appium环境搭建
    Node安装mac版本
    删除N天前文件和空文件
    Python之jsonpath模块
    性能学习
    参数化
    查找测试用例
  • 原文地址:https://www.cnblogs.com/royzshare/p/9323076.html
Copyright © 2011-2022 走看看