Docker:

云计算时代,虚拟化技术是整个信息技术的基石。虚拟化技术既可以通过硬件模拟也可以通过操作系统来实现。今年的容器虚拟化方案更加充分的利用了操作系统本身的已有机制和特征,Docker就是其中的佼佼者。

 

问题: 什么是Docker?, Docker跟虚拟化的关系? Docker跟Linux容器技术的密切联系?

Docker: 是基于Go语言实现的云开源项目,其目标是为了实现应用组件级别的“一次封装,到处运行”。即通过对应用组件的封装、分发、部署和运行等生命周期的管理,实现虚拟化应用(将计算机资源更加合理的分配给需要的所需的操作系统或应用程序)。上述的应用组件既可以是一个Web应用,也可以使一套数据库服务,甚至是一个操作系统或编译器。

 

Docker跟虚拟化的关系:为了降低应用组件环境配置的复杂性和部署、调试,及其在各种平台上迁移带来的低效性。Docker通过容器来打包应用,在迁移应用组件的时候只需要在新的服务器上启动所需的容器就可以了。一方面节约了时间,另一方面降低了部署过程中出现问题的风险。

高效地构建应用:需要开发者能方便地创建运行在云平台上的应用(脱离底层机器),同时必须是任何时间任何地点可以获取。而Docker满足这样一种创建分布式应用程序的方式。

Docker与虚拟机的比较:

 

虚拟化:在计算机技术中,虚拟化是一种资源管理技术,将计算机中的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构件的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。

虚拟化核心是对资源进行抽象,从而提高系统资源的利用率,同时降低成本、方便管理和容错容灾等好处。大体可以将其分为基于硬件的虚拟化技术(应用较少)和基于软件的虚拟化技术基于软件的虚拟化又可以分为应用虚拟化和平台虚拟化。

 

 

Docker跟Linux容器技术的密切联系:

Docker的引擎的基础是Linux容器技术(LXC)容器有效地将单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组中间平衡有冲突的资源使用需求。容器可以在核心CPU本地运行指令,不需要专门的解释机制,降低了复杂性。每个容器内运行一个应用,不同的容器相互隔离,容器之间也可以建立通信机制。

Docker镜像(Image):可理解为一个面向Docker引擎的只读模板,包含了文件系统。如:一个镜像可以只包含一个完整的操作系统环境,也可以安装了其他的应用程序。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像。

获取镜像:docker pull; 命令格式为:docker pull NAME[:TAG], TAG是版本号。默认是latest最新版本。

查看镜像信息:docker images (查看本地主机上已有的镜像)

可见的字段信息:来源于哪一个仓库、镜像的标签信息、镜像的ID(唯一标识了镜像)、创建的时间、镜像的大小。

为本地镜像添加新的标签:docker tag(镜像的指向一致,因为不同标签的镜像ID是完全一致的,只是别名不同)

获取镜像的详细信息:docker inspect, 返回的是JSON格式的消息,可以使用-f参数指定其中的一项内容(docker inspect -f {{要查看的内容}}) 镜像ID,可以使用若干个字符组成的可区分字串来代替完整的ID。

搜索镜像:docker search。可以搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像。用法为dockersearch TERM,包括的参数有镜像的名字、描述、星级(镜像受欢迎程度)、是否官方支持、是否自动创建。默认的输出结果将按照星级评价进行排序。

删除镜像:使用镜像的标签删除镜像,命令格式为:docker rmi IMAGE[IMAGE...], 其中IMAGE可以为标签或ID。当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签,并不影响镜像文件。但当镜像只剩下一个标签的时候,再使用docker rmi命令会彻底删除该镜像,会删除这个镜像文件的所有AUFS层。

*当使用docker rmi命令后面跟上镜像的ID时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

*注意:当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。如果想要强制删除镜像,可以使用-f参数,命令:docker rmi -f IMAGE.注:这里笔者不建议使用-f参数来强制删除一个存在容器依赖的镜像,因为会造成一些遗留问题。当使用docker images查看本地的镜像列表时,会发现一个标签为<none>的临时镜像,意味着原来被强制删除的镜像换了一个新的ID继续存在系统中。

docker ps -a 命令可以看到本机上存在的所有容器。

因此,在删除镜像时,先删除依赖该镜像的所有容器,再删除镜像。

创建镜像:有三种方法,基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。

  1. 基于已有镜像的容器创建:主要使用docker commit命令,docker commit [OPTIONS]
    CONTAINER [REPOSITORY[:TAG]],主要选项包括:-a作者信息;-m提交消息;-p提交时暂停容器运行。
  2. 基于本地模板导入:直接从一个操作系统文件导入一个镜像。推荐使用OpenVZ提供的模板,例如:笔者下载了一个ubuntu-14.04的模板压缩包,可以使用以下命令导入:
    $ sudo cat ubuntu-14.04-x86_64-minimal.tar.gz  |docker import - ubuntu:14.04
    存出和载入镜像可以使用docker save和docker load命令来存出(存出到本地文件)和载入镜像(从本地文件中导入到本地镜像库)。
    存出:$ sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
    载入:$ sudo docker load < ubuntu_14.04.tar
    上传镜像:docker push命令上传镜像到仓库,默认上传到DockerHub官方仓库,命令格式:docker push NAME[:TAG]
Logo

更多推荐