Docker定义

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker的作用主要在于:让程序的运行环境得到充分虚拟与隔离的同时, 轻巧化.

  我是不推崇过分详细阐述如何安装某一个软件的.首先版本不同,安装的命令,参数,方式本就不同,其次,不同的操作系统,不同的系统现有设置也会有影响..安装这种事儿,是非常容易过期的,再详尽的介绍也不一定适合自己.我只推荐一个地方:官网. 只需要选对自己的操作系统,基本都会很顺利

在这里梳理几个官网安装链接:

  1. Mac
  2. Ubuntu
  3. Windows
  4. CentOS

Docker的其他信息:

Docker(左)和传统虚拟化(右)的体系架构有这样2张经典的图解释:

  显然,同样是为了虚拟化,解耦,第二种方式需要支撑起不同的操作系统运行,消耗较大.而docker仅仅是在Docker服务(由Docker引擎支撑)之下,使得程序在虚拟化环境中运行.

Docker产生的目的:

  • 环境管理复杂,有各种各样的OS,中间件,App,一款产品能够成功发布,开发者需要关注过多琐碎的细节,管理困难,部署麻烦.
  • 云计算时代的到来:(如AWS BPM的成功),引导开发者将应用转移到云上,这个虽然能大部分的解决硬件管理问题,然而软件配置和管理问题依然存在,Docker可以尝试新的软件管理办法解决这个问题.
  • 虚拟化手段变化:云时代为了解决上述问题,采用标配硬件降低成本,采用虚拟化手段满足用户按需分配的资源需求和保证可用性和隔离性.但是这种虚拟化,往往用的是OS,GuestOS,对于Docker来说,这些虚拟化手段对资源的浪费是不小的.

Docker的4个性质: 

  • 隔离性: 每个用户实例时间相互隔离,互不影响. 一般的硬件虚拟化给出的方法是VM,而LXC给出的方法是container,更细一些讲就是kernel namespace.其中pid、net、ipc、mnt、uts、user等namespace将container的进程、网络、消息、文件系统、UTS("UNIX Time-sharing System")和用户空间隔离开。
  • 可配额/可度量: 提供类似文件的接口,在文件夹中新建task文件,写入相关配置可以实现对进程的资源控制.
  • 便携性:支持将不同目录挂在到同一个虚拟文件系统下. 例如将宿主机器的硬盘挂载到容器上,使得在不改变image的基础上,允许用户进行读写操作.
  • 安全性:实现的Linux系统固有的安全标准, Docker Deamon的安全接口,

比较传统虚拟化和docker,两种方式还有2个比较大的不同:

  1. 传统虚拟化方式并没有严格要求在一个虚拟操作系统中只运行一个程序,是相对自由的一整个生态系统,里面不严格地有许多程序在运行.
  2. Docker在启动镜像的时候,无论是在命令的设置上,还是其根本的理念上,都希望用户使得一个容器只运行一个应用程序,可以形象理解成,一个鱼缸里只养一条鱼.因此,大家也可以参考这里十项Docker不该做的事儿

但是这2种虚拟化方式其实还是有些类似的地方的,比如:都是以镜像(images)为启动基础的,不同的镜像保存不同的系统/状态. 需要的时候,只需要读取某个镜像即可.

镜像和容器是2个很关键的概念.镜像可以理解为某种用以加载的资源,而容器,是运行着的镜像的实例.一个镜像可以有多个容器.

参考:[镜像(image)是动态的容器的静态表示(specification),包括容器所要运行的应用代码以及运行时的配置。Docker 镜像包括一个或者多个只读层( read-only layers ),因此,镜像一旦被创建就再也不能被修改了。一个运行着的Docker 容器是一个镜像的实例( instantiation )。]

我们可以在利用docker的commit命令将容器固化,将动态的镜像实例变成该瞬间的一个新的镜像.

生成镜像的两种方法:

  1. 利用一个已有的(来自本地/hub的)镜像创建一个容器,进入容器运行一些命令,利用docker commit生成新镜像.
  2. 在某个自己的目录,创建Dockerfile,在其中指挥一系列动作,直接用docker build利用已有的(来自本地/hubd)镜像创建一个镜像. // 这是更被推崇的方式

生成镜像的2种方法可以参考这篇文章

  • 可以得到从一个基础镜像,最终生成自己想要的镜像: 或者是对元数据的修改,或者是对文件系统的修改.
  • Docker在执行指令之后会创建临时镜像存储在cache中
  • Docker镜像是基于基础镜像的多层叠加. 当Docker创建一个容器时,它会在基础镜像的容器层上添加一层可写容器层,接下来对容器的话是在这个层是进行的.

附10件使用容器时应避免的做法:

  • 不要在容器中保存数据(Don’t store data in containers
  • 将应用打包到镜像再部署而不是更新到已有容器(Don’t ship your application in two pieces
  • 不要产生过大的镜像 (Don’t create large images
  • 不要使用单层镜像 (Don’t use a single layer image
  • 不要从运行着的容器上产生镜像 (Don’t create images from running containers )
  • 不要只是使用 “latest”标签 (Don’t use only the “latest” tag
  • 不要在容器内运行超过一个的进程 (Don’t run more than one process in a single container )
  • 不要在容器内保存 credentials,而是要从外面通过环境变量传入 ( Don’t store credentials in the image. Use environment variables
  • 不要使用 root 用户跑容器进程(Don’t run processes as a root user )
  • 不要依赖于IP地址,而是要从外面通过环境变量传入 (Don’t rely on IP addresses )

参考资料:

Docker 命令大全

http://www.cnblogs.com/yudar/p/4391556.html

http://www.cnblogs.com/sammyliu/p/5877964.html   刘世民

Docker简介与搭建的更多相关文章

  1. 进击的docker 一 : Docker 简介

    Docker简介 1.什么是docker 1.1.docker 起源 开源项目 诞生2013年初 GO语言开发实现 遵从了Apache2.0协议 项目代码在GitHub维护 1.2.docker目标 ...

  2. Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

  3. Docker 简介及安装

    Docker简介: 什么是Docker?将应用程序自动部署到容器 go语言开源引擎  Github地址:https://github.com/docker/docker 2013年初 dotCloud ...

  4. Docker简介以及安装

    Docker简介以及安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是容器 1.一种虚拟化方案 与传统的虚拟机不同,传统的虚拟机是通过中间层将一台或多台独立的机器虚拟运 ...

  5. Docker简介和安装(一)

    Docker简介 Docker 是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎, 源代码托管在 GitHub 上, 基于Go语言并遵从Apache2.0协 ...

  6. Docker---(1)Docker 简介

    原文:Docker---(1)Docker 简介 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn.net/weixin_39 ...

  7. 尚硅谷Docker---1-5、docker简介

    尚硅谷Docker---1-5.docker简介 一.总结 一句话总结: docker是环境打包:有点像windows镜像 docker的实质:缩小版.精细版.高度浓缩版的一个小型的linux系统 1 ...

  8. 《Docekr入门学习篇》——Docker简介

    Docker简介 什么是docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2. ...

  9. Docker简介

    Docker简介 1.容器虚拟化,比传统的虚拟化轻量 2.2013年出现,发展非常迅猛 3.Redhat在6.5版本开始支持docker 4.使用go语言开发,基于apache2.0协议 5.开源原件 ...

随机推荐

  1. Hadoop Metrics2

    来源:Hadoop Metrics2 Metrics are collections of information about Hadoop daemons, events and measureme ...

  2. “融而开放、合以创新”T-HIM融合通信技术开发实战

    本文来自腾讯云技术沙龙,本次沙龙主题为T-HIM融合通信技术开发实战 2018年,企业的数字化转型大规模兴起,"数字化经济"时代来临.如何利用数字化技术来支持业务的转型.增长与创新 ...

  3. php中常量 const属性,静态属性,静态的函数方法

    <?php//php中的常量define('MYNUM', 2000);echo MYNUM.'<br>';if(!defined('MYNUM')){ define('MYNUM' ...

  4. android系统权限的管理

    被权限搞了好久,决定好好的研究一下: 参考资料 http://blog.csdn.net/xieyan0811/article/details/6083019?reload http://blog.c ...

  5. POJ 3710:Matrix Power Series

    Description 给出矩阵 \(n*n\) 的 矩阵\(A\) , 求 \(A^1+A^2+A^3...+A^k\) Solution 首先我们设 \(S_n=\sum_{i=1}^{n}A^i ...

  6. DataGridView 单元格自动填充

    在DataGridView单元格中,当输入指定字符时,自动完成填充. 通过 TextBox实现 AutoCompleteMode AutoCompleteMode.Suggest: AutoCompl ...

  7. VS中让用户选择路径

    //选择文件 OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); MessageBox.Show(ofd.FileName); / ...

  8. springboot在阿里CentOS 7后台永久运行

    查看Java进程可以使用 ps -ef|grep java 首次后台永久启动,会把日志输出到新建的log.file文件 nohup java -jar demo-0.0.1-SNAPSHOT.jar ...

  9. Spring中的Bean配置方式

    1.IOC和DI概述 IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 ...

  10. [LeetCode]Swap Nodes in Pairs题解

    Swap Nodes in Pairs: Given a linked list, swap every two adjacent nodes and return its head. For exa ...