Docker打包 Asp.Net Core应用,在CentOS上运行(转)
转载连接:https://www.cnblogs.com/ibeisha/archive/2017/09/09/netcoreondocker.html
本文主要介绍下运用docker虚拟技术打包Asp.net core应用。 Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们可以轻松实现应用的持续集成部署,一次打包,到处运行。
开篇借用百科上对docker的介绍。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
方便大家学习:
http://www.docker.org.cn/(中文站)
https://www.docker.com/(英文站)
docker镜像站:https://hub.docker.com/
【搭建环境】
系统:CentOS 7.0 容器:Docker 1.12.6 .Net Core版本: .NET Core 1.1
工具:putty、winScp
一、首先,我们先介绍下关于docker容器的安装。
直接用黄狗安装工具安装docker。
1
2
3
4
5
6
|
#安装Docker $ yum install docker $ #启动docker服务 $ systemctl start docker.service $ #配置开机启动 $ systemctl enable docker.service |
安装并成功启动docker服务后,可以通过以下命令查看docker版本信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
docker version Client: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64 Go version: go1.7.4 Git commit: 88a4867 /1 .12.6 Built: Mon Jul 3 16:02:02 2017 OS /Arch : linux /amd64 Server: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64 Go version: go1.7.4 Git commit: 88a4867 /1 .12.6 Built: Mon Jul 3 16:02:02 2017 OS /Arch : linux /amd64 |
docker客户端、服务端版本信息都展示出来了。
二、安装Docker加速器。
我目前使用的阿里开发者提供的docker加速服务。
有阿里云账号直接登录,https://dev.aliyun.com/search.html
如何使用Docker加速器
针对Docker客户端版本大于1.10的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json
来使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ihllojuv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

为什么要安装Docker加速器?
摘自网友的话:众所周知的原因,要想流畅地使用Docker,需要配置Docker加速器,否则你会觉得回到了拨号上网的时代 。
三、发布Asp.Net Core程序。
我这里是新建了也给Asp.Net Core web程序。
红色圈住部分,是后来手动添加进去的,dockerfile是你的应用部署到docker上所必须的配置信息,只是个不带扩展名的纯文本文件而已。hosting.json需要是配置服务启动时,监听信息。使用配置文件,需要手动修改Program.cs中的入口程序。

/// <summary>
///
/// </summary>
/// <param name="args"></param>
public static void Main(string[] args)
{
//实例化一个配置生成器
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)//添加配置文件hosting.json
.Build(); var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)//使用配置信息
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build(); host.Run();
}

完成以上操作后,我们发布这个demo程序,解决方案,右键发布。
发布成功后,默认在bin/release/publishOutPut文件夹下。
然后,我把publishOutPut重命名为publish后,通过WinScp工具把文件传到root/docker/下。
另外,我们在网站根目录下,创建的Dockerfile文件,排上用场了,我们编辑修改文件。
1
2
3
4
5
|
FROM microsoft /aspnetcore :1.1 COPY . /publish WORKDIR /publish EXPOSE 80 CMD [ "dotnet" , "demo.dll" ] |
指定容器对外暴露端口80。注意,COPY .后面有空格,表示是当前位置,意思是从当前位置复制文件到/publish目录下。网上有篇博客,少了个.,导致copy requires at least one argument这样的错误。
四、打包镜像
首先,我们进入/docker/publish目录
执行以下命令:
1
|
docker build -t demo-netcore . |
意思是生成一个名为demo-netcore的镜像。(注意:最后空格后面有一个.)。
这个命令会,根据当前目录下dockerfile配置文件,进行打包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@localhost publish] # docker build -t demo-netcore . Sending build context to Docker daemon 17.84 MB Step 1 : FROM microsoft /aspnetcore :1.1 ---> 983c2fe9cbef Step 2 : COPY . /publish ---> ae9533f162da Removing intermediate container d8bdd1cb7061 Step 3 : WORKDIR /publish ---> Running in 06a5fbef40ea ---> c63de53ebe20 Removing intermediate container 06a5fbef40ea Step 4 : EXPOSE 80 ---> Running in 8d0eaa657905 ---> 228e30d1bf74 Removing intermediate container 8d0eaa657905 Step 5 : EXPOSE 8080 ---> Running in a38fd6c59d4a ---> ab126ceac6ae Removing intermediate container a38fd6c59d4a Step 6 : CMD dotnet demo.dll ---> Running in 7dc71cdf0f87 ---> 96ef55dd9fc9 Removing intermediate container 7dc71cdf0f87 Successfully built 96ef55dd9fc9 |
打包成功。
接下来,看看我们打包好的镜像。
1
2
3
4
5
|
[root@localhost publish] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE demo-netcore latest 96ef55dd9fc9 About a minute ago 322.8 MB docker.io /microsoft/aspnetcore 1.1 983c2fe9cbef 23 hours ago 305.1 MB [root@localhost publish] # |
因为,刚打包的镜像demo-netcore是基于docker.io/microsoft/aspnetcore镜像的,所以在打包demo-netcore的过程中,会优先从镜像库中拉取docker.io/microsoft/aspnetcore镜像。至此,我们的第一个docker镜像就打包成功了。接下来,在容器中运行镜像。
五、运行docker容器
1
|
docker run --name demo -p 8080:80 demo-netcore:late |
其中,demo是制定容器的名称,-p是进行宿主和容器之间端口的映射,(-p 宿主端口:容器端口),
执行完以上命令后,正常情况下,会出现如下内容:
1
2
3
4
|
Hosting environment: Production Content root path: /publish Now listening on: http: // +:80 Application started. Press Ctrl+C to shut down. |
这表明,你的asp.net core程序已经成功在docker容器中运行,监听端口为80。这个80指的是容器的端口,以上信息都是在容器中执行的结果输出。它会提示,按Ctrl+C终止当前应用程序。如果在执行docker run的时候,加上 -d命令,这样容器就会一直运行,即使关掉终端窗口。于是,我们想让docker程序一直运行,以上命令可以修改为:
1
|
docker run --name demo -d -p 808 |
检验docker容器是否运行成功,执行如下命令:
1
2
3
|
[root@localhost ~] # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1abf4952db5b demo-netcore:latest "dotnet demo.dll" About a minute ago |
以上信息可以看到,容器ID,容器名称,命令,镜像名称,
由于,我再dockerfier文件中,配置宿主的端口为8080,那么我们访问容器中的asp.net core程序时,需要通过8080端口访问,完成以上步骤,接下来让我们看下结果吧!浏览器打开http://localhost:8080或者执行
1
|
wget http: //localhost :8080 |
第一个asp.net core docker应用运行起来了!
以下,是在本次操作中,常用的几个docker命令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#生成镜像 docker build -t demo-netcore . #运行容器 docker run --name demo -p 8080:80 demo-netcore:latest #删除所有容器进程 docker rm $(docker ps -a -q) #删除一个镜像 docker rmi 镜像ID #查看所有镜像 docker images |
关于怎样把本地镜像推送到hub.docker.com,请访问我的另一篇博客《推送docker 镜像到hub.docker.com》
MySQL 官方 Docker 镜像的使用
转载地址:https://www.cnblogs.com/cfrost/p/6241892.html
首先是pull image,这里我拉取的是5.6.35:
1
|
$ sudo docker pull mysql:5.6.35 |
拉下来以后大可以按照官方的说明无脑启动,但是外部无法访问,所以绑定端口:
1
|
$ sudo docker run --name mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6.35 |
试着用客户端连接,成功了,查询mysql.user表发现允许从任何地方用root访问,这特么也太不安全了!
果断连接到bash:
1
|
$ sudo docker exec -it mysql bash |
运行mysql,竟然有!
下面就是基本的操作,收回root权限,建库,开用户……
等等,数据库文件在哪??还有,字符集不是UTF-8??阅读官方文档,得知/etc/mysql/conf.d下可以自定义配置文件,于是乎自己建了一个my.cnf,重新运行:
1
|
$ sudo docker run --name mysql -p 12345:3306 - v $DOCKER_RUNTIME /mysql/data : /var/lib/mysql - v $DOCKER_RUNTIME /mysql/conf : /etc/mysql/conf .d -d mysql:5.6.35 |
这里顺便改了数据库文件的目录,$DOCKER_RUNTIME是我自己定义的环境变量,各位可以自行指定。
Docker打包 Asp.Net Core应用,在CentOS上运行(转)的更多相关文章
- Docker打包 Asp.Net Core应用,在CentOS上运行
本文主要介绍下运用docker虚拟技术打包Asp.net core应用. Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们可以轻松实现应用的持续集成部署,一次打包,到 ...
- 【ASP.NET Core】在CentOS上安装.NET Core运行时、部署到CentOS
第一步:Add the dotnet product feed sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc ...
- docker部署Asp.Net Core、Nginx、MySQL
2019/10/24,docker19.03.4, .netcore 3.0,CentOS7.6 摘要:asp.net core 3.0 网站项目容器化部署,使用docker-compose编排Ngi ...
- Visual Studio Code和Docker开发asp.net core和mysql应用
Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...
- VS code docker 调试 asp.net core
前言 .net core的诞生就是为了解决跨平台的事情的,所以.net core app运行在linux.macOS.docker上也不是什么新鲜事了. 相信已经有不少.net core的项目已经部署 ...
- Docker和ASP.NET Core
Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准,受到 Windows 和 Linux 生态系统领域最重要供应商的支持. (Microsoft 是支持 Docker ...
- Docker的asp.net core应用部署系列——docker pull 加速
原文:Docker的asp.net core应用部署系列--docker pull 加速 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/a ...
- Net Core应用,在CentOS上运行
Net Core应用,在CentOS上运行 本文主要介绍下运用docker虚拟技术打包Asp.net core应用. Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们 ...
- ASP.NET Core MVC 在linux上的创建及发布
前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...
随机推荐
- 【数学建模】数模day13-灰色系统理论I-灰色关联与GM(1,1)预测
接下来学习灰色系统理论. 0. 什么是灰色系统? 部分信息已知而部分信息未知的系统,我们称之为灰色系统.相应的,知道全部信息的叫白色系统,完全未知的叫黑色系统. 为什么采用灰色系统理论? 在给定信息不 ...
- openstack oslo.messaging库
openstack oslo.messaging库 2017年04月13日 22:13:25 li_101357 阅读数:1383 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...
- Flask websocket
websocket 概念 是一套协议,协议规定了: - 连接时需要握手 - 发送数据进行加密 - 连接之后不断开 意义 实现长轮询等操作 框架支持 - flask,gevent-websocket - ...
- sqlite 数据库 boolean类型的小小测试
根据官方文档的介绍: SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored ...
- BM算法学习笔记
一种nb算法,可以求出数列的递推式. 具体过程是这样的. 我们先假设它有一个递推式,然后按位去算他的值. ;j<now.size();++j)(delta[i]+=1ll*now[j]*f[i- ...
- 让WinSCP和Putty一直保持连接
转: 让WinSCP和Putty一直保持连接 2015年08月14日 01:08:19 zcczbq 阅读数:13173 标签: puttywinscp 更多 个人分类: Operation 版权 ...
- saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)
一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来 ...
- [Luogu P1144]最短路计数
emmmm这个题看起来非常复杂,实际上仔细一分析发现到一个点最短路的个数就是所有前驱最短路个数之和.如果在图上表示也就是以1为根的bfs搜索树,一个点的最短路个数等于每一个能够向它扩展的所有点的最短路 ...
- sort注意事项
虽然是小事但是还是得注意一下:sort 区间左开右闭 从0开始 e.g: 10 9 8 7 6 5 4 3 2 1 sort(a+6,a+11) 区间 6 - 10 sort(a+6,a+10) ...
- FM(工程实现)
摘自: https://www.cnblogs.com/AndyJee/p/8032553.html 一.FM模型函数 二.FM对参数求导结果 三.算法实现 主要超参数有:初始化参数.学习率.正则化稀 ...