Docker 入门

1. 什么是容器化

将程序和它的依赖环境打包成可运行的镜像,并在一个通用的统一的环境中运行的过程,就叫容器化.提供这个镜像运行的通用的统一的环境,就叫容器.

容器化有什么好处?

试想一个稍微复杂的架构,可能要用到这些服务:

  1. MySQL和MongoDB作为存储
  2. ES用作数据仓库
  3. 一个文件服务器专门用于落地日志
  4. Kafka用于消息机制和数据流的传输
  5. Redis为整个应用提供缓存支持
  6. ...

可能遇到这些问题:

  1. 由于开发,测试,生产等多个环境造成的重复部署问题
  2. 环境之间的差异导致的应用的不确定性
  3. 架构的日趋复杂化对于运维人员的要求越来越高
  4. 环境迁移的成本越来越高

针对这些问题,容器化给出了解决方案,开发人员构建好镜像,一次构建,处处运行.对于运维人员,只要搭建好用于容器运行的基础环境(利用Docker Machine,甚至只需要配置好系统ssh和sudoer即可),则镜像就可以自动部署并在其中运行.

2. 什么是Docker

Docker is a platform for developers and sysadmins to develop, deploy, and run applications with containers.

这是Docker官方给出对Docker的解释.可以看到,从开发到部署再到生产,Docker都可以很好的应对.

3. Docker入门名词解释

对于刚开始接触Docker的人来说,往往被一些概念拒之门外.

Image: 即镜像,可以被Docker引擎加载并执行的最小单位.有各种开源软件官方制作的镜像发布在https://hub.docker.com上例如Ubuntu,Nginx等.也可以自己制作,然后推送到这里.

Container: 约定俗成的翻译叫容器,Image(镜像)是放在Container(容器)中然后去执行的.

Service: 即服务,指具备了更多应用属性的Container,可能光是一个Container还不足以很好的服务于一个应用.Service确定了Container的副本数量,CPU分配,内存分配,重启策略等等属性.可以简单理解为Service是一个Container的更进一步封装,使其更便于参与下一步的管理.

Swarm: 即集群.在Swarm中,可以部署多个服务.通俗讲,就是用于一个Docker节点在不足以服务当前应用的时候,我们可以通过Docker Swarm技术将多个节点连接到一个Swarm中,服务于当前应用.每个节点可以是一台主机,也可以是一个虚拟机.

Stack: 即栈,其实就是当前业务所需要的服务的集合,也就是整个应用的某一部分,或全部.通常就是指整个应用.

总结: 这几个概念是层层递进的,

  1. Swarm除外,Image是最小单位,是一个安装好的服务.
  2. Container时Image运行时的环境,是一个运行中的服务.
  3. Service是一个配置了进程数,CPU,内存分配的更可控的服务.
  4. Stack则是多个Service的集合,用于协同完成各种任务.
  5. 最后是Swarm,是一个用于运行Stack的多"主机"(其实是Docker)环境.
  6. 最终,Docker是提供这一切的一个类似虚拟机但完全不同于虚拟机的高效软件,用于解决之前提到的那些问题.

此外,像是Docker Machine,Docker Network,Docker Compose等等重要概念的存在使得Docker更容易部署,其中Docker Network相比link更好的解决了容器间的连接问题,甚至会为compose配置中的服务自动建立网络.由于本文面向的是Docker的初学者,所以这些概念将在后续博客中详细介绍.

此处评论已关闭