• 第1章 概念问题


    1.1 宿主如果和容器系统不同的话,那不是和虚拟机一样,一层层的调用,那么 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
    (中文): https://www.docker-cn.com/what-docker

    1.2 Docker 资料好少啊?网上的命令怎么不能用?

    首先,做技术工作,请珍惜生命,远离百度;
    其次,不FQ、不用Google、不看英文资料,那请转行,没法混。

    然后是回答问题,Docker的资料其实很丰富,特别是官方文档讲解非常详细。

    (英文): https://docs.docker.com/
    (中文): https://docs.docker-cn.com (文档有坑,不少代码格式有错)
    (老麦的翻译): https://www.gitbook.com/read/book/octowhale/docker-doc-cn
    另外,Docker有丰富的镜像库,Docker Hub,特别是官方(Official)的镜像可以直接在生产环境中使用,制作比较精良。

    https://hub.docker.com/explore/

    所有的官方镜像都有 Dockerfile,以及在github上有全部生成镜像的配套文件,遵循了Dockerfile的最佳实践,这些也是很好地学习资料。

    另外,在 YouTube 的 Docker 官方频道下有几百个视频讲座,从初级到高级用户都能从里面学到很多东西。

    https://www.youtube.com/user/dockerrun

    1.3 如何选择 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-cn.com/get-started/
    (老麦的翻译):https://docs-cn.docker.octowhale.com/get_started/001.Orientation.html
    Docker 课程:http://training.play-with-docker.com/
    运维人员课程:http://training.play-with-docker.com/ops-landing/
    开发人员课程:http://training.play-with-docker.com/dev-landing/
    大量的例子:
    (英文):https://docs.docker.com/samples/
    (中文):https://docs.docker-cn.com/samples/
    用户文档:
    (英文):https://docs.docker.com/engine/userguide/
    (中文):https://docs.docker-cn.com/engine/userguide/
    镜像:
    (英文):https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
    (老麦的翻译):https://docs-cn.docker.octowhale.com/engine/userguide/eng-image/dockerfile_best-practices.html
    存储: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/
    部分文档有对应官方的中文翻译,可以从 https://docs.docker-cn.com 查看。但是一定要注意代码格式,中文文档中许多格式是错误的,应该对比英文文档中的代码来看。

    对于新手而言,应该先从新手教程开始,内容还是很简单易懂的,很容易上手。然后,可以把用户文档好好看一遍,里面把很多 Docker 的基础概念讲的很清楚。概念清晰后,可以去把官网给出的例子好好的学习一下,这些例子都是具体怎么应用 Docker 的,有文字说明以及具体的考虑,很适合学习。

    1.4 总说看官方文档,可是 Docker 官网文档经常被墙,看不了怎么办?

    首先感谢伟大的墙及其先祖。

    然后,我们可以本地运行 Docker 官方文档的网站,以 docker 的方式:

    docker run -d -p 80:4000 docs/docker.github.io

    这样访问 Docker 宿主的 80 端口,如 http://localhost,就会看到官网文档了。

    对于那些访问不了我的问答录的童鞋,同样可以用这样的方式来本地运行:

    docker run -d -p 80:80 twang2218/blog.lab99.org

    然后就可以访问本地 80 端口看到最新的问答录了。

    1.5 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 新增功能》

  • 相关阅读:
    重拾IP路由选择:CCNA学习指南中的IP路由选择
    Ubuntu Eclipse ns3编译中 遇到的OSError 系列问题
    Ubuntu 上 执行命令 java -version 显示 没有那个文件或目录
    Ubuntu 登陆界面无限循环问题 以及 root用户无法使用命令问题
    【TCP/IP详解 卷一:协议】TCP的小结
    Ubuntu上 配置Eclipse:安装CDT
    【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能
    【TCP/IP详解 卷一:协议】TCP定时器 小结
    【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器
    【TCP/IP详解 卷一:协议】第二十二章 TCP的坚持定时器
  • 原文地址:https://www.cnblogs.com/syavingcs/p/8399319.html
Copyright © 2020-2023  润新知