Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台
转发请注明此文章作者与路径,请尊重原著,违者必究。
系列文章:https://www.cnblogs.com/alunchen/p/10121379.html
本篇文章操作系统信息
Linux:ubuntu 16.04.3 amd64
查看NetCore支持的Linux系统
NetCore不是支持Linux的所有系统,只支持部分,所以在Linux上安装NetCore之前要查看系统与版本是否支持NetCore。
查看NetCore2.0以上各个版本在Linux支持的系统及版本:
https://github.com/dotnet/core/blob/master/release-notes/2.0/2.0-supported-os.md
https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1-supported-os.md
https://github.com/dotnet/core/blob/master/release-notes/2.2/2.2-supported-os.md
安装Docker
安装docker,参考:https://segmentfault.com/a/1190000014066388
开始使用Docker在Linux上运行NetCore
回想一下我们平常做开发。流程都是使用Windows操作系统,并且使用宇宙最好IDE-VS,来创建项目、发布、运行。
这篇文章,主要讲述怎么在linux上运用docker来运行net core程序 。也会使用我们一般会使用到的流行方法去运行net nore,一般的步骤如下:
在Windows上创建项目->修改dockerfile文件->复制项目到Linux系统->运行dockerfile并创建镜像->在docker容器中运行镜像。
创建项目并且生成Dockerfile
现在,使用VS2017创建一个控制台项目,并添加Docker的支持,需要注意的是,添加Docker支持时需要选择Linux环境。具体怎么添加支持,请查看下面的截图。
右键项目->添加->容器业务流程协调程序支持->选择【Docker Compose】->选择【Linux】
图一:

图二:

图三:

创建完成后,可以看到项目的架构多了文件Dockerfile,与docker-compose。

主要看Dockerfile,它是描述了整个项目从编译到运行所依赖的环境,怎么去运行此程序。至于docker-compose目录,可以删除。其作用是在告诉VS所要运行docker的入口点,并且可以定义多个不同容器中的依赖关系来运行。这里不讲述docker-compose。
修改Dockerfile文件
修改下面的Dockerfile文件,修改了路径,把项目文件夹去掉了。因为运行Dockerfile的时候,是在Dockerfile所在的文件夹内运行。具体每行代表什么,后面会说明。

修改完成了Dockfile文件后,下一步就是要把代码放到Linux镜像中了。
在Linux使用Docker运行程序的方式
现在想到有3种方式运行在Linux上。第一种可以通过复制当前的项目源代码到Linux中编译并且运行。第二种是上传本地代码,然后在Linux使用git clone运行。第三种是在另外一台Linux成功构建镜像后,上传到线上仓储,最后在目标Linux下载镜像并在仓库中运行。
第一种与第二种类似,都是需要获取代码,只是获取代码方式不同而已。第三种是通过线上发布再拉取的做法。
下面我们主要讨论第一种。第二、三种在另外一篇文章使用使用到。
在Docker中运行Dockfile生成镜像
首先需要把代码copy到linux中。这里通过WinSCP工具复制项目文件到Linux系统中,例如Windows下有下面文件:

复制到Linux下,通过putty工具查看文件夹,已经复制成功了。

开始构造镜像image:运行命令【sudo docker build -t consoleappdockerlinux2-cmd . 】
命令中,【consoleappdockerlinux2-cmd】代码镜像名称,可以修改成自己所需要的名称。也可以为镜像添加tag,修改【consoleappdockerlinux2-cmd】成【consoleappdockerlinux2-cmd:1.0】为镜像打上1.0的tag标签。命令最后面的【.】号是必要的,是dockerfile在当前目录运行docker的意思。详细命令可查看:http://www.runoob.com/docker/docker-build-command.html。
需要说明的是【sudo】命令是用管理员身份运行,所以要输入密码。然后运行docker。
因为按照配置docker的时候使用了镜像加速,所以下载.net core镜像很快。如果是国外镜像,会timeout超时,所以建议都配上。


配置镜像加速器
关于镜像加速,可以按照阿里云的教程,登录账号:https://cr.console.aliyun.com/cn-shenzhen/mirrors。每个账号的加速地址应该不一样。下面内容截取阿里云的教程:

运行镜像并添加到容器中
使用【sudo docker images】查看是否存在我们的镜像 consoleappdockerlinux2-cmd

可以看到已经安装镜像成功了,我们现在开始运行我们的镜像吧:【sudo docker run 镜像id】

可以看到我们真的成功了!
关于容器的说明
众所周知,Docker有三大概念:镜像、容器、仓库。镜像是容器与仓库的桥梁,它们都需要用到镜像。上面我们把镜像添加到容器中运行,当使用【docker container ls】时,不会看到任何的容器,因为我们的控制台程序运行结束了。
所以如果要看到所有的容器,无论是运行中还是停止的,可使用命令【sudo docker ps -a】。
详细介绍Dockerfile各行代表的意思

演示更新版本
安装完成程序之后,一般都需要更新版本。这里再简单地演示一次。
在代码中更新了程序,控制台输出改成 “Hello World! 这是我第一次运行在Docker Linux中。 Version 2”。
为了演示更直观,首先将镜像 consoleappdockerlinux2-cmd打上tag,1.0版本。【sudo docker tag consoleappdockerlinux2-cmd consoleappdockerlinux2-cmd:1.0】

将程序代码复制到原本的路径上,然后运行命令构建Docker镜像【sudo docker build -t consoleappdockerlinux2-cmd:2.0 .】。这里指明构建2.0的tag。
成功后,运行【sudo docker images】可以查看到2.0版本的镜像了。

使用【docker run 镜像id】添加到容器中运行镜像,下面看到运行成功了,并且Version 2也打印出来了。

在上面,有没有发现问题。部署新代码运行镜像时需要指定镜像id,即使用【docker run 镜像id】的命令。而且每当重新编译新版本程序,都会重新生成一个镜像id,那么就矛盾了,每次都需要找到新版本的镜像id才会把镜像添加到容器中运行?
有什么解决办法?不指定镜像id是否可以?
所以docker run提供了运行 镜像名称+标签的命令:【sudo docker run consoleappdockerlinux2-cmd:latest】

所以你每次运行上面的命令,都是最新版本的代码。
系列文章
Docker在Linux/Windows上运行NetCore文章系列
可以关注本人的公众号,多年经验的原创文章共享给大家。

Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台的更多相关文章
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
- Linux上安装jdk1.8和配置环境变量
前言 Linux 上安装jdk1.8 和配置环境变量,参考相关文档,本人在此总结,操作归纳如下. 第一步:创建jdk安装目录(该/usr/local/src 目录是空的,最好把我们自己下载的放到这,容 ...
- Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始说明 上几篇文章都是通过Linux运 ...
- Docker在Linux上运行NetCore系列(五)更新应用程序
转发请注明此文章作者与路径,请尊重原著,违者必究. 本篇文章与其它系列文章不同,为了方便测试,新建了一个ASP.Net Core视图应用. 备注:下面说的应用,只是在容器中运行的应用程序. 查看现在运 ...
- Docker在Linux上运行NetCore系列(四)使用私有Nuget与多个本地包引用运行ASPNetCore
转发请注明此文章作者与路径,请尊重原著,违者必究. 本篇文章演示了使用Dockerfile在Linux(ubuntu16.04)系统上构建ASPNetCore应用,并且在一个解决方案中存在多个项目之间 ...
- Docker在Linux上运行NetCore系列(二)把本地编译好的镜像发布到线上阿里云仓库
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始 本篇文章结束在本地创建完成镜像后, ...
- Docker在Windows上运行NetCore系列(一)使用命令控制台运行.NetCore控制台应用
系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章操作系统信息 Windows:Window 10 Visual Studio:201 ...
- 使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序
说在前面 在阅读本文之前,您必须对 Docker 的中涉及的基本概念以及常见命令有一定了解,本文侧重实战,不会对相关概念详述. 同时请确保您本地开发机器已完成如下安装: Docker 18.06 或更 ...
- Docker在Linux上 基本使用
简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任 ...
随机推荐
- Note on Preliminary Introduction to Distributed System
今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...
- AngularJS 关于ng-model和ng-bind还有{{}}
What's the difference between ng-model and ng-bind ng-bind has one-way data binding ($scope --> v ...
- mysql的一点小错误
当使用sql语句时,字段记得使用``反向单引号,而不是单引号
- VSCode插件开发全攻略(二)HelloWord
更多文章请戳VSCode插件开发全攻略系列目录导航. 写着前面 学习一门新的语言或者生态首先肯定是从HelloWord开始. 您可以直接克隆我放在GitHub上vscode-plugin-demo 的 ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...
- 每天学点SpringCloud(十一):Hystrix仪表盘
在SpringCloud学习系列博客第六篇文章中,我们已经学习了Hystrix的使用,但是那篇文章中有一点遗漏没有讲,那就是Hystrix Dashboard ,它可以实时的监控Hystrix的运行情 ...
- Debian/Ubuntu清理硬盘空间的8个技巧
1. 删除残余的配置文件 通常Debian/Ubuntu删除软件包可以用两条命令 sudo apt-get remove <package-name> sudo apt-get purge ...
- ubuntu系统给用户增加root权限
在安装软件包的时候,会提示没有sudo权限. eg : sudo apt-get install golang 解决方法 进入有root权限的用户 eg: su root 并根据提示输入密码 sudo ...
- 毕业不到一年,绩效打了个D!
周末了,和大家来聊聊程序员工作态度的问题. 说说栈长的事迹吧,这是好多年前的事了,那时候,栈长才毕业不到一年,那次绩效打了个D!事后,我很气愤啊,我那时还在博客上写文章怒骂了部门经理,现在想起来,真是 ...
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...