docker入门理解
Docker 特征
Docker有不少有趣的功能,通过本教程相信你会更好地理解它们。Docker的特性主要包括以下几点:
- 速度飞快以及优雅的隔离框架
- 物美价廉
- CPU/内存的低消耗
- 快速开/关机
- 跨云计算基础构架
Docker 组件与元素
Docker有三个组件和三个基本元素,读者可以快速浏览下面这个视频来了解这些组建和元素,以及它们的关系。三个组件分别是:
Docker Client
是用户界面,它支持用户与Docker Daemon之间通信。Docker Daemon
运行于主机上,处理服务请求。Docker Index
是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份。
三个基本要素分别是:
Docker Containers
负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。Docker Images
是一个只读模板,用来运行Docker容器。DockerFile
是文件指令集,用来说明如何自动创建Docker镜像。
在讨论Docker组件和基本要素如何交互之前,让我们来谈谈Docker的支柱。Docker使用以下操作系统的功能来提高容器技术效率:
Namespaces
充当隔离的第一级。确保一个容器中运行一个进程而且不能看到或影响容器外的其它进程。Control Groups
是LXC的重要组成部分,具有资源核算与限制的关键功能。UnionFS
(文件系统)作为容器的构建块。为了支持Docker的轻量级以及速度快的特性,它创建了用户层。
如何把它们放在一起
运行任何应用程序,都需要连个基本步骤:
- 构建一个镜像
- 运行容器
这些步骤都是从Docker Client
得命令开始得。Docker Client
使用得是Docker二进制文件,在基础层面上,Docker Client
会告诉Docker Daemon
需要创建得镜像以及需要在容器中运行得命令。当Daemon接收到创建镜像得信号后,会进行如下操作:
第一步:构建镜像
如前所述, Docker Image
是一个构建容器得只读模板,它包含了容器启动所需得信息,包括运行称故乡和配置数据。每个镜像都源于一个基本得镜像,然后根据Dockerfile中得指令创建模板,对于每个指令,在镜像上创建一个新得层面。
一旦镜像创建完成,就可以将它们推送到中央registry:Docker Index
,以供他人使用。然而,Docker Index
为镜像提供了两个级别的访问权限:公有访问和私有访问。你可以将镜像存储在私有仓库,Docker官网有私有仓库的套餐可以供你选择。总之,公有仓库是可搜索和可重复使用的,而私有仓库只能给那些拥有访问权限的成员使用。Docker Client
可用于Docker Index
内的镜像搜索。
第二步:运行容器
运行容器源于我们在第一步中创建的镜像。当容器被启动后,一个读写层会被添加到镜像的顶层。当分配到合适的网络和IP地址后,需要的应用程序就可以在容器中运行了。
如果你还是不太理解,先别急,在接下来的内容中我们将会和你分享很多的实战案例。
目前为止,我们已经介绍了Docker的基本概念,接下来,让我们一起安装Docker!
docker中容器和镜像的理解
docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository);
如下图所示,容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。
docker 的镜像概念类似虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。( docker create <image -id > :为指定的镜像添加一个可读写层,构成一个新的容器;)
例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了mysql或用户需要的其他应用程序。
docker镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称为UnionFS( Union file system 统一文件系统),镜像可以基于dockerfile构建,dockerfile是一个描述文件,里面包含了若干条密令,每条命令都会对基础文件系统创建新的层次结构。
docker提供了一个很简单的机制来创建镜像或更新现有的镜像。用户甚至可以从其他人那里下载一个已经做好的镜像直接使用。(镜像是只读的,可以理解为静态文件)
docker利用容器来运行应用:docker容器是由docker镜像创建的运行实例。docker容器类似虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需的依赖文件。可以把容器看作一个简易版的linux环境(包含root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
相对于镜像来说容器是动态的,容器在启动的时候创建了一层可写层次作为最上层。( docker create <image -id > :为指定的镜像添加一个可读写层,构成一个新的容器;)
docker仓库:如果使用了git和github就很容易理解docker的仓库概念。docker仓库概念和git类似。
docker仓库是用来包含镜像的位置,docker提供了一个注册服务器(register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像,
docker运作中使用的默认仓库是docker hub公共仓库。
仓库支持的操作类似git,当用户创建了自己的镜像之后就可以使用push命令将它上传到共有或者私有的仓库。这样下次再另外一台机器上使用这个镜像的时候只需要从仓库里面pull下来就可以了。
docker 容器=镜像+可读层
docker create <image -id > :为指定的镜像添加一个可读写层,构成一个新的容器;
docker start <container -id > :docker start 命令为容器文件系统创建一个进程的隔离空间。注意,每一个容器只能够有一个进行隔离空间;(运行容器)
docker run < image -id>: 这个是先利用镜像创建一个容器,然后运行了这个容器;
docker stop <container -id >停止所用的进程;
docker kill <container -id > :向所用运行在容器的进行发送一个不友好的sigkill信号;
docker pause <container-id>: 将运行中的进程空间暂停
docker rm <container -id> :docker rm命令会移除构成容器的可读写层。注意,这个命令只能对非运行态容器执行。
docker rmi 命令会移除构成镜像的一个只读层。你只能够使用docker rmi来移除最顶层(top level layer)(也可以说是镜像),你也可以使 用-f 参数来强制删除中间的只读层。
docker commit <container-id>:docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。
docker save <image-id>:docker save命令会创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用。和export命令不同,这个命令为每一个层都保存了它们的元数据。这个命令只能对镜像生效。
docker export <container-id>:docker export命令创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容(译者注:expoxt后 的容器再import到Docker中,通过docker images –tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像)。
docker history <image-id>:docker history命令递归地输出指定镜像的历史镜像。
docker ps 会列出所有运行中的容器; docker ps -a 列出运行中和未运行的容器;
docker images -a 列出所用的镜像,也可以说列出所用的可读层