简介
此检查点旨在帮助您评估您从我们的容器介绍文章中学到的内容,其中我们介绍了容器生态系统以及Docker和Kubernetes,两种常见的容器解决方案。您可以使用此检查点来评估您对这些主题的了解,查看关键术语和命令,并查找继续学习的资源。
容器化是在操作系统级别隔离开发环境以创建可移植运行时环境的过程。Containers从主机共享资源,使您能够在可预测和受控的环境中运行应用程序。使用容器来抽象基础架构并隔离应用程序,可以让您高效且一致地扩展开发流程和测试。
在这个检查点中,你会发现两个部分综合了介绍性文章的中心思想:一个部分总结了容器生态系统的目的,另一个部分介绍了运行命令,每个部分分别包括Docker和Kubernetes特定的小节。在每个部分中,都有互动组件来帮助您测试您的知识。在这个检查点结束时,您将找到继续学习容器的机会。
资源
- Containers简介
- 如何在Ubuntu 22.04上安装和使用Docker
- 如何在Ubuntu 22.04上安装和使用Docker Compose
- 如何使用Docker EXEC在Docker Container中运行命令
- 如何在Ubuntu 22.04上的Docker容器之间共享数据
- 如何在Ubuntu 20.04上设置私有Docker注册表
- Kubernetes简介
- 如何使用Minikube进行本地Kubernetes开发和Testing
什么是容器?
Containers为开发您的应用程序提供了一个可预测且可控的环境。容器引擎是人们在提到容器时通常所指的意思。
要了解容器,熟悉几个关键的容器化工具很重要。
<$>[信息] [标签集装箱化术语要了解 ] 定义以下每个术语,然后使用下拉功能检查您的工作。
[详细信息容器引擎 容器引擎是一个完整的容器化解决方案,引擎包括容器、容器运行时、容器镜像和构建它们的工具。该引擎还可能包括容器图像注册表和容器编排。Docker是部署最多的容器引擎之一。 ]
[详细信息容器图像 A_CONTAINER IMAGE_是为在容器内构建环境而提供的模板。当镜像运行时,镜像的只读层被覆盖在读写层上,读写层可以在单个容器实例中调整。
A_IMAGE REGISTRY_是保存容器镜像的存储库。您可以使用镜像注册表或存储库来管理和共享您的容器镜像。 ]
[详细信息容器运行时 _Container Runtime_管理容器的启动和执行。有两组集装箱运行时:开放集装箱倡议(保监局)和集装箱运行时倡议。
《开放集装箱倡议》提供了集装箱格式的规范和标准。OCI为容器的运行提供了一个基线,例如常用的runc
。
Container Runtime Initiative侧重于容器编排。 ]
[详细容器业务流程 编排涉及供应、配置、伸缩、调度、部署、监控等,通常用于自动化容器部署。 ] <$>
由于其可移植性和可预测的性能,许多开发人员更喜欢容器化。通过抽象基础设施,可以在多台机器上以完全相同的方式测试应用程序。基线环境中的这种稳定性使开发人员能够远程协作工作。
<$>[信息] [标签检查自己 ] [详细说明使用容器时的一些常见目标是什么? 为了确保强大的开发和生产环境,您可能需要满足以下需求:
- 可预测和可移植的性能
- 使用效率和内存效率
- 具有持久数据选项的无状态
- 具备集群联网能力的隔离容器
- 记录容器测试期间的错误和输出
- 应用和基础设施脱钩
- 专业化和微服务
` <$>
当容器从相同的基本映像创建时,它们提供了一个可靠的环境,可以满足您的开发和测试需求。这种一致性使您能够在应用程序开发期间根据需要创建和销毁容器。
如果您正在处理一个需要在容器中持久化数据的长期项目,您可以挂载一个卷来持久化数据存储和跨容器的数据共享。
Kubernetes 和** Docker** 是两种常见的容器解决方案。在下面的部分中,您可以通过使用介绍性文章中的这两个选项来评估您对它们之间的差异了解到了什么。
<$>[信息] [标签检查自己 ] [详细信息:Docker和Kubernetes有什么不同? Docker是一种容器引擎,最常用于一次运行一个或两个容器化应用程序。
Kubernetes是一款编排软件,可以让您大规模运行多个重叠的容器。Kubernetes最初使用Docker运行时,但现在主要使用Containerd抽象层。 ] <$>
什么是Docker?
使用Docker,,您可以在容器中管理应用程序进程。Docker通常用作容器引擎,可以在多种操作系统上运行。
您可以通过映射端口或允许Docker选择一个随机的(可能未使用的)端口来将Docker容器映射到主机上。这个过程简化了您的测试环境。有关使用Docker的更多信息,您可以查看Docker生态系统:通用组件介绍。
Docker使用特定的术语来支持其系统设置。使用Docker术语评估您的知识,以了解:
<$>[信息] [label Docker术语须知 ] 定义以下每个术语,然后使用工具栏功能检查您的工作。
[详细信息Docker编写 Docker Compose是一个命令行工具,允许您运行Yaml文件定义的多容器应用程序环境。YAML配置文件将定义设置,通常包括Web服务器环境、端口重定向和共享卷。 ]
[详细信息Docker Hub Docker Hub是由Docker项目背后的公司Docker管理的一个特定的_镜像注册表_。 ]
[详细信息Docker图像 A_DOKER IMAGE_是构建容器的模板。有许多常见的图像可供使用。 ]
[详细信息Docker卷 Docker Volume可用于跨容器持久化数据,包括停止或删除的容器。 ]
[详细信息群 DOCKER群模式是一种集群管理方式,称为_群_。SwarmKit是一款内置在GO中的开源编排工具包,可用于集群模式。
这与之前的Docker Swarm工具不同,后者现在被称为Swarm Classic,指的是Docker现在存档的原生集群。Swarm Classic是大规模集群的一种选择。 ]
<$>
Docker容器提供了一个可移植的、一致的运行时环境,通常可以部署到Kubernetes集群。
什么是Kubernetes?
使用Kubernetes,您可以跨机器集群运行和管理容器化应用程序和服务。Kubernetes经常用于扩展容器化需求。
Kubernetes使用特定的术语来支持其系统设置。用库伯内斯术语评估你的知识,以了解:
<$>[信息] [LabelKubernetes Terms to Know ] 定义以下每个术语,然后使用下拉功能检查您的工作。
[详细部署 A部署是使用复制集进行周期管理的Kubernetes工作负载。
复制集用于管理Pod,这与定义用于扩展复制Pod的Pod模板的Replication控制器非常相似。 ]
[详细信息节点 集群中的服务器是_Nodes_,其中一个服务器充当集群的_Control Plane_,其他服务器充当_Worker Nodes_。每个节点都包括一个容器运行时,用于管理该节点上容器中的应用程序和服务。 ]
[详情] Pod 作为单个应用程序控制的容器被分组为_pod_。Pod由_replication controller_或_replication set_创建。 ] <$>
您的Kubernetes集群由一个中央服务器和节点组成,包括帮助集群功能和服务器相互通信的特定组件。有关Kubernetes架构的更详细的描述,您可以查看Kubernetes.简介
为了促进集群中服务器的联网配置,Kubernetes需要控制平面上的特定组件,这些组件也可以跨节点访问,包括:
- 可以跨节点分布的键值存储,如
etcd
. - 配置工作负载和发送命令的API服务器(
kube-apiserver
)。 - 管理工作负载、执行任务、调整集群的控制器管理器(
kube-控制器-Manager
)。 - 将工作负载分配到特定节点的调度器(
kube-Scheduler
)。 - 代表集群与云提供商、云资源、云服务进行交互的云控制器(
Cloud-control-Manager
)。
节点还需要特定的组件来与中央服务器通信并运行为其分配的工作负载,包括:
- 每个节点上有一个容器运行时,如docker或
runc
. - 类似
kubelet
的通信服务往返于控制面;kubelet
使用a_MANIFEST_来定义它接收到的工作负载,并管理节点的工作状态。 - 将请求转发到容器的小代理,最常见的是
kube-proxy
。
Docker和Kubernetes都有命令行工具,每个都有自己的语法。您还可以使用Docker Desktop或Kubernetes仪表板在部署时通过Web浏览器访问来管理容器。
使用命令行
您开始使用linux命令line和我们的介绍性文章Cloud servers,Configuring a Web Server With][有关Web服务器solutions](https://www.digitalocean.com/community/tutorial_series/getting-started-with-cloud-computing Web-Servers),的文章并使用databases.上的文章]管理您的数据库
在容器简介中,您已经通过以下命令继续熟悉命令行:
cat
显示一个文件。chmod
使用新工具设置权限。curl
以指定位置(URL)传输数据。echo
显示作为参数传递的字符串。env
打印所有环境变量。exit
关闭Docker shell。mkdir
创建新目录。pwd
打印当前工作目录。systemctl
管理Docker守护进程。tail
打印文件的最后10行。watch
一致地运行特定命令(默认情况下每两秒一次)。- whoami打印当前用户的用户名。
您还使用了针对不同容器引擎的唯一命令语法,并使用Homebrew包管理器)为您的Kubernetes集群安装了mini kube
。在下面的部分中,您将回顾在Docker和Kubernetes的介绍性文章中运行的命令。
运行Docker命令
在介绍Docker的文章中,您在Ubuntu服务器上安装和管理了Docker容器。默认情况下,docker
command只能由超级用户、前置sudo
权限或docker
组中的用户运行。
您使用docker
命令将选项、子命令和参数传递给您的Docker容器:
docker exec
用于在主动容器中运行命令,使用--workdir
标志指定应该在哪个目录中运行命令,--user
标志用于以不同用户身份运行命令,-e
标志用于将环境变量传入容器或--env-file
标志用于指定.env
文件。Docker Images
查看您已下载到系统中的镜像。docker info
以访问系统范围的信息。docker ps
查看您系统上运行的活动容器,使用-a
开关查看所有活动容器和非活动容器,使用-l
开关查看您创建的最新容器。docker rename
重命名您的容器。docker rm
与容器ID或名称一起移除容器。docker run
从指定镜像启动容器,使用组合的-it
开关进行交互外壳访问。docker earch
搜索Docker Hub上可用的镜像,docker Pull
从注册表下载指定的镜像。docker start
与容器ID或名称一起启动停止的容器。docker stop
,带有容器ID或名称,用于停止正在运行的容器。docker tag
对创建的镜像进行重命名。扩展坞卷
管理您的数据量。
<$>[信息] [标签检查自己 ] 使用下拉菜单功能获取答案。
[详细说明docker
和docker exec
命令有什么区别?
docker exec
命令用于运行程序并检查当前正在运行的容器,而您可以运行docker run
来创建新的容器。
]
[详细说明什么是Dockerfile
?
您可以使用docker Build
命令使用Dockerfile
构建镜像,尽管您在这些介绍性文章中没有运行该命令。Dockerfile
用于构建镜像,而使用docker pose
运行YAML配置文件将管理编排。
]
<$>
您还使用了--hel
选项来访问各种子命令可用的选项,例如以下开关:
--名称
为容器命名。--rm
创建一个容器,容器在停止时会自动移除。-d
会将容器从终端分离出来,在后台运行。-v
通过命名来管理您的Docker卷或创建绑定挂载(指定/
或~/
时)。
Docker还提供了Docker Compose命令行界面工具),用于管理多容器环境。您设置了一个YAML配置文件来创建一个具有端口重定向和共享卷的Web服务器环境,并运行了以下命令来管理您的容器:
docker compose up
运行集装化环境。docker compose ps
提供运行容器和端口重定向的相关信息。docker compose logs
访问您容器的日志。docker compose pause
暂停容器,docker compose unpause
恢复容器。docker compose stop
会停止容器。docker compose down
移除与环境关联的容器、网络和卷。
<$>[信息] [标签检查自己 ] 使用下拉菜单功能获取答案。
[详细说明使用docker
命令和运行docker pose
有什么主要区别?
docker
命令运行命令行中的所有子命令,而docker pose
运行一个YAML文件,以提供可用于多个容器环境的配置数据。以docker pose
开头的容器也可以共享网络和数据量。
]
是什么让Docker Compose成为一个有用的工具?
当你有一个更大的部署,有多个容器并行运行时,你可以编写一个YAML文件来设置容器配置,并运行docker compose
来向所有组件发出命令并将它们作为一个组进行控制。因此,docker compose
可以帮助您随着应用程序的增长以及您需要强大的编排设置来扩展容器管理。
]
<$>
要使用您的私有Docker Registry和Docker Hub]管理您的镜像,您可以运行以下命令:
docker login
,使用您的用户名的-u
开关登录。docker formation
提交新的docker镜像,其中-m
开关提供提交消息,-a
开关指定作者。对接推送
,推送您的镜像,包括推送到您自己的库中。对接拉取
,将您的镜像拉到新机器上。
对于持久化数据,您还可以设置Docker Volume.您已将docker volume
命令与create
子命令配合使用来创建新卷,使用spect
子命令来验证系统上的卷,使用ls
子命令来列出卷,并在卷名后附加:ro
以获得只读权限。接下来,您可以在Docker容器和host.之间共享数据
Docker是一种常见的容器引擎;Kubernetes是一个可以运行Docker容器引擎的编排平台。
运行Kubernetes命令
在介绍Kubernetes的文章中,您运行了带有Docker框架的mini kube
工具来模拟在单台机器上运行的Kubernetes集群,从而可以访问您的Kubernetes集群的浏览器仪表板。
您运行了以下mini kube
命令:
mini kube start
启动工具,开启kubectl
,可选择使用-p
或--profile
选项指定集群。mini kube dashboard
通过自动端口转发访问Kubernetes仪表板,使用--url
选项帮助通过SSH隧道从远程服务器转发端口。mini kube服务
,带有指定的服务和--url
选项,用于检索正在运行的服务的URL。mini kube配置
通过set ememory
、get profile
等子命令管理您的集群。mini kube Delete
删除服务,以便重新部署。mini kube mount
将本地文件系统中的目录临时挂载到集群中,使用local_path:mini kube_host_path
语法指定容器中的目录和位置。mini kube Profile
与指定的集群一起切换活动配置文件。
您还将kubectl
命令与以下子命令配合使用:
kubectl get pods
获取集群中运行的所有实例的列表,使用-a
参数查找所有命名空间。kubectl创建部署
将命名部署创建为服务,使用--Image
选项调用指定的远程镜像。kubectl exposed ployment
公开命名部署,使用--port
选项和--type
选项指定端口。kubectl Get Service
检查指定的服务是否正在运行。kubectl get nodes
列出集群中的主动节点(S),使用--kubeconfig
选项指定不同的Yaml配置文件。
要开始使用托管Kubernetes服务,您可以查看DigitalOcean Kubernetes QuickStart documentation.
下一步怎么办?
通过对容器和流行的数据库容器引擎有了更深入的了解,您可以在构建应用程序时将开发环境容器化以保持一致性。对于如此复杂的主题,这可能看起来太简单了,但您现在有了一个(或两个)容器生态系统!您可以在其中进行实验、构建应用程序和扩展项目。
要构建更多的Docker生态系统,您可以接下来遵循以下教程:
- 使用Docker Compose将Node.js应用程序包装起来进行开发
- 如何使用NGINX、We‘s Encrypt和Docker Compose保护容器化节点.js应用
如果您更喜欢直接进入操作,请尝试DigitalOcean Marketplace Docker One-Click Solution,它会启动安装了Docker的Droplet。您还可以查看如何从容器镜像部署上的DigitalOcean产品文档。
要继续开发您的Kubernetes集群,您可以阅读以下文章:
- Kubernetes架构应用
- Kubernetes应用程序现代化
- 将单片应用程序重新架构为微服务的最佳实践
- 我们的系列从容器到Kubernetes 使用NodeJS或使用Django
如果您想释放资源用于开发,可以迁移到DigitalOcean托管Kubernetes(DOKS)服务。您还可以使用DigitalOcean Container Registry(DOCR)来为Docker容器和DigitalOcean Kubernetes集群提供额外支持。
有了新获得的容器知识,您就可以使用安全措施继续您的云之旅。如果您还没有,请查看我们关于[云服务器](https://www.digitalocean.com/community/tutorial_series/getting-started-with-cloud-computing Cloud-Servers)、Web服务器和数据库的介绍性文章。