《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——1.2 了解容器的组成

1.2 了解容器的组成

Docker是Docker项目开发的一种容器格式。docker命令能够运行、停止、启动、调查容器,还能操纵容器。docker命令也可以作为服务守护进程运行,处理管理Docker容器的请求。默认情况下,这个Docker服务会从Docker Hub Registry获取你请求的镜像。虽然你无需知道更多就可以开始使用,但接下来会依次给出一些额外的信息。

1.2.1 Docker项目
Docker项目为Docker开发提供了一个中心。它将Docker称为“一个针对分布式应用开发者和系统管理员的开放平台”,旨在简化应用程序的开发和分发。

Solomon Hykes是Docker的创始人和CTO。他将Docker要在软件行业做的事情与物理集装箱为航运业所做的事情进行了对比。无论是运输汽车、圆桶、箱子,还是运输钢琴,只要使用标准的集装箱来运输这些不同类型的物品,用来运送和处理它们的工具也可以被标准化。

因此,就其核心而言,Docker项目提供了一种软件容器的格式并创建了一个专为使用该格式的软件而搭建的简单的基础设施。随着项目的进行,它开始超出其最初所关注的稳定Docker格式以及提供工具来管理单个容器。

如今,Docker项目正将其范围扩展至包含配置与编排工具,来帮助人们部署和管理成组的容器。该项目还研究管理计算资源的方式,并提供高可用性的方式来帮助运行Docker容器。随着这些工具变得可用,它们将不得不与谷歌和Red Hat这样的公司正开发的更成熟的容器编排工具(包括本书涵盖的Kubernetes项目的工具)正面交锋。

然而,目前Docker项目的最大成就是Docker容器格式、管理单个容器的工具,以及在Docker客户端和registry之间拉取和推送Docker容器镜像的能力。Docker项目管理的中央registry被称为Docker Hub Registry。

1.2.2 Docker Hub Registry
Docker Hub Registry提供了个人与组织保存和开发其Docker容器镜像的地方。当你的Linux系统上安装了Docker的时候,如果你请求的Docker容器镜像尚未在你的系统中,默认情况下Docker会查看Docker Hub Registry。

图1-1展示了Docker Hub Registry页面。

图1-1 Docker Hub Registry保存了数以千计的Docker镜像

通过注册Docker用户账号,你可以拥有自己的Docker repository,你可以把Docker容器镜像推送到这里。之后,只要连接了因特网,你就可以从任何运行Docker的系统拉取这些镜像。

Linux发行版和应用项目在Docker Hub Registry上有官方的repository。除了Docker容器镜像本身,多数情况下,你也能在Docker Hub Registry上查找使用这些镜像的说明以及用来构建这些镜像的Dockerfile文件。对于不想公开共享的容器镜像,也有办法创建你自己的Docker Registry,你可以用它来私密地保存镜像或者直接从Docker项目购买安全的容器存储空间。

你也许注意到,当描述Docker存储和传输软件所用的格式时,会出现“镜像”和“容器”这样的词。当使用Docker时,理解镜像和容器之间的差别是非常关键的。

1.2.3 Docker镜像和容器
容器化的目的是将应用程序运行需要的所有组件集合在一个单一而独立的单元中。对于Docker而言,这个单元被称作Docker镜像。镜像之中是容器要运行的应用程序以及应用程序执行所需的库、配置文件、可执行程序或者其他组件。

镜像是一个静态单元,它要么在repository中,要么在安装了Docker的本地文件系统中,并等着被运行。与将Docker镜像存储到repository中不同,将Docker镜像保存到文件系统时,它会被保存为一个tarball文件。这个tarball可以像其他文件那样传输,之后可以在运行Docker的本地系统上被导入并作为容器运行。

像Red Hat Enterprise Linux、Ubuntu、Fedora和CentOS这样的主要Linux发行版都提供了官方的基础镜像,你可以使用它们构建自己的Docker镜像。即使不是程序员,也可以获取基础镜像、向其中添加现有应用程序并将其制作为自己的镜像。要做到这一点只需创建Dockerfile并在其上运行docker build命令。

Docker容器这个术语指的是Docker镜像的运行实例,或者更为准确地说,是一个已运行的镜像的实例,因为它此刻可能正在运行、暂停或者已经停止。开始使用Docker时,镜像和容器之间的区别非常关键。需要理解这个区别的原因在于,处理镜像和处理容器有着不同的命令。

例如,当要查看本地系统的镜像列表时,要输入docker images;要查看正在运行的容器列表,要输入docker ps(或是docker ps -a,查看不再运行但还保存在你的系统中的容器的列表)。

想从镜像运行容器,要用docker run命令。想停止正在运行的容器,要用docker stop命令。在容器停止后,可以使用docker start命令再次启动已停止的容器。只是要暂停容器中的所有进程,要用docker pause命令。之后输入docker unpause来再次启动已暂停的容器。谨记,docker run从原始镜像运行一个新容器,而docker start从容器被停止时的状态重新启动一个容器(例如,你添加的软件或修改的文件还在那儿)。

当使用容器时,你会注意到所有给出的示例都有一个共同点。它们中的每一个都要使用docker命令来调用。

1.2.4 docker命令
docker命令是你与Docker容器和镜像直接打交道所使用的主要命令。实际上,在Docker软件的一些软件包中,docker``只是为数不多的几个可执行命令之一。

一旦按第2章的描述安装了Docker软件,只要启动Docker服务就能开始使用docker命令。docker命令内置的一个不错的特性是Tab自动补全(如果你是从默认的bash shell运行Docker的话)。因此,一旦Docker服务运行起来,你就可以作为root用户输入docker,紧跟着按下两次Tab键来查看可用的docker子命令:

# docker <Tab><Tab>
attach   exec      inspect  port     rmi      tag
build    export    kill     ps       run      top
commit   help      load     pull     save     unpause
cp       history   login    push     search   version
create   images    logout   rename   start    wait
diff     import    logs     restart  stats
events   info      pause    rm       stop

因为本书第二部分的多数章节专门讲授docker如何与这些子命令一起使用,所以我不会花太多时间展示它们都是如何工作的。相反,我会概述能用它们做什么。

查找Docker组件的信息:使用docker version展示Docker特性的版本信息。使用docker info查看运行Docker的系统的信息。docker help查看可以与docker命令一起使用的命令和选项。使用docker history展示镜像的历史。使用docker inspect查看镜像或容器的信息。使用docker port列出容器的端口映射。
操作正在运行的容器:使用docker ps列出正在运行的容器。使用docker attach将另一个命令附加到正在运行的容器上。使用docker exec在正在运行的容器中执行命令。使用docker inspect审查容器的元数据。使用docker cp从容器向宿主机系统复制文件。使用docker diff检查容器从启动后其文件系统所做的改变。
操作镜像:使用docker images列出系统上的镜像。使用docker run运行镜像。使用docker pull从registry向本地系统拉取镜像。使用docker push将镜像推送到registry中。使用docker save将镜像保存为tarball。使用docker load从tarball文件加载本地镜像。使用docker export从容器中将文件系统导出成本地系统的tarball文件。
操作Docker registry:使用docker search在registry中搜索镜像。使用docker login登录到Docker Hub Registry(你就能用自己的账号来推送和拉取镜像)。使用docker logout从Docker Hub Registry登出。
修改现存的镜像:使用docker tag为镜像添加一个名字。使用docker rename修改镜像的名字。
修改容器的状态:使用docker stop停止正在运行的容器。使用docker start启动一个已经停止的容器。使用docker pause暂停容器。使用docker unpause重新启动一个已经暂停的镜像。使用docker kill向容器发送kill信号或其他信号。使用docker restart停止并重新启动容器。
查看Docker的活动:使用docker events查看Docker服务器的事件。使用docker top查看容器的进程活动。使用docker logs查看由容器产生的日志消息。使用docker stats查看容器的CPU和内存使用统计。使用docker wait查看容器直到它停止,然后打印它的退出代码。
创建镜像和容器:使用docker build从头构建镜像。使用docker commit从容器创建镜像。使用docker create从镜像创建容器但不运行它。使用docker import将文件系统导入镜像中。
删除容器和镜像:使用docker rm删除已停止的容器。使用docker rmi删除镜像。
尽管Docker是专为帮你以最少的麻烦让容器运行起来而设计的,本书在这里会指导你完成Docker的初次体验,并指出你可能无法自己发现的有趣特性。之后,本书会带你进入Docker中一些很少被绘制的水域——与多容器的部署和管理相关。换句话说,本书为你提供了一种方法来进行Docker探险。

时间: 2024-09-13 12:33:16

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——1.2 了解容器的组成的相关文章

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——第2章 搭建容器运行时环境 2.1标准Linux系统的Docker配置

第2章 搭建容器运行时环境 自构建之初,Docker就运行在Linux之上.但与虚拟机不同,虚拟机包含了整个操作系统,而容器本身只是依靠单独的操作系统为其提供运行环境.这就是说,我们有诸多可选的方式来创建Docker的工作环境.具体方式包括以下这些. 标准Linux:多个主要的Linux发行版已将Docker打包在其中.如需最新的Docker特性,只要安装相应Linux发行版的最新版本即可.切记,Docker与操作系统有着密切的联系,因此,Linux的早期版本可能并不包含Docker运行所需的全

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——第1章 使用Docker对应用进行容器化 1.1了解容器化应用的优缺点

第1章 使用Docker对应用进行容器化 Docker为应用程序的打包和运行提供了一种优雅的方式.使用喜欢的Linux系统,几分钟之内就能将Docker安装好并作为服务运行起来.构建.运行.停止.启动.调查.修改或者用其他的方式操作容器非常容易,说实话,很棒. Docker的简单易用使其成为当今最流行的开源项目之一.但是作为数据中心容器化核心的Docker却引起了极大的震动,其潜力无异于重新发明了个人和公司(或大或小)创建.测试.部署和管理其最关键应用程序的方式. 使用容器化技术也可以让应用程序

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——2.2 容器式Linux系统的Docker配置

2.2 容器式Linux系统的Docker配置 我们使应用程序容器化,不遗余力地使其变小和变高效,但如果最终要将这些容器部署到缓慢.臃肿的操作系统中,那将使一切努力失去意义.在不断演进的容器模型中,既然容器已包含运行应用程序所需的可执行文件.库以及其他组件,宿主操作系统完全可以简化到只保留运行容器所需的功能. Project Atomic和CoreOS这两个项目的目标是提供专为运行容器而优化的操作系统.这样的操作系统既能够直接运行在硬件上,也能运行在公有云(如亚马逊的EC2或者Google Co

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——2.3 小结

2.3 小结 多种不同的Linux系统都提供了Docker.除了使用标准Linux系统(如Ubuntu.Fedora.Red Hat Enterprise Linux或者CentOS)来运行Docker外,还有专门用于容器部署的特定Linux系统.通过虚拟机运行这些系统,也可以在Microsoft Windows或者Mac OS X上使用Docker. 本章介绍了配置Ubuntu.Fedora和Red Hat Enterprise Linux系统的方法,以便为运行Docker做好准备.本章还介绍

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——1.4 小结

1.4 小结 通过将应用程序(以及应用程序运行所需要的全部东西)与运行该应用程序的宿主机解耦,Docker容器提供了一种简单.优雅的应用程序部署和运行方式.较之于将应用程序直接安装在宿主机上所获得的灵活性,Docker容器能够提供更大的使用灵活性.而且,与虚拟机相比,Docker容器对系统资源(如CPU使用.内存消耗以及磁盘空间使用)的要求很少. 本章描述了构成Docker的不同组件.这些组件由Docker项目管理,包括Docker Hub Registry(它保存Docker镜像).Docke

Docker Swarm和Kubernetes在大规模集群中的性能比较

本文讲的是Docker Swarm和Kubernetes在大规模集群中的性能比较,[编者的话]本文建立了一套通用测评工具,通过容器启动时延等指标测评Swarm和Kubernetes在大规模部署下的性能表现,分析结果认为Swarm比Kubernetes的性能好.此外还提供了详尽的测试数据, 供应用者参考. 这篇文章主要针对Docker Swarm和Kubernetes在大规模部署的条件下的3个问题展开讨论.在大规模部署下,它们的性能如何?它们是否可以被批量操作?需要采取何种措施来支持他们的大规模部

如何利用Kubernetes编排实现Node.js程序的微服务化

前言 本文着重介绍了微服务架构的某些细节,微服务其实也适用于Node.js应用程序.本文还介绍了如何利用容器和编排来实现Node.js的微服务化. 如今,大家都在谈论调度,微服务,Docker,以及Kubernetes如何改变编排领域.那么,在生产中部署Node.js应用程序意味着什么?有哪些是值得关注的? Node.js微服务化 为了理解为什么每个人都想谈论微服务,我们需要了解应用程序开发的前身--The Monolith. 单体应用 如果你的应用程序是单体应用形式的,那么系统的所有代码都在一

Docker -- 2 -- 利用docker部署网站和数据库

在Docker – 系统整洁之道 – 1中已经对Docker的一些命令和Docker镜像的使用及操作做了记录. 这次就利用docker进行一次真正的实例使用,使用docker搭建一个简单的答题系统,这个系统是当时做来给网络安全周做手机答题的系统,很简单,代码风格很差. 这篇主要记录了三种docker使用的方式. 用supervisor方式运行一个多进程的docker实例 创建一个ngnix和php运行的环境 创建一个ngnix,php,mysql集合运行的环境,使用docker-compose构

为什么微软应该通过收购Docker来与Kubernetes竞争

前言 Docker自今年4月Dockercon以来,都在对外宣称一件事:Docker已正式布局企业级服务,要利用已有的资源实现自身盈利需求.虽然Docker自有其扩展的优势,但从市场的另一端来看,Google在这方面则表现更强势.Kubernetes有Google的强大靠山,而Docker也不会孤军奋战,目前看来,Docker和微软的结合有可能给容器市场带来更多活力:Docker需要盈利,微软则需要Docker来与Google竞争. 目前看来,Kubnernetes的胜利姿态最终傲视了容器编排这