前言

最近把很火的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中实践的机会吧

使用Docker部署ASP.NET Core应用程序实践的更多相关文章

  1. CentOS 7部署ASP.NET Core应用程序

    看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...

  2. 【转载】CentOS 7部署ASP.NET Core应用程序

    看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...

  3. 【转】CentOS 7部署ASP.NET Core应用程序

    很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...

  4. 【详细】【转】CentOS 7部署ASP.NET Core应用程序

    很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...

  5. 部署ASP.NET Core应用程序在CentOS 7

    CentOS 7部署ASP.NET Core应用程序 看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡 ...

  6. CentOS 7 部署 ASP.NET Core 应用程序

    原文:CentOS 7 部署 ASP.NET Core 应用程序 看了几篇大牛写的关于 Linux 部署 ASP.NET Core 程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大 ...

  7. 使用docker来部署asp.net core的程序

    使用docker来部署asp.net core程序 暂不介绍docker是个什么东西?不知道的自己百度. 第一步安装docker: 我的docker是装在centos7系统上,windows上我的也用 ...

  8. 使用docker部署Asp.net core web应用程序

    拉取aspnetcore最新docker镜像 aspnetcore的docker镜像在docker官网是有的,是由微软提供的.它的依赖镜像是microsoft/dotnet.通过访问网址:https: ...

  9. docker部署Asp.net core应用

    1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾 ...

随机推荐

  1. 一个单元测试 学习 aysnc await

    using System; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; name ...

  2. 2018 Multi-University Training Contest 2-1007(hdu 6315)-题解

    一.题意 给定一个元素个数为$N(1 \le N \le 10^5)$初始序列$a$和$b$,$a$序列的初始值全为$0$,$b$序列的初始值为$1$到$N$的一个排列.有$T(1 \le T \le ...

  3. php 文件缓存类

    //文件缓存类 class FileCache { private $cacheTime = 3600; //默认缓存时间 秒 private $cacheDir = './filecache'; / ...

  4. webkit内核的浏览器为什么removeAttribute('style')会失效?

    做了一些研究,应该算是理清了问题. 首先,我们在这里常说的「属性」(attributes)其实分为两种:内容属性(content attributes)以及 IDL 属性(IDL attributes ...

  5. uedit富文本编辑器及图片上传控件

    微力后台 uedit富文本编辑器及文件上传控件的使用,无时间整理,暂略,参考本地代码.能跑起来.

  6. 常见反编译产生错误 k__BackingField 解决办法

    常见反编译产生错误 k__BackingField 解决办法     无聊反编译小蚂蚁出现上千的错同样的错       private bool <EnableRuntimeHandler> ...

  7. 下拉列表插件bootstrap-select使用实例

    网页实例 http://www.jq22.com/yanshi302 使用bootstrap-select插件来实现下来菜单搜索匹配功能,如图 实现代码如下 <html> <head ...

  8. Python time、datetime

    简介: 记录一下 Python 如何获取昨天.今天.明天时间及格式化. 1.今天 In [1]: import time In [2]: print time.strftime('%Y.%m.%d', ...

  9. 迷你MVVM框架 avalonjs 1.2.4发布

    这段时间一直忙于建立avalon的单元测试,与重构官网.对avalon的更新都是来自公司内部的需求,性能优化与一些BUG修复. 添加大量调试日志. 重构shimController,以提高性能. cr ...

  10. spring学习---day01

    1,Spring Boot项目在启动的时,修改默认图标: 在src/main/resources目录下新建banner.txt文件,然后将自己的图案黏贴进去即可.ASCII图案可通过网站http:// ...