第一部分 容器和虚拟机
容器的发展之路
什么是容器?
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。
容器和虚拟机
容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器虚拟化操作系统而不是硬件。容器更便携,更高效。
容器是应用层的抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。
虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。管理程序允许多台VM在单台机器上运行。每个VM都包含操作系统的完整副本,应用程序,必要的二进制文件和库 - 占用数十GB。虚拟机也可能很慢启动。
VM(虚拟机) | ConTAINER(容器) |
---|---|
![]() | ![]() |
第二部分 Docker
Docker概述
Docker是一个开发,运输和运行应用程序的开放平台。Docker使您可以将应用程序与基础架构分离,以便快速交付软件。使用Docker,您可以像管理应用程序一样管理基础架构。通过利用Docker的方法快速发送,测试和部署代码,您可以显着减少编写代码和在生产中运行代码之间的延迟。
Docker平台
Docker提供了在称为容器的松散隔离环境中打包和运行应用程序的功能。隔离和安全性允许您在给定主机上同时运行多个容器。容器是轻量级的,因为它们不需要管理程序的额外负载,而是直接在主机内核中运行。这意味着您可以在给定的硬件组合上运行比使用虚拟机时更多的容器。
Docker提供工具和平台来管理容器的生命周期:
- 使用容器开发应用程序及其支持组件。
- 容器成为分发和测试应用程序的单元。
- 准备就绪后,将应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是相同的。
Docker Engine
Docker Engine是一个客户端 - 服务器应用程序,包含以下主要组件:
- 服务器,是一种长时间运行的程序,称为守护程序进程(
dockerd
命令)。 - 一个REST API,它指定程序可以用来与守护进程通信并指示它做什么的接口。
- 命令行界面(CLI)客户端(
docker
命令)。
CLI使用Docker REST API通过脚本或直接CLI命令控制Docker守护程序或与Docker守护程序交互。许多其他Docker应用程序使用底层API和CLI。
在Docker Engine上运行的Docker容器:
- 标准: Docker创建了容器的行业标准,因此它们可以随处携带
- **轻量级:**容器共享机器的操作系统内核,因此不需要每个应用程序的操作系统,从而提高服务器效率并降低服务器和许可成本
- **安全:**应用程序在容器中更安全,Docker提供业界最强大的默认隔离功能
Docker 架构
Docker 使用的是一个客户端-服务器架构,客户端告诉服务器的守护进程(daemon)创建,运行和分发Docker容器。Docker 客户端既可以和服务器同时运行在同一个系统中,也可以分开将Docker客户端连接到远程Docker daemon,比如docker-machine的实现。客户端和守护进程使用REST API通过UNIX 套接字或网络接口进行通讯。
Docker daemon(守护进程)
守护进程负责监听客户端的请求和管理Docker 对象,比如:镜像,容器,网络和 卷,一个daemon也可以与其他daemons 进行通讯达到管理Docker services的作用
Docker client(客户端)
客户端是Docker 用户与Docker交互的主要方式,客户端会传送用户的命令比如:docker image ls
给守护进程,客户端可以和多个守护进程通:docker-machine
Docker image(镜像)
将Docker镜像理解为一个包含了OS文件系统和应用的对象,在Docker世界中,镜像实际上等价于未运行的容器。在Docker主机上运行docker image ls可以查看镜像。一个镜像是一个创建Docker container的一个只读的模板,一个镜像通常是基于另外一个镜像,比如基于centos镜像但是在镜像中安装了比如Apache web服务和其他应用程序,以及运行应用程序所需要的详细配置信息。创建一个IMAGE需要创建一个Dockerfile文件。
Docker Container(容器)
一个Docker 容器是一个镜像的运行实例,可以通过Docker Client创建,开启,停止,移动和删除。Container只能在创建时提供配置选项定义,一旦删除容器,未保存在持久存储中的配置会消失。
Docker services(服务)
Services 可以让你通过多个在一起工作的管理和工作者(swarm)的Docker deamon 扩展容器,每一个swarm是一个Docker daemon,他们通过Docker API联系。Services同所有的工作机器进行负载均衡,这对于用户来说是透明的(用户感觉就只有一个机器在工作,其实有多台机器在运行)
Docker Machine(机器)
docker machine 有什么用:
- 在Mac和Windows上安装和运行Docker
- 提供和管理多台远程 Docker 主机
- 提供swarm 集群
Docker Machine 是一个可以让你安装Docker Engine 到虚拟主机的工具。