使用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中实践的机会吧
使用Docker部署ASP.NET Core应用程序实践的更多相关文章
- CentOS 7部署ASP.NET Core应用程序
看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...
- 【转载】CentOS 7部署ASP.NET Core应用程序
看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...
- 【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...
- 【详细】【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...
- 部署ASP.NET Core应用程序在CentOS 7
CentOS 7部署ASP.NET Core应用程序 看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡 ...
- CentOS 7 部署 ASP.NET Core 应用程序
原文:CentOS 7 部署 ASP.NET Core 应用程序 看了几篇大牛写的关于 Linux 部署 ASP.NET Core 程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大 ...
- 使用docker来部署asp.net core的程序
使用docker来部署asp.net core程序 暂不介绍docker是个什么东西?不知道的自己百度. 第一步安装docker: 我的docker是装在centos7系统上,windows上我的也用 ...
- 使用docker部署Asp.net core web应用程序
拉取aspnetcore最新docker镜像 aspnetcore的docker镜像在docker官网是有的,是由微软提供的.它的依赖镜像是microsoft/dotnet.通过访问网址:https: ...
- docker部署Asp.net core应用
1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾 ...
随机推荐
- 使用sublime text3手动安装插件
众所周知,由于网络问题,使用install package可能会连不上服务器,这时候就不得不手动安装插件了. 其实sublime安装插件的原理就是当你搜索一个插件并安装的时候,它回去github找到这 ...
- 用Linq对String类型的数字求和
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 教你判断一个APP页面是原生的还是H5页面 。(还没看)
来源:https://www.25xt.com/appdesign/11851.html 刚好是周末,无意之间学堂君在收集相关资料的时候,发现有部分童鞋在问<如何判断一个APP页面是不是H5页面 ...
- Train-Alypay-Cloud
ylbtech-Train-Alypay-Cloud: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返回顶部 8.返回顶部 ...
- [转]Aspose.Words.dll 将 Word 转换成 html
用于网站上,上传 Word 文档后显示文档内容(可看作在线阅读).代码适用于 .net 2.0 或以上版本 (使用的未注册 Aspose.Words.dll 并尝试消除试用标志) 下载地址 strin ...
- Java之解压流(ZipInputStream)
一.ZipInputStream相对于ZipOutputStream而言,使用上面简单的多了,相对的,既然存在压缩流,就会存在,解压的方式. 二.解压文件,流的使用过程中也是很常用的,在读取文件,根据 ...
- Windows 上用IntelliJ Idea调试百度大数据分析框架Apache Doris FE
A. 环境准备 1. 安装jdk1.8+, Intelij IDEA 2. linux上编译好fe前端代码,主要目的是获取自动生成的代码,加入到前段工程里面去用于在idea中编译fe工程.具体编译请参 ...
- 文件os.path相关方法
#!/usr/bin/python3# -*- coding: utf-8 -*-# @Time : 2018/6/13 15:03# @File : abspath_1.py impor ...
- 新的方法(Set<T>)实现mvc的crud
model层的属性为: public partial class UserInfo { public int Uid { get; set; } public string UName { get; ...
- 用VB6.0实现串口通信
Then ' 1位或2位 'byte 类型取值范围为 0-255 ,不能为-1 = ) & ) End IfstrHe ...