docker入门基础知识
1.docker五种存储驱动
AUFS、Btrfs、Device mapper、OverlayFS、ZFS
2.docker compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具
3.Docker网络模式
host模式:–net=host 容器和宿主机共享Network namespace。
container模式 :–net=container:NAME_or_ID 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。
none模式: –net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式 :–net=bridge (默认为该模式)
4.docker将数据从宿主机挂载到容器中的三种方式
volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用 tmpfs,同时避免写入容器可写层提高性能
5.docker技术三大要点
CGroups :资源限制
全称control group,用来限定一个进程的资源使用,由Linux 内核支持,可以限制和隔离Linux进程组 (process groups) 所使用的物理资源 ,比如cpu,内存,磁盘和网络IO,是Linux container技术的物理基础。
namespace:资源隔离
另一个维度的资源隔离技术,大家可以把这个概念和我们熟悉的C++和Java里的namespace相对照。
如果CGroup设计出来的目的是为了隔离上面描述的物理资源,那么namespace则用来隔离PID(进程ID),IPC,Network等系统资源。
我们现在可以将它们分配给特定的Namespace,每个Namespace里面的资源对其他Namespace都是透明的。
不同container内的进程属于不同的Namespace,彼此透明,互不干扰。
unionFS:
顾名思义,unionFS可以把文件系统上多个目录(也叫分支)内容联合挂载到同一个目录下,而目录的物理位置是分开的。
6.docker架构组件
Docker Client and Daemon(docker egine docker 引擎):docker和dockerd 组成了docker engine
Containerd(容器):docker对容器的管理和操作基本 都是通过 containerd 来完成的,containerd 提供核心容器服务的接口 标准,上层的容器化应用平台将直接使 用 containerd 提供的接口。
Containerd-shim:它是 containerd 的组件,是容器的运 行时载体,我们在 docker 宿主机上看 到的 shim 也正是代表着一个个通过调 用 containerd 启动的 docker 容器。
RunC:RunC 是一个轻量级的工具,它是用来运行容器的,且只做这一件事。
7.docker swarm
Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker
Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。
详细信息参考: