Docker简介

Docker简介


Docker相关述语理解:
1.镜像:就是一个可以运行的程序代码(用相关打包工具打包好后的文件)。如:Ubuntu镜像。当你在Docker上运行这个ubutu镜像时就会运行这个Ubuntu系统。当然你的镜像也可以是基于宿主机的系统调用。
2.容器:就是从镜像里解压出来的,可以运行的一个代码空间(在Docker就是一个文件),说白了就是一个应用程序,运行时就是一个进程。例如我运行一个镜像其实就是在宿主机上创建一个进程并生成一个容器文件(文件名为容器名字)。这个容器(程序)可以在Docker里运行、停止、删除。
3.基础的镜像:就是最基础的镜像文件,你可能在它的基础上进行功能有的扩展(如:Ubuntu镜像,你可以安装更多的应用程序),再制作成一个新的镜像,而这个镜像也可以作为一个基础的镜像。
4.容器也可理解为一个可以运行其它应用的一个系统(如:Ubuntu)或应用程序(如:Tomcat)

与虚拟机的区别:
1.当镜象是一个运行于宿主机系统的镜像时,用Docker容器来运行会比虚拟机的性能好很多。
2.当镜象也是基于一个Ubuntu系统环来运行时,那么与与虚拟机是没有多大区别的,当然性能应该会比虚拟机要好,毕竟是优化过的Ubuntu镜像。
3.Docker是共享内核的(与宿主机),但是镜像中的操作系统是不共享的,就是核的系统调用都是使用宿主机中的系统API,但操作系统是各个容器自身的。
4.内核与操作系统的关系,操作系统是内核的外套,操作系统是在内核基础上增加一些外层应用以方便用户进行开发的库或接口(如shell,软件管理器等),操作系统就是一个方便用户使用计算机和使用内核资源的应用集合的称呼。
5.虚拟机的应用是运行在客机上操作系统的,但这个操作系统是运行在客机上的内核的,内核运行在一个虚拟的硬件上的,虚拟硬件的运行在宿主机的系统上,宿主机的系统运行在宿主的内核中,这样就比docker多了两到三层的软件层,运行速度会慢很多。
6.但虚拟机的运行环境是完全独立的,而docker只是容器独立内核是共享的,会存在资源的共享(不是完全独立的)


好处:
1.存在问题:当你是基于宿主机来进行开发时(测试开发环境),要将应用应用到生产环境时,你就要在生产环境重新搭建一个与开发环境一样的运行环境(安装各种的软件(如:tomcat、JVM、JDK)和环境变量的设置)。
2.解决方法:基于Ubuntu镜像,加入各种功能(安装各种的软件(如:tomcat、JVM、JDK)和环境变量的设置)后生成一个新的镜像,说白了就是在Ubuntu上安装好各种软件之后将Ubuntu系统重新打包成一个新的Ubuntu镜像。
3.新的镜像可以直接在Docker上运行,运行这个镜像后,就可以得到一个什么都装好的环境了,不用你一个个再安装。运用这种方式进行环境搭建和部署服务是非常快的,而且环境也是一样的。


Docker组成:
1.Docker Hub: Docker中心服务,是一个共享的中心处,你注册帐号后出可以将自己做的镜像发送(发布)到这里供别人下载使用。
2.Docker 守护进程:Docker 使用客户端-服务器 (C/S) 架构模式。Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。
3.Docker 客户端:Docker 客户端会与 Docker 守护进程进行通信。Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。Docker 客户端和守护进程之间通过 socket 或者 RESTful API 进行通信。
4.安装Docker就会在本机(宿主机)上安装好Docker 守护进程和Docker 客户端,两者只能按功能分开两部份,方便远程管理Docker 守护进程


Docker Hub
1.Docker Hub是docker的中心仓库。Docker Hub里存储了公共的 Docker 镜像,并且提供服务来帮助你构建和管理你的 Docker 环境。
2.就是一个你注册帐号后,就给你一个仓库空间,你可以将你的Docker 镜像放上去并被别人下载使用。


镜像加载:
1.当你指定一个镜像,docker会查看这个镜像是否有一次加载到你的docker主机上,如果没有发现,docker就会在镜像仓库Docker Hub下载公共镜像。


创建自己的镜像:
1.我们可以从已经创建的容器中更新镜像,并且提交这个镜像。(以Ubuntu镜像为例)
(1)运行这个容器,在容器里面(就是Ubuntu系统)里面增加你要加入的功能(如安装Tomcat)
(2)安装好应用后,退出这个容器
(3)运用Docker生成镜像的命令(docker commit命令)去生成一个新的镜像文件

2.可以使用Dockerfile指令来创建一个镜像。
(1)使用docker commit命令能非常简单的扩展镜像,但是它有点麻烦:在一个团队中不容易共享它的开发过程。(就是看不出你是基于那个镜像开始,在上面加入了什么),Dockerfile指令就是用来解决这个问题的。
(2)方式就是写一个Dockerfile文件,里面写好相关的安装过程命令(有一定的格式),
(3)使用docker build命令和Dockerfile文件生成一个新的镜像。
(4)从新镜像中运行容器(就是加载镜像)时,会按生成镜像的方式输出镜像的生成过程信息,这样你就可以知道这个镜像是如何生成的过程了。
(5)Dockerfile 详细描述了该镜像是如何建立的以及运行时执行的命令。


一个例子说明:
1.你使用Docker,从官方仓库下载一个ubuntu镜像,把它作为最基础的镜像。然后在上面运行一个容器,这个容器里下载Nginx,再以这个容器为基础生成一个新的镜像.
2.以后这个镜像生成的容器就都是ubuntu+nginx为基础。
3.但是你工作环境可能需要你使用Apache来工作,你也想有一个ubuntu+apache为基础的镜像,于是你可以使用最基础的ubuntu镜像运行一个容器,在里面下载安装Apache,然后以这个容器为基础,保存一个ubuntu+apache的镜像,以后在这个镜像基础上运行的所有容器都拥有了一个apache环境。


Docker用途:
1.一致性的微环境.
2.部署快速,运行镜像就可以了。


参考原文(docker简介、应用): http://wiki.jikexueyuan.com/project/docker/userguide/usingdocker.html
参考原文(docker简介): http://www.open-open.com/lib/view/open1423703640748.html
参考原文(最小 Docker 镜像 hello-world 剖析): http://blog.csdn.net/hazir/article/details/45111161
参考原文(Docker与虚拟机性能比较): http://sanwen8.cn/p/182zEbE.html
参考原文(深入分析Docker镜像原理): http://www.csdn.net/article/2015-08-21/2825511
参考原文(Docker 性质及版本选择): http://blog.csdn.net/abcdocker/article/details/53158212
参考原文(Docker 简介): https://opskumu.gitbooks.io/docker/content/chapter5.html

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2339027