前言

最近把很火的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. Train-Alypay-Cloud:分布式微服务中间件sofa 开发培训(第二次)

    ylbtech-Train-Alypay-Cloud:分布式微服务中间件sofa 开发培训(第二次) 1.返回顶部 1. 这是本次培训的内容,望各位提前配好环境.工具.2.6-2.7 我们在环球金融8 ...

  2. Educational Codeforces Round 37-F.SUM and REPLACE题解

    一.题目 二.题目链接 http://codeforces.com/contest/920/problem/F 三.题意 给定$N$个范围在$[1, 1e6)$的数字和$M$个操作.操作有两种类型: ...

  3. JSP Servlet之间交换数据

    摘自:<轻量级Java EE企业应用实战>第三版 对于每次客户端请求而言,web服务器大致需要完成以下步骤: 1.启动单独线程 2.使用I/O流读取用户的请求参数 3.从请求数据中解析参数 ...

  4. unicat,multicast,broadcast区别

    单播.多播和广播单播”(Unicast).“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语.那么这些术语究竟是什么意思?区别何在? 1.单 ...

  5. C入门程序整体框架图

    0.1:概述, 从头开始介绍一门编程语言总是显得很困难,因为有许多的细节还没有介绍,很难让读者在大脑中形成一幅完整的图, 所以起步时以一个列程序向学折介绍大体的C,试图使大家对C有一个整体大概 影响. ...

  6. 好记性不如烂笔头-linux学习笔记5mysql主从复制

    mysql主从复制的原理 mysql master服务器,开启bin-log日志,开启IO线程 slave服务器,开启IO线程,开启SQL线程(执行SQL) 1)slave服务器,通过授权用户开启IO ...

  7. js中获取页面元素节点的几种方式

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. Frequently Used Shell Commands

    [Common Use Shell Commands] 1.ps aux:查看当前所有进程 ,以用户名为主键.可以查看到 USER.PID.COMMAND(binary所有位置) 2.netstat ...

  9. Java中的几种设计模式

    如果从事JAVA相关的开发,都不可避免的要用到抽象和封装,这是JAVA的一个特点,同时也是每个开发者必须掌握的,JAVA是这样,Android更是如此.而设计模式就是告诉我们应该如何写出高效且更具应用 ...

  10. java普通类如何调用Spring的Service层?

    首先在Service层上面添加 @Service("myService") 然后,在main方法中调用,String[]中为配置文件,如下所示: ApplicationContex ...