docker学习-理论学习

一、 Docker为什么出现?

一般来说,开发一款产品,这款产品的开发与上线需要两套环境,分别为应用环境和配置环境,而开发环境通常由运维人员来做,这时就会出现一个常见的问题:这套代码在我的电脑上可以运行,而在别人的电脑上就不行。这个问题的出现,对运维人员的考验很大。
在运维方面,不同机器上的环境配置十分麻烦,每一个机器都要部署特定的环境(如集群Redis、ES、Hadoop等),这样非常耗费时间,这一点我在不同云主机上配置Hadoop集群时就已经体会到了。
在发布一个项目时(jar+(Redis MySQL jd ES)),项目都不能带上环境安装打包。
而Docker给上面的问题提供了解决方案。
docker学习-理论学习

Docker的作用,就是在安装一个项目的同时,也可以配置项目运行所需要的环境(这一点通过镜像机制做到)。
Docker核心思想:隔离。打包装箱,每个箱子是互相隔离的,可以让多个应用(端口冲突)得以解决。通过隔离机制,可以将服务器的资源利用到极致。
这里可以得出一个通俗的结论:所有的技术都是因为出现了问题,有了解决这些问题的需求,才会出现,才需要学习!

二、 Docker为什么会火?

因为相比于虚拟机,Docker更加轻巧。
Docker的容器技术也是一种虚拟化技术,与虚拟机不同的是,它并不运行所有环境,而是只运行最核心的环境(运行镜像就可以了),所需的内存更小,启动时间更快。

三、 Docker的学习资料:

docker学习-理论学习

一般通过Docker的官方文档来进行学习

四、 虚拟机技术的缺点:

1.资源占用多(内存)
2.冗余步骤多(开机)
3.启动很慢
下图表示了虚拟机技术的原理:
docker学习-理论学习

下图表示了Docker容器技术的原理:
docker学习-理论学习

Docker的容器 和 虚拟机技术 的不同:
1.传统虚拟机,是虚拟出硬件环境,运行一个完整的操作系统;
2.容器内的应用,直接运行在宿主机的环境中,更加轻便;
3.每个容器之间,互相隔离,保证安全

Docker可以使应用更快速地交付和部署:
传统:一堆帮助文档,安装程序;
Docker:打包镜像发布测试,一键运行;

Docker可以更高效的利用计算资源:
Docker是内核级别的虚拟化,在一个物理机上可以运行许多容器实例,服务器的性能可以充分利用。

五、 Docker的基本组成:

docker学习-理论学习

镜像(image):
相当于一个模板(类似于JAVA中的class),用来创建容器(类似于JAVA中的对象),如镜像1–run–容器1、容器2。。。

容器(container):
独立运行一个或一组应用,通过镜像来创建。
启动,停止,删除,基本命令。
可以把一个容器理解为一个建议的linux系统。

仓库(repository):
用来存放镜像的地方。
分为:共有仓库、私有仓库。
Docker Hub(默认国外的,很慢)、阿里云都有容器服务

六、 Docker的默认工作路径:

/var/lib/docker/
一般如有什么问题,可以在这个目录下查看相关文件。
docker学习-理论学习

七、 Docker run hello-world 流程分析:

docker学习-理论学习

如果让docker run 一个不存在的镜像,先是本地寻找镜像jack,没有找到之后,再去阿里云上寻找,还是没找到,故返回错误。

docker学习-理论学习

八、 底层原理

Docker的工作原理:
Docker的结构:C/S结构,client-server,Docker的守护进程运行在主机上,在用户输入相关指令后,通过socket从客户端client对server进行访问。
DockerServer接收到客户端Docker-Client的指令,从而执行此指令并做出反应。
docker学习-理论学习

Docker为什么比虚拟机快?
Docker比VM有更少的抽象层;
Docker用的是宿主机的内核,而VM用的是Guest OS;
Docker的启动为秒级,VM为分钟级。

九、 学习说明

这篇博客是我学习Docker的学习笔记,有些简单的地方一概而过,并不是非常详细,请见谅,但一些需要详细理解的概念和命令,我会在自己深入思考后,再多写一些自己的想法。