服务的容器化过程

1.容器和虚拟机

虚拟机: 用于为用户提供一个完整的系统镜像,常见的虚拟机有VMware,WirtualBox,KVM等.多个容器可以共享操作系统内容. 容器: 一种轻量级、可移植的为应用程序提供隔离的运行空间.每个容器内都包含一个独享的完整用户环境,并且一个容器内的环境变动不会影响其他容器的运行环境,可以使应用程序在几乎任何地方以相同的方式运行.每台虚拟机必须包括一整套操作系统、应用程序和各种依赖库等.

容器和虚拟机

服务和环境

服务和环境

2.Docker

2.1 Docker架构

Docker引擎

  • Docker后台服务(Docker Daemon):是长时间运行在后台的守护进程,是Docker的核心服务,可以通过命令dockerd与它交互通信
  • REST接口(REST API): 程序可以通过REST的接口来访问后台服务,或向它发送操作指令
  • 交互式命令行界面(Docker CLI):大多数时间都在使用命令行界面与Docker进行交互

docker引擎

Docker架构

  • Docker后台服务监听REST接口的请求,管理Docker的对象,比如Docker的镜像,容器,网络和磁盘卷
  • Docker客户端(Docker Client): 和Docker后台服务交互的主要工具,在使用docker run命令时,客户端把命令发送到Docker后台服务,再由后台服务执行该命令.Docker客户端可以连接多个后台服务并与他们通信
  • Docker仓库(Docker Registry): 存储Docker镜像.当使用Docker pull或Docker run命令时,就会从我们配置的docker仓库下载镜像,当使用docker push命令时,镜像就会被推送到Docker仓库中
  • Docker对象(Docker Object): 包括镜像、容器、网络、磁盘卷和插件等.在使用Docker时,就会创建和使用Docker对象
    • 镜像(image): 只读的指令模板,用户创建Docker容器(container).通常一个镜像会继承另外一个镜像,然后扩展自定义的指令.
    • 容器(container): 镜像运行的一个实例.可以使用Docker的API或CLI创建、运行、停止、移动或者删除容器.可以为容器绑定一个或多个网络(network)或挂载一个磁盘卷(volume),也可以通过继承它来创建一个新的容器.通过一个容器与另一个容器或它的宿主机都是相对独立和隔离的.在容器停止运行后,它其中的所有改变的状态如果没有保存,则都将会消失
    • Docker服务(service): 允许在多个Docker后台服务(deamon)中伸缩扩展容器,这些容器组成了一个拥有多住多从模式的集群.集群中每一个成员都是一个Docker后台服务,它们之间通过Docker接口通信.我们可以通过Docker服务来定义集群的参数,如果集群中容器的副本个数.默认情况下,集群的负载是面向所有容器节点的
  • 命名空间(Namespaces): Docker使用命名空间为容器提供了很好的隔离性.每个容器都是一个独立的命名空间,容器仅仅限制在自己的命名空间中访问权限
    • pd命名空间(pid namespace): 隔离进程的ID空间,使得不同pid命名空间里的进程ID可以重复且相互之间不受影响
    • net命名空间(net namespace): 管理网络协议栈的多个实例
    • ipc命名空间(ipc namespace): 管理和访问IPC资源
    • mnt命名空间(mnt namespace): 管理文件系统的挂载点
    • uts命名空间(uts namespace): 隔离内核和版本信息
  • cgroups(control groups): 确保Docker将可用的硬件资源共享给所有容器,并且可以对容器限制硬件资源
  • UnionFS(Union File Systems): 是Docker在创建层时使用的文件系统.这种文件系统使Docker变得轻量级并且执行速度很快.
  • 容器格式(container format): Docker将namespacescontrol groupsUnionFS封装成container format,称其为容器.默认的容器类型是libcontainer

docker架构

2.2 Docker安装使用

Docker基本信息

# 查看Docker版本
$ docker --version

# 查看Docker-compose版本
$ docker-compose --version

# 查看docker-machine版本
$ docker-machine --version

# 查看docker的更多信息
$ docker version

Docker命令

# 查看本地镜像
$ docker images

# 查看运行的容器
$ docker ps

# 运行docker自带的hello world
$ docker run hello-world

# 以后台模式在80端口启动Nginx容器
$ docker run -d -p 80:80 --name webserver nginx

results matching ""

    No results matching ""