目录隐藏 |
宿主如果和容器系统不同的话,那不是和虚拟机一样,一层层的调用,那么 Docker 和虚拟机还有什么差别? | |
要把 Windows 和 Linux 分清楚,更要把内核(kernel)和用户空间(userland)分清楚。 容器内的进程是直接运行于宿主内核的,这点和宿主进程一致,只是容器的 userland 不同,容器的 userland 由容器镜像提供,也就是说镜像提供了 rootfs。 假设宿主是 Ubuntu,容器是 CentOS。CentOS 容器中的进程会直接向 Ubuntu 宿主内核发送 syscall,而不会直接或间接的使用任何 Ubuntu 的 userland 的库。 这点和虚拟机有本质的不同,虚拟机是虚拟环境,在现有系统上虚拟一套物理设备,然后在虚拟环境内运行一个虚拟环境的操作系统内核,在内核之上再跑完整系统,并在里面调用进程。 还以上面的例子去考虑,虚拟机中,CentOS 的进程发送 syscall 内核调用,该请求会被虚拟机内的 CentOS 的内核接到,然后 CentOS 内核访问虚拟硬件时,由虚拟机的服务软件截获,并使用宿主系统,也就是 Ubuntu 的内核及 userland 的库去执行。 而且,Linux 和 Windows 在这点上非常不同。Linux 的进程是直接发 syscall 的,而 Windows 则把 syscall 隐藏于一层层的 DLL 服务之后,因此 Windows 的任何一个进程如果要执行,不仅仅需要 Windows 内核,还需要一群服务来支撑,所以如果 Windows 要实现类似的机制,容器内将不会像 Linux 这样轻量级,而是非常臃肿。看一下微软移植的 Docker 就非常清楚了。 所以不要把 Docker 和虚拟机弄混,Docker 容器只是一个进程而已,只不过利用镜像提供的 rootfs 提供了调用所需的 userland 库支持,使得进程可以在受控环境下运行而已,它并没有虚拟出一个机器出来。 参考: https://www.docker.com/what-docker 视频笔记: Windows Server 和 Docker - John Starks |
|
Docker 资料好少啊?网上的命令怎么不能用? | |
首先,做技术工作,请珍惜生命,远离百度; 其次,不翻墙、不用Google、不看英文资料,那请转行,没法混。 然后是回答问题,Docker的资料其实很丰富,特别是官方文档讲解非常详细。 https://docs.docker.com/ 另外,Docker有丰富的镜像库,Docker Hub,特别是官方(Official)的镜像可以直接在生产环境中使用,制作比较精良。 https://hub.docker.com/explore/ 所有的官方镜像都有 Dockerfile,以及在github上有全部生成镜像的配套文件,遵循了Dockerfile的最佳实践,这些也是很好地学习资料。 另外,在 YouTube 的 Docker 官方频道下有几百个视频讲座,从初级到高级用户都能从里面学到很多东西。 https://www.youtube.com/user/dockerrun |
|
总说看官方文档,可是 Docker 官网文档经常被墙,看不了怎么办? | |
首先感谢伟大的墙及其先祖。 然后,我们可以本地运行 Docker 官方文档的网站,以 docker 的方式: $ docker run -d -p 80:4000 docs/docker.github.io
对于那些访问不了我的问答录的童鞋,同样可以用这样的方式来本地运行: $ docker run -d -p 80:80 twang2218/blog.lab99.org
|
|
如何选择 Docker 书籍? | |
Docker 属于敏捷开发的产品,并且处于高速创新阶段,每年都会有很多版本发布。由于这种快速开发的特性,Docker 一般只保留几个版本内的向后兼容性,再之后就会废弃。因此选择图书的时候,不应该选择比当前版本低超过2-3个版本的书籍。换句话说,市面上大部分书籍,特别是中文书籍、网文,很可能都过时了。 Docker 版本号在 2017 年以前,使用 <大版本号>.<小版本号>.<补丁版本号> 的结构,那时 Docker 基本会保持 3 个小版本号 之内的兼容性(如果一个特性宣布废弃,一般会在 3 个版本后才彻底移除)。 而从 2017 年春以后,Docker 使用了新版本号结构:<年>.<月>.<补丁版本号>,并且将每月发布一个前沿(Edge)版本,每季度发布一个稳定(Stable)版本。因此选择书籍也应该以介绍 2-3个季度以内版本 的书籍为准。那些介绍一年以前发布的 Docker 版本的书籍不应该再看了。 因此在购买 Docker 图书的时候,应该遵循这样的原则:观察一下当前的 Docker 版本号,选择不要晚于 3 个版本的 Docker 书籍。 比如写这段文字时为 17.06,那么就不要购买介绍 Docker 1.12 及其以前版本的书籍了,否则看到的很多东西可能将会因过时而无法使用,或者已经不必如此繁琐有更简单的方式去实现了。 所以,对于 Docker 学习而言,最好的书籍是官网文档,官网的文档很丰富。 新手教程: https://docs.docker.com/get-started/ 大量的例子: https://docs.docker.com/samples/ 用户文档: https://docs.docker.com/engine/userguide/ 镜像: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ 存储: https://docs.docker.com/engine/userguide/storagedriver/ 网络: https://docs.docker.com/engine/userguide/networking/ 管理文档: https://docs.docker.com/engine/admin/ 存储: https://docs.docker.com/engine/admin/volumes/ 安全: https://docs.docker.com/engine/security/security/ 集群: https://docs.docker.com/engine/swarm/ 对于新手而言,应该先从新手教程开始,内容还是很简单易懂的,很容易上手。然后,可以把用户文档好好看一遍,里面把很多 Docker 的基础概念讲的很清楚。概念清晰后,可以去把官网给出的例子好好的学习一下,这些例子都是具体怎么应用 Docker 的,有文字说明以及具体的考虑,很适合学习。 |
|
Docker 1.8 以后版本都有什么改进么? | |
每个版本发布时,官方博客 https://blog.docker.com 都会有专门文章描述这个版本最主要的改进。 1.9: https://blog.docker.com/2015/11/docker-1-9-production-ready-swarm-multi-host-networking/ 1.10: https://blog.docker.com/2016/02/docker-1-10/ 1.11: https://blog.docker.com/2016/04/docker-engine-1-11-runc/ 1.12: https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/ 另外,可以看一下孙宏亮维护的 《Docker 中文 Changelog》: 1.10: https://github.com/allencloud/docker-changelog-chinese/blob/master/docker-1.10.0-changelog.md 1.11: https://github.com/allencloud/docker-changelog-chinese/blob/master/docker-1.11.0-changelog.md 1.11.1: https://github.com/allencloud/docker-changelog-chinese/blob/master/docker-1.11.1-changelog.md 1.12: https://github.com/allencloud/docker-changelog-chinese/blob/master/docker-1.12.0-changelog.md 关于 Docker 1.13 可以看一下 《Docker 1.13 新增功能》。 |