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. Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE

    Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE

  2. AngularJS 的常用特性(四)

    11.使用 Module(模块) 组织依赖关系 Angular 里面的模板,提供了一种方法,可以用来组织应用中一块功能区域的依赖关系:同时还提供了一种机制,可以自动解析依赖关系(又叫依赖注入),一般来 ...

  3. Visual Studio 2017 远程调试(Remote Debugger)应用

    I.远程调试情景 项目部署在远程服务器或非本地环境中,需要 处理应用中遇到的一些错误时 (不能直接附加进程或F5调试应用). II. 远程调试准备 1.远程服务器--操作系统和硬件要求 MSDN 操作 ...

  4. guava文档API制作成chm文件

    将HTML制作成CHM.EXE需要用到一个小工具“HUGECHM”,将HTML打包成CHM文件 1.下载guava的最新的版本,网址:https://github.com/google/guava/w ...

  5. 关于springmvc中常用的注解,自己也整理一下

    1.@Controller 在springMVC中@controller主要用在控制层的类上,之前只知道用注解开发的时候必须加一个@controller ,今天看了别的大佬整理的才知道为什么这么用,控 ...

  6. mybatis必知必会一

    入门: 1.每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory 的实例可以通过 SqlSessionFactoryBui ...

  7. 学习Golang的步骤建议

    一.快速入门 通过快速入门可以宏观的了解Go相关知识.快速入门可以去学习 go-tour 国内可以访问的中文版的 go-tour 地址有下面一些: http://gotour.qizhanming.c ...

  8. HDU 2045 RPG难题

    http://acm.hdu.edu.cn/showproblem.php?pid=2045 这道题也是用倒推: 先假设前n-2个块都已经涂好,涂第n-1块时有以下两种情况: 1.n-1和1相同,则n ...

  9. spss C# 二次开发 学习笔记(四)——Spss授权

    Spss的授权方式有两种,单机版和网络版. Spss的激活,在联网的情况下,通过20位的激活码激活,在未联网的情况下,Spss根据机器获取一个类似4-XXXX的锁定码,然后由激活码和锁定码算出一个授权 ...

  10. 一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)

    本篇紧接着上一篇文章[一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面] 验证码功能 一般验证码功能实现方式为,前端界面访问一个url请求,后端服务代码生成一个图片流返回至浏览器 ...