Docker
Docker作为一款流行的容器化技术,已成为现代软件开发、和布署流程中不可或缺的一部份。
Docker,其高效、轻量、可移植。。。等特点,彻底改变了应用程序的建立、分发和运行方法。
Docker构架
Docker构架有三个核心组件,如右图所示:
1.Docker镜像

Docker镜像,是Docker的核心建立块,它是一个只读的模板。
Docker镜像,包含了:运行应用程序所需的一切:操作系统、运行时环境、库、代码、配置文件…等。
镜像是创建容器的基础,容器从镜像加载内容。
如右图所示:
Docker镜像,可以被视为一个快照,它记录了某个特定时刻应用程序的状态。

一个镜像可以基于另一个镜像建立,产生层层叠加的镜像层,这促使镜像打造高效且节约储存空间。
Docker的镜像、和容器,采用分层结构储存,通过UnionFS实现。
但是,Docker镜像只读,多个镜像层…可以共享。
Docker库房
Docker库房,英语为:”DockerRegistry“qq linux,是一个储存、和分发Docker镜像的服务。
DockerHub是一个公共的镜像库房,类似于GitHub用于代码,它储存了大量的预建立镜像,便捷用户下载和使用。

用户也可以将自己打造的镜像推送到DockerHub,与别人共享。
用户通过dockerrun命令创建容器,DockerEngine会从镜像库房中找到相应的镜像,并基于该镜像创建一个新的容器。
这个过程包含创建容器文件系统、分配资源等操作。
Docker容器
容器(Container),容器是镜像的运行实例,它是一个隔离的运行环境。
Docker容器技术本质上:是一种资源隔离和控制的技术,它借鉴了沙盒的理念,将应用程序、及其依赖封装在一个独立的环境中。

Docker容器,可以简单地将它类比为一个集装箱(Container)docker dionaea,如右图所示:
Docker容器,拿来打包/和隔离应用程序的运行环境,致使它可以在不同的系统上实现一致的运行。
Docker容器,通过操作系统的内核功能(如:Linux的cgroups、和namespaces)。
命名空间:为容器提供了隔离的视图,包括:进程命名空间(PIDNamespace)、网络命名空间(NetNamespace)、用户命名空间(UserNamespace)、挂载命名空间(MountNamespace)和IPC命名空间(IPCNamespace)…等等。
每位命名空间都为容器提供了一个独立的资源视图,比如:容器中的进程ID在宿主机的视角下是不同的。

控制组限制了容器的资源使用,包括:CPU、内存、IO…等。
通过cgroups,可以限制容器的资源使用上限红旗linux官网,避免容器占用过多系统资源,因而保障系统的稳定性。
确保每位容器只访问自己的资源,而不影响其他容器或主机系统。
但是,拥有自己的文件系统、网络配置和进程空间,但共享宿主机内核。
其实,Docker通过巧妙地借助Linux内核的特点,实现了轻量级、可移植、可扩充的容器化技术。
Docker,改变了软件开发和布署的方法docker dionaea,极大的提升了效率。
