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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Linux发行版和应用项目在Docker Hub Registry上有官方的repository。除了Docker容器镜像本身,多数情况下,你也能在Docker Hub Registry上查找使用这些镜像的说明以及用来构建这些镜像的Dockerfile文件。

本节书摘来自异步社区《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》一书中的第1章,第1.2节,作者: 【美】Christopher Negus(克里斯托弗•尼格斯)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

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页面。

screenshot

图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探险。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
16 3
|
6天前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
6天前
|
存储 运维 Kubernetes
容器服务ACK常见问题之容器服务ACK 淘宝源过期了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
7天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
7天前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。
|
2天前
|
运维 Kubernetes 监控
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在当今云计算时代,企业追求敏捷性、可扩展性以及成本效益的云基础设施。本文将探讨如何通过DevOps文化与容器化技术的融合,打造一个既高效又稳定的运维环境。文章不仅阐述了DevOps和容器化技术各自的优势,还提供了一个具体的实施案例,展示了这种结合如何优化资源利用、提高部署速度并降低运维复杂性。
|
3天前
|
Kubernetes Java Nacos
nacos常见问题之k8s上部署需要自动扩缩容如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
21 0
|
5天前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
6天前
|
存储 Kubernetes 监控
容器服务ACK常见问题之容器服务ACK启动时readiness告警如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
6天前
|
存储 监控 Kubernetes
容器服务ACK常见问题之cmonitor-agent容器一直没起来如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。

相关产品

  • 容器服务Kubernetes版