一、容器的概念
1. 什么是docker
docker是一个开源的容器引擎技术,将程序和依赖都打包,可以部署到任何环境上,用于开发、交付和部署。
1. 什么是容器,是怎么由来的
容器是宿主机的一种特殊的进程,直接运行到操作系统上,容器是由镜像运行产生的。
左图是虚拟化技术(虚拟机),右图是容器技术
server:物理服务器 Host os:操作系统 Hypervisor
bins:二进制工具 Libs:库文件、链接等
(1)容器是在宿主机操作系统上使用Cgroups,Namespaceses技术创建出来具有边界的特殊进程,多个容器共用一个内核
<1> Chroot: 在一个宿主机上运行多个容器,且容器之间相互个离,那么第一个就需要系统库文件的依赖,对于一个容器而言,需要将其需要的系统文件单独复制出来一份,放到指定目录,并且需要让进程认为这就是根目录,而不是去调用宿主机系统上的库文件。Chroot就是一个切换根目录的方式。
<2>NameSpaces: Linux操作系统内核从底层实现了为各个进程创建独立用户空间的功能,不同用户空间似于一个个独立的虚拟机系统,用户空间内部进程不能感知到其它用户空间中的进程状态。内核提供了六种Namespaces:PID、NET(网络协议,网络协议栈,端口等)、IPC(消息队列,信号量、共享内存这些在同一namespace中可以共享)、mount(挂载隔离点)、UTS(主机名和主机域)、User(用户隔离。运行进程的用户和组)
<3>Cgroups: Cgroups技术针对进程,对各个容器实现硬件资源限制,比如CPU,Memory,diskio
2. docker 技术的优点相比较虚拟机
(1) 占用磁盘空间小:几十KB
(2) 启动速度快,几秒
(3) 直接运行到一个linux内核上,共享一个linux内核
(4) 并发的话,可以支持几百个上千个容器,性能接近于宿主机的进程
3. docker的应用场景
持续集成和持续部署、微服务架构使用、跑一次任务或者定时任务
二、docker内部架构
1. docker组成部分以及联系
(1)Docker 客户端(Client): Docker 客户端通过命令行与 Docker 主机的守护进程通信。
(2)Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
(3)Docker Registry