容器技术基础-Docker核心概念及架构

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 容器技术基础-Docker核心概念及架构

开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:容器技术基础-Docker核心概念及架构】

课程地址:https://edu.aliyun.com/course/3112075/lesson/19010


容器技术基础-Docker核心概念及架构

 

内容介绍:

一、Docker容器基础概念

二、解决问题


一、Docker容器基础概念

容器的一些基础概念首先docker的这个图是非常形象的logo,就是一堆集装箱放在鲸鱼上,作为鲸鱼的docker,就是一个标准化的艺术系统我们来看一下docker容器基础概念

image.png

Docker 容器是资源分割和调度的基本单位,封装整个服务的运行环境,用于构建、发布和运行分布式应用的一个框架,他是一个跨平台、可移植并且简单易用的容器解决方案。Docker 是世界领先的软件容器平台。Docker 使用Google公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace,对进程进行封装隔离。Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员,以便他们专注在真正重要的事情上:构建杰出的软件用户可以方便地创建和使用容器,把自己的应用放入容器。
容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

在容器技术之前是有很多技术的,那么为什么 docker 成了容器的事实标准?
首先,docker 的镜像提供了内和外完整的运行环境,确保了应用运行环境一致性,从而不会再出现开发到了测试环境就无法运行。Docker 技术的第二个特点就是可以做到秒级甚至毫秒级的快速,大大节约了开发测试工作时间。
第三个,它具备很好的资源隔离性,避免公用的服务器资源会容易受到其他的影响。
第四,具备这种弹性伸缩和快速扩散的善于处理使用压力的问题,可以很轻易的把在一个平台上运行的应用迁移到另一个平台上,不必担心运行环境的变化导致业务无法正常运行的情况,迁移是非常方便的,使用到可以通过定制应用镜像来实现持续集成,持续交付部署,通过持续的交互部署,就可以提升整个交互开发的效率正因这些docker的优势,docker已经成为了容器技术的一个事实的标准,容器有这么多的优势,并且已经成为基础的实施标准。

image.png

 

二、解决问题

那么 docker 容器到底能帮助我们解决什么样的问题呢?docker 官网给出了他的八大重点使用场景。如果借助这种 docker 技术的优势,在低开销情况下打造一致的运行环境,首先第一个重点的解决方案是简化配置,公司宣传的 docker 的主要使用场景群集的最大组是人,在你的硬件设施上运行各种配置不一样的平台,包括软件系统,都会在降低额外开销的情况下提供了同样的功能,才能让你将运行环境和配置放在代码中,然后部署同一个 docker 的配置,可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间的耦合度。相对于虚拟化技术,docker 技术可以简化相应的配置,第二个最重要的解决方案场景就是代码流水线管理,前一个场景对于管理代码的流水线起了很大的帮助,代码从开发者的机器到最终生产环境的部署需要经过很多的中间环节,而每个中间环节都有自己微小的差别,docker 给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。第三个就提升开发的效率,第四个重要职责场景是隔离,就因为docker 可以提供这种资源兼有效的隔离,它可以很好的提供一个隔离的环境,使得应用之间不受相互影响,可以在一台机器上运行多个应用,并且能够实现容器资源的更有效的整合使用,这就是隔离应用。第五个就是整合服务器,这种通过信息来整合多个应用,整个服务器就会降低成本,因为没有多个超系统的内存占用以及能在多个实例之间共享,没有使用的内存,Docker 可以比虚拟机提供更小的,更好的服务器整合解决方案。第六个就是 docker 提供了很多的工具,这些工具不一定是针对容器,但是却适用于容器,可以帮助调试 bug,第七个重要的环境,就是多租户环境可以在多租户应用中提供一个多方位的使用场景,它可以为每个租户的应用场景创建隔离的环境。方便不同用户可以在这种同一台机器上做,之间不受相应的影响,提供一个非常好的多租户的一个隔离环境。第八个也是包括重要的一个场景,快速部署,在虚拟机之前引入新的硬件资源需要消耗几天的时间,虚拟化技术将这个时间缩短到分钟级别,而 docker 通过经济常见的容器和无需启动的操作系统,再次将这个过程所达到了秒级。这正是的一个重要的场景特点

image.png

上面说的八个重点的使用场景,下面来了解一下 docker 的三大核心概念,通过容器镜像为标准化打包提供了一个基础容器,是从镜像创建的一个运行实例。容器就是镜像的运行时,docker 仓库是集中存放镜像文件仓库,这就是 docker 仓库来提供了镜像的一个存储方式。下面我们来详细的来介绍一下它的三大核心概念。

image.png

首先我们来看一下容器镜像,容器镜像是一个特殊的文件系统,除了提供所需的程序库资源配置文件等还包含了一些为运行时准备的配置参数,努力明确环境变量不包含任何动态的数据,其内容在构建之后也不会改变镜像作为 doctor 最为突出的特性,变革了软件交付的标准,要理解镜像的话对整个 docker 的生命周期也是非常重要的。镜像,作为最为突出的创新之一,变革的软件缴付的标准我不要理解,理解整个包括的生命周期也是非常重要的,包括镜像类似一个只读的压缩包,它是把相应的应用程序全部打包压

在这样一个镜像里面,docker的镜像可以用于快速的传建容器,我们只要采用的命令,就可以去创建一个容器镜像可以进行分层的构建及一个镜象。可以在多个中间层组成多个镜象,可以同享一个中间层,我们也是通过镜像来添加一层描述一个新的镜像本身就是按照一层一层的这种分成构建的模式去构建井下道个镜象包含了一些精简的操作系统,能够提供应用所取的一些必要的文件和依赖包。docker竞价构建避稳方法有两种,一般构建自己的倾象有两种方式,比如使用生成镜像,使用docker并命令是我们可以将修改过的容器重新提交成为一个新的镜像使用这种方式构建镜像。因为别人并不知道我们这东西做了哪些修改和操作,所以这个安全性会加生很大的影响,不太建议用docker这种方式来生成影像,一般的话,会推荐用这种方式来构建一个镜像,通过就可以很清晰的标记到镜像所依赖的环境和后续所需要的相应运行所需要依赖的包。后续的话,我我们也会简单的介绍如何来编写一个完整的

下面我们来看一下其实就是镜像传建的一个运行实例其实运行时,首先,不的容器和镜像会有哪些差别?镜像image和容器的关系,就像是面向对象设计中类和实例一样镜像是静态的定义容器是镜像运行时的实体东西,可以被创建启动,停止,删除。暂停容器的实质进程在于直接在数组执行的进程不同容器进程运行于属于自己独立的秘密空间容器存储成的生存周期和容器一样,容积越小的容器,存储层也随之小

任何保存与容器存储成的信息都会随动器删除丢失。我们按照docker最佳间时间容器不应该向其存储的一些论口手机器存储上要保持无状态。所有的文件解入操作都应该使用数据键或者绑定数,在这些位置的读写会跳过容器直接存储,其性能和稳定性更高。数据卷生成中追独立与东器小王数据却不会消亡。因此,使用数据容器可以随意删除,重新整理数据却不会丢失。

 image.png 

这个容器的第三个关键在于镜像仓库,docker 镜像仓库类似于代码仓库,它是ck集中存储镜像的一个文件参数,实现整个docker镜下的一个全局的存储。它提供一个标准的api对外返回的一个接口存储的镜像把它分为公开的窗口和形态,目前最大的公开窗口是官方提供的的其中,存放的数量庞大的镜像都不可以里云也提供这种仓库的本地资源,也提供了稳定的国内访问。
当然,如果用户不希望去公开分享这个镜像文件,也只是用户在本地网络内创建一个自己能够放的仓库但用户创建完自己的镜像之后,就可以使用这样的一个命令,将它上传到指定的公有仓库或者私有镜像仓库。在另一个基础上使用这个镜像是就可以从超户里面拉下来就可以简单的快速的使用,就是这个镜像下的命令。就是镜像推送的命令,还包括到社区就镜像查询的命名。

 image.png

我们了解了三大核心概念,我们来看一下整体的一个体系结构,使用客户端服务器cs架构这种远程api来管理和创建东西,容器通过到镜像来创建镜像。

仓储主要是分为三份,官方的镜像仓股是私有镜像场控搭建可以继续开源的项目,或者是阿里云提供的镜像仓库服务。Dr serve提供了一个的服务端,它是在数组机中运行的守无进程来接受docker客户端可来发送的命令来执行拉取镜像,缓存和启动容器这些操作。docker的客户端主要是负责通过命令对容器进行相应的操作,比如拉去镜像,构建镜像,运行容器等等。
在图中我们可以清晰的看到,我们使用一般都是在客户端向服务端发出相应的请求,包括容器的构建,容器的部署,容器的运行服务端,将这些容器引在不同的服务器和设备上。

 image.png

docker 技术性的一个关键特征,特别是官网上的这句话,“Build, Ship, and Run Any App, Anywhere”,翻译成中文就是随时随地的发布构建任何应用程序其实实翻译成中文就是随时随即的构建,发布和运行任何应用程序就是构建定下镜像就是把代码以及相应的文件以及所依赖的运行环境等打包成一个小节,然后进行存储就是运出镜下,那我们可以在数组集和仓库镜像中进行相应的运输

Run就是运行镜像,运行的形象就是一个器,容器就是运行程序的一个地方,通过可以是在不同的环境东西打包一个这样的镜像,快速的进行运行按照我们在不同环境中可以快速的去运行这些代码,而不需要考虑底层的依赖,并且我们可以在开发环境,测试环境与生产环境中可以保持程序运行的一致性,这个就是关键的一个特点,并去安装,就是随时随地的构建,发布和运行任何专用应用程序和代码。

 image.png

文本内容包含了一条条构建镜像所需要的指令和说明首先通过我们可以把代码和相应的文件打包形成一个镜像文件进行存储能在程序需要的时候,我们可以用乱的方式把它镜像拉取到本地来进行相应的运行是软件开发的一个技术,到镜像是软件的一个交付品到容器,可以认为是软件那个运行台到file是面向开发的到镜像,成为一个交互的标准容器的设计,部署,运维三者是缺一不可的来构成了整个基础。

我们简单来看一下的一些指令详节节首先,制定构建静下的一个基础镜像,必须是当中非注释函的第一个指令。这样的一个指令是在当前技术上执行这样一个命令,并提交为新的镜象语法但在中只能使用一次,如果有多个,这只有最后一个生效启动容器的时候执行,。在build时候执行的详细指令可以通过到官网进行询查询。

我们可以通过一些基础操作,按照操作试着编写自己的代码。

image.png

接下来看一些指令详解。

命令

指令说明

FROM

指定构建镜像的基础源镜像,FROM必须是Dockerfile 中非注释行的第一个指令指定创建镜像的用户

MAINTAINER

在当前镜像基础上执行指定命令,并提交为新的镜像

RUN

语法和RUN类似,但在Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。CMD只在启动容器的时候执行,而RUN只在build的时候执行。

CMD

告诉Docker 服务端容器对外映射的本地端口

EXPOSE

指定一个环节变量

ENV

复制本地主机文件、目录或者远程文件到容器指定路径

ADD

用法同ADD,唯一的不同是不能指定远程文件URLS

COPY

配置容器启动后执行的命令,并且不可被Docker run 提供的参数覆盖,而CMD是可以被覆盖的。

ENTRYPOINT

创建一个可以从本地主机的挂载点

VOLUME

指定运行容器时的用户名或UID

USER

为后续的RUN、CMD、ENTRYPOINT指令配置工作目录

WORKDIR

指令说明

 

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
存储 设计模式 架构师
编码之道:从技术细节到系统架构的升华
【5月更文挑战第9天】 在编程的世界里,每一行代码都承载着功能与美学的双重使命。本文将探讨如何从关注技术细节出发,逐步深化对系统架构的理解,并在实践中实现从代码编写者到系统设计师的转变。通过分析具体案例,我们将揭示那些看似平凡的技术感悟如何在复杂系统的构建中发挥关键作用,以及这一过程中对软件开发者的启示。
13 3
|
3天前
|
存储 安全 数据安全/隐私保护
【Docker 专栏】Docker 容器化应用的备份与恢复策略
【5月更文挑战第9天】本文探讨了Docker容器化应用的备份与恢复策略,强调了备份在数据保护、业务连续性和合规要求中的关键作用。内容涵盖备份的重要性、内容及方法,推荐了Docker自带工具和第三方工具如Portainer、Velero。制定了备份策略,包括频率、存储位置和保留期限,并详细阐述了恢复流程及注意事项。文章还提及案例分析和未来发展趋势,强调了随着技术发展,备份与恢复策略将持续演进,以应对数字化时代的挑战。
【Docker 专栏】Docker 容器化应用的备份与恢复策略
|
3天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
2天前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
12 0
|
2天前
|
监控 持续交付 Docker
使用Docker进行微服务架构的最佳实践
【5月更文挑战第10天】本文探讨了使用Docker实施微服务架构的最佳实践。首先,理解微服务架构是拆分小型独立服务的模式,借助Docker实现快速部署、高可移植性和环境一致性。Docker的优势在于服务扩展、容器编排、自动化构建与部署。最佳实践包括:定义清晰服务边界,使用Dockerfile和Docker Compose自动化构建,利用Docker Swarm或Kubernetes编排,实施服务发现和负载均衡,监控与日志记录,以及持续集成和持续部署。Docker虽重要,但需与其他技术结合以确保系统整体稳定性。
|
3天前
|
缓存 关系型数据库 数据库
【Docker 专栏】Docker 与容器化数据库的集成与优化
【5月更文挑战第9天】本文探讨了Docker与容器化数据库集成的优势,如快速部署、环境一致性、资源隔离和可扩展性,并列举了常见容器化数据库(如MySQL、PostgreSQL和MongoDB)。讨论了集成方法、注意事项、优化策略,包括资源调整、缓存优化和监控告警。此外,强调了数据备份、恢复测试及性能评估的重要性。未来,随着技术发展,二者的集成将更紧密,为数据管理带来更多可能性。掌握此技术将应对数字化时代的机遇与挑战。
【Docker 专栏】Docker 与容器化数据库的集成与优化
|
3天前
|
存储 安全 数据库
【Docker 专栏】Docker 容器内应用的状态持久化
【5月更文挑战第9天】本文探讨了Docker容器中应用状态持久化的重要性,包括数据保护、应用可用性和历史记录保存。主要持久化方法有数据卷、绑定挂载和外部存储服务。数据卷是推荐手段,可通过`docker volume create`命令创建并挂载。绑定挂载需注意权限和路径一致性。利用外部存储如数据库和云服务可应对复杂需求。最佳实践包括规划存储策略、定期备份和测试验证。随着技术发展,未来将有更智能的持久化解决方案。
【Docker 专栏】Docker 容器内应用的状态持久化
|
3天前
|
机器学习/深度学习 监控 Kubernetes
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
【5月更文挑战第9天】本文探讨了Docker容器服务的自动扩展与缩容原理及实践,强调其在动态业务环境中的重要性。通过选择监控指标(如CPU使用率)、设定触发条件和制定扩展策略,实现资源的动态调整。方法包括云平台集成和使用Kubernetes等框架。实践中,电商平台和实时数据处理系统受益于此技术。注意点涉及监控数据准确性、扩展速度和资源分配。未来,智能算法将提升扩展缩容的效率和准确性,成为关键技术支持。
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
|
3天前
|
Java 数据库连接 Docker
【Docker 专栏】Docker 容器内环境变量的管理与使用
【5月更文挑战第9天】本文介绍了Docker容器中环境变量的管理与使用,环境变量用于传递配置信息和设置应用运行环境。设置方法包括在Dockerfile中使用`ENV`指令或在启动容器时通过`-e`参数设定。应用可直接访问环境变量或在脚本中使用。环境变量作用包括传递配置、设置运行环境和动态调整应用行为。使用时注意变量名称和值的合法性、保密性和覆盖问题。理解并熟练运用环境变量能提升Docker技术的使用效率和软件部署质量。
【Docker 专栏】Docker 容器内环境变量的管理与使用
|
4天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境