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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
5天前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
129 15
|
6天前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
39 23
|
10天前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
11天前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 22
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
225 93

相关产品

  • 容器服务Kubernetes版