Docker入门教程(1):技术方向和安装方法

欢迎!你想要学习如何使用Docker,我们感到非常高兴。

本系列教程会分为六个部分,你将能:

  1. 了解技术方向和安装方法(本篇教程)
  2. 构建和运行你的第一个应用程序
  3. 将你的应用程序转换为可伸缩的服务
  4. 将你的服务横跨多个服务器部署
  5. 添加持久化数据的访客计数器
  6. 将你的Docker Swarm部署至生产环境

示例应用程序非常简单,因此你不用过度分心于程序代码的具体功能。最后,Docker的价值在于它如何能够构建、装载和运行应用程序。对于Docker来说,你的应用程序的实际功能是完全不可知的。

前提条件

随着时间的推移,虽然我们会不断定义新的概念,但是在学习本系列教程之前,你最好搞清楚两个问题:

  1. 什么是Docker?
  2. 为何要使用Docker?

在继续学习之前,我们还需要假设你已经能够熟练掌握以下的知识:

  • IP地址和端口
  • 虚拟机
  • 编辑配置文件
  • 基本了解代码的依赖关系和构建过程
  • 服务器的资源使用率,例如:CPU百分比(以百分比为单位)和内存使用率(以字节为单位),等等

容器的简要说明

镜像是一种轻量级的、独立的、可执行的软件包,它包含运行某个应用程序所需要的方方面面,例如:程序代码、运行时环境、程序库、环境变量,以及配置文件。

容器是镜像的运行时实例 —— 当运行镜像时,Docker便会将镜像的一份副本拷贝至内存。在默认情况下,容器运行和宿主机环境是完全隔离的,只有经过特定的配置,容器才能访问宿主机的文件和端口。

容器可以在宿主机的系统内核上原生地运行应用程序。由于虚拟机必须通过一个虚拟机监控器(hypervisor)才能够虚拟化访问宿主机的资源,因此容器的性能特征比虚拟机更好。容器可以原生地访问宿主机资源,每个容器都是一个正在运行的独立进程,相比起其他任何的可执行程序,容器并不会占用更多的内存。

比较容器和虚拟机

参考以下两个图表,对比虚拟机和容器之间的不同之处:

虚拟机图表

虚拟机结构

虚拟机运行客户操作系统 —— 对应于每个方框中的Guest OS层。虚拟机消耗的系统资源较多,它的磁盘镜像和应用状态会受到宿主机很多因素的影响,例如:操作系统的设置、系统安装的依赖关系、操作系统的安全补丁,以及其他容易忽略、难以复现的短暂状态。

容器图表

容器结构

多个容器可以共享一个系统内核,容器镜像只需要包含可执行程序和包依赖关系的相关信息,而宿主机系统完全不用包含这些信息。这些进程可以像原生进程一样运行,通过执行docker ps命令,你就可以单独管理这些进程了 —— 就像你在Linux系统中执行ps命令,以便于查看活动进程一样。最后,因为容器包含所有的依赖关系,所以宿主机也就不可能影响容器的配置。容器化的应用程序可以在任意宿主机中运行。

安装方法

在开始学习之前,请确保你的宿主机系统已经安装过最新版本的Docker。安装方法请参考:《如何在CentOS上手动安装Docker》。

注意:本系列教程需要1.13或更高版本。

现在,你应当能够运行docker run hello-world命令,返回的信息如下图所示:

运行hello-world示例

确认你使用的Docker版本是1.13或更高的版本,如下图所示:

检查docker版本

如果你看到的消息如上图所示,那么接下来便可以继续学习本系列教程了!

结论

扩展单元是一个单独的、可移植的可执行程序,它具有非常巨大的影响。这就意味着,CI/CD(持续集成/持续部署)能够将更新内容推送至一个分布式应用的一部分成员,你不需要担心系统依赖的问题,同时还能提高资源密度,编排扩展行为会启动新的可执行文件,而不是新的VM主机。我们将会学习所有的这些知识,但是在学习怎么奔跑之前,我们首先必须学会怎么走路!