Docker入门 第一课 --.Net Core 使用Docker全程记录

微服务架构无疑是当前最火热的开发架构,而Docker作为微服务架构的首选工具,是我们必须要了解掌握的。

我通过一天的时间,网上查文档,了解基础概念,安装Docker,试验Docker命令,通过Docker,成功部署运行Asp.NET core示例程序,算是基本入门。

这篇文章是自己总结的Docker入门篇,力求简洁,快速入门,以最短的时间看到学习成果,为深入学习Docker做基础。

学习前提:不要畏惧

面对未知,人们心里往往会产生恐惧,这是人与生俱来的,所以,我们在进入新的领域之前,首先要克服的是自己的畏难心理。不要因为困难,看几眼就放弃,那样你永远学不会。

面对新的未知领域,我们要把它当成一座灯塔,让它指引我们前进的方向。

第一:了解几个概念

镜像(Image):相信大家看到这个词,都明白什么意思,我们可以把它理解为操作系统的安装盘,Ghost镜像。我给它个定义,就叫:Docker基础运行环境副本。

容器(Container):运行中的Docker实例,称为容器。也就是一个镜像(Image)的运行时状态。

镜像仓库(Repository):Docker为开发者提供了面向各种环境的已经打包好的镜像,这些镜像构成了一个镜像仓库。开发者只需找到自己需要的Docker镜像,下载到本地,添加自己的应用上去,运行即可,某些工具类的镜像,可无需修改,直接运行。

Docker 主机(Host):运行着Docker容器的计算机或虚拟机,用于执行Docker的守护进程。

Docker客户端(Client):是与Docker主机守护进程进行通信的工具,如:Docker控制台。

第二:安装Docker

不同操作系统按照方式不同,以Win7系统为例,需要利用 docker toolbox 来安装,可以使用阿里云的镜像来下载。

下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

安装完成之后,在桌面找到三个启动图标:Oracle VM VirtualBox,Kitematic(Alpha),Docker Quickstart …。

安装完成之后,建议重启一下计算机。

Docker入门 第一课 --.Net Core 使用Docker全程记录

Oracle VM VirtualBox :是一个虚拟机程序。Docker是运行在Linux环境下的,要想在Windows下运行,必须借助虚拟机。感兴趣的话可以留着以后研究。

kitematic(alpha):是docker推出的GUI工具,可以更简便地操作Docker,非常适合windows用户使用习惯,推荐大家试试。这个alpha表示预览版吧,可能功能还不完善。

Docker Quickstart Terminal:是Docker控制台启动程序,双击图标启动Docker。

如果一切正常的话,可以看到以下界面。

Docker入门 第一课 --.Net Core 使用Docker全程记录

如果启动过程中出现下面错误,Looks like something went wrong in step 'Looking for vboxmanage.exe'…

意思是没有找到虚拟机启动程序,需要设置VirtualBox的环境变量,系统环境变量中增加VBOX_MSI_INSTALL_PATHVBOX_INSTALL_PATH 值都为C:\Program Files\Oracle\VirtualBox\ ,即VirtualBox的安装路径,注意后面的\ 不能少。环境变量设置完成之后,可尝试重新启动。

Docker入门 第一课 --.Net Core 使用Docker全程记录

第三:熟悉几个命令

我建议实际工作中使用图形界面 kitematic,真的既简单又实用,但Docker命令还是要学习的,最重要的是,使用命令行操作显得更酷更专业。

docker 命令都是以docker开头,下面介绍几个简单,常用的命令。仅作基础介绍,具体参数用法可后期详细学习 。

docker pull:从镜像仓库中拉取镜像 。

docker run:通过镜像创建一个新的容器,并运行。需要注意的是,如果本地没有指定的镜像,会直接去镜像库下载,一定要保证拼写正确。

docker stop:停止一个容器 。

docker start:启动一个容器 。

docker restart:重启一个容器 。

docker ps:列出当前运行的容器机器状态 。

docker images 或 docker image ls:列出本地镜像。

docker build:使用Dockerfile创建自己的镜像。

第四:操作演示,从hello world开始

你可以登录Docker官方镜像仓库,选择自己感兴趣的镜像进行试验,这里我们选择最简单的 hello-world。

Docker官方镜像仓库地址:https://hub.docker.com

Docker入门 第一课 --.Net Core 使用Docker全程记录

拉取(下载)镜像,在docker控制台界面,输入命令:docker pull hello-world

镜像很小,下载很快完成,然后查看一下本地镜像,输入命令:docker images

不出问题的话,应该可以看到hello-world的镜像文件,运行镜像,输入命令:docker run hello-world

然后可以看到,控制台返回信息提示,Docker已经正常运行。

第五:创建自己的Docker镜像

创建镜像需要使用Dockerfile文件,下面以asp.net core 为例,创建一个自己的镜像,示例中已经创建好了Dockerfile文件,直接使用即可,具体内容留着以后研究。

操作参考:为 .NET Core 应用程序生成 Docker 映像:https://docs.microsoft.com/zh-cn/dotnet/core/docker/building-net-docker-images

首先:确保已经安装了Dotnet Core 2.0

然后:下载asp.net core 示例代码 :git clone https://github.com/dotnet/dotnet-docker-samples/

进入项目代码目录,运行示例,测试一下

cd aspnetapp

dotnet run

应用程序启动后,在 Web 浏览器中访问 http://localhost:5000。好了,一切正常,没问题。

创建镜像,输入Docker命令:

docker build -t aspnetapp .

生成镜像的过程需要下载依赖镜像包,大概需要十多分钟,执行过程中不要关闭控制台。

镜像生成完成之后,运行一下试试:

docker run -it -p 5002:80 --name aspnetcore aspnetapp

启动完成,打开浏览器:http://192.168.99.100:5002/

说明:-p 5002:80 表示将Docker主机的5002端口和Docker容器的80端口进行关联映射,即,外部访问使用5002端口,容器内部使用80端口,即 HTTP服务端口。

注意:这里是IP地址,至于这个IP是怎么来的,说实话,我也不知道,我尝试了几次,始终不能访问,然后打开kitematic,才发现只有这个IP才能访问。[哭脸]

Docker入门 第一课 --.Net Core 使用Docker全程记录

 后记:

当看到程序正常启动运行时,是不是满满的成就感,学习就这么简单,最重要的是下定决心迈出行动的第一步。

本篇文章力求简洁,力图尽快看到学习成果,算是给大家深入学习提供的一块敲门砖,垫脚石。

另外文中的概念都是我自己理解的,可能跟标准答案不符,仅供理解和参考。

推荐几个深入学习的网址:

Docker官方镜像仓库:https://hub.docker.com

Docker菜鸟教程:http://www.runoob.com/docker/docker-tutorial.html

Docker入门教程:http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

为 .NET Core 应用程序生成 Docker 映像:https://docs.microsoft.com/zh-cn/dotnet/core/docker/building-net-docker-images

随机推荐

  1. C#创建安全的栈(Stack)存储结构

    在C#中,用于存储的结构较多,如:DataTable,DataSet,List,Dictionary,Stack等结构,各种结构采用的存储的方式存在差异,效率也必然各有优缺点.现在介绍一种后进先出的数 ...

  2. 数据摘要算法的测试效率(SHA、MD5和CRC32)

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  3. JavaScript:JavaScript语法的详细介绍

    JavaScript语法:只要Java会了,基本上javascript语法就会了. ——变量的定义 ——程序的结构控制 ——数组操作 ——函数的定义即使用 基本的test.html代码如下,它会导入下 ...

  4. 2015 AlBaath Collegiate Programming Contest B

    Description Yaaaay, Haven't you heard the news? Bakaloria results are out! And Reem had very good gr ...

  5. PHP开发-上传文件

    <?php /****************************************************************************** 参数说明: $max_ ...

  6. mysql 用户管理 权限控制

    添加用户 insert into mysql.user(Host,User,Password) values("%","shenen",password(&qu ...

  7. SQL Server 表的管理&lowbar;关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  8. Daily Scrum NO&period;1

    工作概况 符美潇(PM): 今日工作 1.根据开发进程分配第一步开发工作,对相应的成员提出今日的开发要求:要求成员自己所负责的线程池,动态爬取,去重,文件分类等部分进行资料的相关了解. 2.Daily ...

  9. cmake-include&lowbar;directories

    include_directories: Add include directories to the build. include_directories([AFTER|BEFORE] [SYSTE ...

  10. 2019年北航OO第1单元&lpar;表达式求导&rpar;总结

    2019年北航OO第1单元(表达式求导)总结 1 基于度量的程序结构分析 量化指标及分析 以下是三次作业的量化指标统计: 关于图中指标在这里简要介绍一下: ev(G):基本复杂度,用来衡量程序非结构化 ...

上一篇:前端开发必学技能之一———非关系数据库又像关系数据库的MongoDB快速入门第一步下载与安装


下一篇:<转>HTML+CSS总结/深入理解CSS盒子模型