Docker基础入门及示例

  Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环境部署当中。这篇文章我将针对以下几个方面简单介绍:

1. docker的基础介绍

2. docker在windows下的安装配置

3. 基础命令介绍

4. 使用vs2017在docker下调试

5. 打包一个.net core站点镜像

一. docker基础介绍

  可能很多朋友对docker还停留在听说过,并没有认真关注了解过,这里简单介绍下其基础部分知识。如有不足,欢迎指正!

  1. docker介绍

  很多同学有一个先入为主的概念,docker是一个轻量级容器。所以这里先普及一下,docker本身并不是一个容器,而是一个管理容器的引擎工具。它包含一个服务端和客户端,服务端是一个管理着所有容器和文件系统的服务进程,客户端则是一个服务端的控制器,用来控制docker的服务端进程。至于容器,主要指的是包含了一些特定应用的运行实例,既保证了当前应用的运行环境独立,又能保证容器相互之间的独立。

  一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发者,我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。

  Docker提供了一套虚拟化和文件系统的支持,可以让专业人员自由组装需要的运行环境到容器中,并提供容器运行时的隔离。就像一个大型油轮,承载着一个个集装箱,每个集装箱我们可以理解为我们的容器,这个容器中的内容完全由组装人员自定义。

  2. docker基础概念

  docker本身是一个容器运行载体,一个容器的运行,需要正确的理解仓储,镜像,和容器这几个概念。 如上介绍,容器一个运行实例,那么当前实例是如何部署的,就明白的镜像的意义了。镜像就是一个已经打包好的可交付的运行环境,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。

  3. docker基础使用

  以web应为为例,我们开发完成之后,将应用打包成镜像,发布到自己的仓储服务器或者直接上传到服务器中,服务器拉取或者加载镜像,设置对应的端口映射并启动容器。如果我们存在多个web容器,也可以通过negix在前方负载代理。在后边我会通过一个.net core站点做一个简单的示例。当然也有很多持续集成方案,比如代码提交之后自动生成镜像,部署,这里就先不做介绍了。

 

二. docker在windows下的安装和配置

  这里我介绍下在windows中安装Docker以及相关的配置信息。当前Docker for Windows会默认包含两个引擎containers(linux和windows)

  1. 下载Docker for Windows,https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows

  2.  查看下是否开启了Hyper-V功能,如果没有可以在“启用或关闭windows功能” 中添加Hyper-V 功能,当然你也可以不用关心,docker安装过程中也会检查,如果没有则默认添加启动,不过可以趁着等待下载docker的时间直接把这步做了,安装Hyper-V之后可能需要重启系统。

  3.  安装完成之后,你可以查看Hyper-V管理器,如果安装正常,会如下默认创建一个linux虚拟机:

 

我们也可以通过PowerShell查看Docker版本:

 

  安装成功之后我们就可以对其进行相应的设置

  1. 右击小鲸鱼图标(这里我直接找的网上的图),点击Settings

 

  2. 设置界面如下,其中Shared Drives 可以设置我们的对应映射驱动盘,保证C盘选中,再选中你应用所在盘符。Advanced选项中你可以设置docker对应的CPU,内存占用资源。Netword主要是当前的Docker IP信息。Proxies可以设置对应的代理信息。Daemon 主要是设置对应的仓储和对应的仓储镜像站点(和docker镜像区分开,这个是仓储对应的镜像,因为访问国外站点过慢,可以设置国内的镜像代理站点)。

 

 这里特别强调一下,因为访问Docker官网仓储站点拉取镜像过慢,请自行购买VPN服务,或者查找仓储代理站点,国内的网易,DaoCloud都有对应的免费加速器,这里是我的设置:

  

  3. 上边说了,Docker for Windows 提供了两个引擎,我们可以通过右键菜单中的 Switch to Windows Containers 功能进行切换。

  4.  同时Docker for Windows 提供了容器的界面管理工具,可以通过右键菜单中的 Kitematic 功能进入,第一次可能提示你需要下载安装,其界面如下:

 

三. Docker的基础命令

  安装设置完成之后我们可以通过以下命令来进行操作docker了,我这里主要是在PowerShell中进行,也可以通过命令行cmd进行

  1. docker pull: 从仓库中拖镜像

  2. docker run:运行容器,如果当前要运行的容器对应镜像不存在,会自动拉取。例如:docker run hello-world

  3.docker stop:停止容器运行
  4.docker start:开始容器运行
  5.docker commit:提交容器到镜像
  6.docker images: 查看当前有的镜像

  7.docker ps:查看当前启动的容器

  8. docker build : 创建镜像

  9. docker load : 加载镜像

上边这几个是docker的主要命令,先行解释一下,后边我们会用到。

 

四.使用vs2017在docker下调试

这里我以一个.net core 站点示例,启用2017中的docker调试功能,如果是已经存在的项目,右键=》添加=》增加Docker支持即可

1.  新建websample站点

2. dockerfile 文件介绍

  当项目创建完成,在项目文件中你可以看到一个dockerfile文件,内容如下:

这个文件就是docker打包时需要的一个docker命令文件,vs中内部整合docker-compose和docker命令,完成了镜像生成和容器的创建

你会发现调试模块已经是docker了,如果想回到正常以前的项目,删除解决方案下自动生成的 docker-compose 项目即可。

我们启动调试,这个时候如果我们打开 Kitematic 会发现我们的websample容器已经创建了,并且自动添加了dev的标签,如下图:

 

 

五. 打包一个.net core站点镜像

  这里我使用刚才创建的.net core站点,演示一下我们完成站点开发之后,不使用vs的情况,如何通过命令完成一个镜像的打包。

  1. 发布刚才的站点到指定文件夹下

  2. 进入发布后的文件夹,修改docker文件

  查看docker文件是否存在,如果不存在直接把项目中的复制过来,并修改内容如下

FROM microsoft/aspnetcore:1.0

WORKDIR /app
COPY . /app
EXPOSE 80

ENTRYPOINT ["dotnet", "websample.dll"]

      a.  使用microsoft/aspnetcore 作为基础镜像

  b. 制定容器的工作目录

  c. 复制当前项目文件到容器的app目录下

  d. 设置容器对外暴露80端口

  e. 启动命令,执行websample.dll 

 

  3. 构建镜像 

    进入文件目录,执行命令 docker build -t websample:latest .   (后边的点是需要的

 

   4. 运行当前镜像

  镜像创建完成之后,我们就可以通过镜像创建对应的运行容器了, 执行如下命令: docker run -it -p 8000:80 websample:latest

 

可以看到我们的容器已经运行起来了,我们访问 127.0.0.1:8000

 

 

 

至此,我们已经尝试了docker的基础功能,希望本文能够对你有所帮助。

同时,我最近正在开发OSS系列开源项目,现在已有OSS.Common,OSS.Http, OSS.Social 和 OSS.PayCenter 几个项目,如果你也有兴趣,请联系我或者关注公众号OSSCoder

原文地址:http://www.cnblogs.com/osscoder/p/6553733.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php匿名类的应用场景,【modernPHP专题(9)】匿名类

类结构Closure {/* 方法 */// 用于禁止实例化的构造函数__construct ( void )// 复制一个闭包,绑定指定的$this对象和类作用域。public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope static ] )// 复制当前闭包对象,绑…

MySQL curdate()函数

转载自 MySQL curdate()函数 MySQL CURDATE功能介绍 如果在数字上下文中使用字符串上下文或YYYMMDD格式,CURDATE()函数将以“YYYY-MM-DD”格式的值返回当前日期。 以下示例显示了如何在字符串上下文中使用CURDATE()函数。 sql> SELECT CURDATE(); --------…

2016蓝桥杯省赛---java---B---3(平方怪圈)

题目描述 思路分析 代码实现 package com.kuang.study.lanqiao;public class Main {public static void main(String[] args) {int start0;int cnt0;//循环的次数for (int i 2; i < 100; i) {starti;while (cnt<1000){System.out.println(start);String astart"&q…

PS仿制图章工具、油桶工具、渐变

一、仿制图章工具&#xff1a; 1.找到仿制图章工具&#xff0c;或者按快捷键s&#xff0c;选择需要仿制的内容&#xff0c;按住alt,然后找到需要放置的地方&#xff0c;鼠标拖动即可完成仿制。 一、油桶工具&#xff1a; 1.激活&#xff1a;快捷键&#xff1a;G 2.选择需要…

MySQL datediff()函数

转载自 MySQL datediff()函数 MySQL DATEDIFF函数介绍 MySQL DATEDIFF函数计算两个DATE&#xff0c;DATETIME或TIMESTAMP值之间的天数。 MySQL DATEDIFF函数的语法如下&#xff1a; DATEDIFF(date_expression_1,date_expression_2);DATEDIFF函数接受两个任何有效日期或日…

使用 Visual Studio 对源代码文件进行哈希处理以确保文件完整性

对所有编译的软件语言来说&#xff0c;将人类可读代码转换成计算机可读代码都是一项软件保障挑战&#xff1a; 用户如何有信心相信在其计算机上运行的软件程序是根据开发者创建的同一源代码文件生成的呢&#xff1f; 这不一定&#xff0c;即使源代码文件经过行业专家评审&#…

php 输出01,php基础01_thinkphp输出Hello World-Go语言中文社区

用phpstorm和mamp搭建好php开发环境后&#xff0c;就来体验一下thinkPHP的输出过程1.下载thinkphp3.2.3版本框架&#xff0c;将其放入本地主机MyPhp文件夹中thinkphp3.2.3所包含的目录内容如下&#xff1a;目录对应文件为&#xff1a;composer.json:PHP组件的依赖管理器index.p…

人脸识别活体检测之眨眨眼和张张嘴

【这段时间有点忙&#xff0c;终于截止今天2018.06.22完成了人脸识别的最后一道程序——活体检测之眨眨眼和张张嘴】 关于人脸识别的内容我之前也写过好几篇博文&#xff0c;其中有&#xff1a; {java实现人脸识别源码} {C#winforms实现windows窗体人脸识别} {人脸识别活体检测…

工作效益问题

图解 代码实现 package com.kuang.study.lanqiao;public class Main {public static void main(String[] args) {int n8;//机器人个数int[] pre{0,0,0,0,1,0,2,3,5};//选择这个工作后的其那句最近工作下标int[] profit {5,1,8,4,6,3,2,4}; //工作收益int opt[]new int[n1];op…

amazon php 空间,(四)Amazon Lightsail 部署LAMP应用程序之扩展PHP前端

扩展PHP前端既然PHP前端和数据库是分开的&#xff0c;您将为Web层添加可伸缩性和容错性: 在以下步骤&#xff0c;您将获取Web前端实例的快照&#xff0c;并从该快照部署另外2个Web层实例。最终&#xff0c;您将在三个Web实例前面添加一个负载均衡器。至此&#xff0c;您将拥有一…

人脸识别活体检测之张张嘴和眨眨眼——Landmark

/** * Title: Landmark.java * Package org.entity * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2018-6-8 上午10:39:01 * blog https://blog.csdn.net/qq_34137397 * version V1.0 */ package org.entity;import java.…

相邻数字+(正月点灯笼的动态规划2)(递归+DP)---JAVA

思路分析 代码实现 递归实现 package com.kuang.study.lanqiao;public class Main {public static void main(String[] args) {int arr[]{1,2,4,1,7,8,3};int max d(arr,arr.length-1);System.out.println(max);}public static int d(int[] arr,int n){if(n0){return arr[0]…

.NET Core Tools 1.0 版本

与上周发布的Visual Studio 2017一起&#xff0c;微软还发布了.NET Core Tools 1.0。这些工具对所有.NET核心开发人员都非常有用&#xff0c;无论他们使用VS2017、Visual Studio for Mac、Visual Studio Code&#xff0c;还是基于他们自己选择的非微软IDE。 对于想要使用.NET C…

MySQL day()函数

转载自 MySQL day()函数 MySQL DAY函数简介 DAY函数返回给定日期的月份的日期部分。下面显示DAY函数的语法&#xff1a; DAY(date);DAY函数接受一个参数&#xff0c;它是您要获取月份日期的日期值。如果date参数为零&#xff0c;例如0000-00-00&#xff0c;则DAY函数返回0&…

matlab 的excel 对象,MATLAB 中的 COM 对象

COM concepts and an overview of COM support in MATLAB.Examples that show how to use COM interface with MATLAB.Before using COM objects, you must register their servers.如何创建 Microsoft 控件和 COM 服务器对象Pass data to and handle data from a COM object.L…

人脸识别活体检测之张张嘴和眨眨眼——Json_Parsing

/** * Title: Json_Parsing.java * Package org.util * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2018-6-9 上午10:33:48 * blog https://blog.csdn.net/qq_34137397 * version V1.0 */ package org.util;import java.…

MySQL date_add()函数​​​​​​​

转载自 MySQL date_add()函数 MySQL DATE_ADD函数简介 DATE_ADD函数将间隔时间添加到DATE或DATETIME值。 下面说明了DATE_ADD函数的语法&#xff1a; DATE_ADD(start_date, INTERVAL expr unit);DATE_ADD函数有两个参数&#xff1a; start_date是DATE或DATETIME的起始值。…

交换数组中的两个元素

方法一 public static void swap(int[] arr,int i,int j){arr[i]arr[i]^arr[j];arr[j]arr[i]^arr[j];arr[i]arr[i]^arr[j];}方法二 public static void swap(int[] arr,int i,int j){int temparr[i];arr[i]arr[j];arr[j]temp;}

塑造Visual Studio的未来

类似于Windows Insider计划&#xff0c;Microsoft为Visual Studio也启动了一项提前体验计划。该计划被命名为Visual Studio预览&#xff0c;它允许任何对Visual Studio未来感兴趣的用户都能参与其中。Microsoft已经为Visual Studio的三个主要版本&#xff08;社区版、专业版、企…

php划分年龄段,儿童时期是怎样划分年龄阶段的

儿童时期是人生开始的一个重要年龄阶段&#xff0c;一般是指从出生到15周岁。儿童时期生理、心理发育很快&#xff0c;不同的月龄和不同的年龄具有不同的生理与心理特征。因此&#xff0c;根据儿童各年龄时期的胜利与心理特征和不同的发展规律&#xff0c;进一步将儿童时期划分…