• 使用Docker部署ASP.NET Core应用程序实践


    前言

    最近把很火的Docker给看了,于是就磨拳擦掌要去实践一下。于是就拿之前一个aps.net core的项目(已被停止)去练手。该项目之前在ubuntu14.04上确保可以正常运行,所以docker化应该不会有太多问题。搜索了下微软提供了asp.net core的官方docker镜像,但我为了学习docker决定从linux的基础镜像开始制作docker镜像,同时为了少绕弯路,决定从确保能运行的ubuntu14.04开始.

    准备

    环境

    OS:Ubuntu 14.04
    .NET Core SDK:2.0
    DB:mysql

    编译发布程序

    sudo dotnet publish -o ..publish -c Release -r ubuntu.14.04-x64
    

    将程序编译成ubuntu平台的二进制文件.

    构建数据库用Docker容器

    既然应用程序Docker化了,那数据库肯定也要Docker化,这里数据库我用的Mysql,直接使用的官方镜像的mysql:5.7

    sudo docker run --name demo-mysql -v /home/yotsuki/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
    
    

    这里使用了将本地路径/home/yotsuki/datadir设为映射为数据库目录,并把数据库的3306端口给映射出来。

    修改应用程序配置文件

    因为docker容器的IP地址不固定,稍后的应用程序容器打算使用--link方式连接到数据库,于是需要把应用程序配置文件中的数据库连接从IP改为hostname,就先定义为demodb吧

         // "ConnectionString": "server=127.0.0.1;user id=root;persistsecurityinfo=True;database=pmis;password=123456;port=3306;",
         "ConnectionString": "server=demodb;user id=root;persistsecurityinfo=True;database=pmis;password=123456;port=3306;",
    

    编写Dockerfile 文件

    # Version:0.0.1
    FROM ubuntu:14.04
    MAINTAINER yotsuki
    RUN cp /etc/apt/sources.list /etc/apt/sources.list_backup
    COPY ./sources.list /etc/apt/sources.list
    RUN apt-get install libunwind8 liblttng-ust0 libcurl3 libssl1.0.0 libuuid1 libkrb5-dev zlib1g libicu52 -y
    RUN apt-get update
    RUN mkdir /usr/bin/pmis_web
    COPY ./publish /usr/bin/pmis_web
    WORKDIR /usr/bin/pmis_web
    ENTRYPOINT ./PMIS.WebAPIs
    EXPOSE 80
    

    我使用了从官方的ubuntu14.04镜像开始构建容器。
    sources.list是国内访问官方镜像过慢的无奈之举,我做了一个163镜像文件直接COPY进去了(我知道这样不好,但这不是重点)
    根据微软官方文档查到要想运行.net core程序需要安装以下几个包,于是就先使用apt-get安装必须包

    apt-get install libunwind8 liblttng-ust0 libcurl3 libssl1.0.0 libuuid1 libkrb5-dev zlib1g libicu52 -y
    apt-get update
    

    然后创建目录并copy程序文件进去

    RUN mkdir /usr/bin/pmis_web
    COPY ./publish /usr/bin/pmis_web
    WORKDIR /usr/bin/pmis_web
    

    最后设置启动命令,并暴露端口

    这样Dockerfile就编写完成了

    sudo docker build -t demo-web .
    

    运行镜像

     sudo docker run -d --name demowebapp --link demo-mysql:demodb -p 80:80 demo-web
    

    打开我们的浏览器输入127.0.0.1 就能看到程序在运行了
    至此我们的一个简单的docker化的asp.net core应用程序就部署完毕了。

    总结

    因为.net core的跨平台特性保证了.net 也能拥抱docker,这是一件大好事。
    在学习docker过程中,我感觉到容器化的.net程序和我们以前开发的还是要有一些不同的。比如配置文件中的数据库链接,这里虽然我该ip为demodb,并使用--link链接了,但这是我事先在编译docker镜像前固定好了名字。我觉得可能比较好的做法应该是通过docker run命令传进来或者通过-v命令指定本地配置文件。后者不用更改程序,前者还是需要用到环境变量的(我以前的程序基本不用环境变量)。
    希望以后能有.net core程序在docker中实践的机会吧

  • 相关阅读:
    获取用户登录次数(cookie)
    漂亮的 Checkbox and Radio (jQuery)
    FancyUpload3.0
    UI upload 多文件上传
    js 匿名函数 闭包
    c# 图片插入Excel
    sql查询优化 索引优化
    GridViewAddUpdateDelete_Ajax with jquery.blockUI
    动态自动搜索 Dynamic search (js版)
    master.dbo.spt_values
  • 原文地址:https://www.cnblogs.com/yotsuki/p/8290285.html
Copyright © 2020-2023  润新知