开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:容器技术基础-Docker核心概念及架构】
课程地址:https://edu.aliyun.com/course/3112075/lesson/19010
容器技术基础-Docker核心概念及架构
内容介绍:
一、Docker容器基础概念
二、解决问题
一、Docker容器基础概念
容器的一些基础概念,首先docker的这个图是非常形象的logo,就是一堆集装箱放在鲸鱼上,作为鲸鱼的docker,就是一个标准化的艺术系统,我们来看一下docker容器基础概念。
Docker 容器是资源分割和调度的基本单位,封装整个服务的运行环境,用于构建、发布和运行分布式应用的一个框架,他是一个跨平台、可移植并且简单易用的容器解决方案。Docker 是世界领先的软件容器平台。Docker 使用Google公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace,对进程进行封装隔离。Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员,以便他们专注在真正重要的事情上:构建杰出的软件,用户可以方便地创建和使用容器,把自己的应用放入容器。
容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
在容器技术之前是有很多技术的,那么为什么 docker 成了容器的事实标准?
首先,docker 的镜像提供了内和外完整的运行环境,确保了应用运行环境一致性,从而不会再出现开发到了测试环境就无法运行。Docker 技术的第二个特点就是可以做到秒级甚至毫秒级的快速,大大节约了开发测试工作时间。
第三个,它具备很好的资源隔离性,避免公用的服务器资源会容易受到其他的影响。
第四,具备这种弹性伸缩和快速扩散的善于处理使用压力的问题,可以很轻易的把在一个平台上运行的应用迁移到另一个平台上,不必担心运行环境的变化导致业务无法正常运行的情况,迁移是非常方便的,使用到可以通过定制应用镜像来实现持续集成,持续交付部署,通过持续的交互部署,就可以提升整个交互开发的效率,正因这些docker的优势,docker已经成为了容器技术的一个事实的标准,容器有这么多的优势,并且已经成为基础的实施标准。
二、解决问题
那么 docker 容器到底能帮助我们解决什么样的问题呢?docker 官网给出了他的八大重点使用场景。如果借助这种 docker 技术的优势,在低开销情况下打造一致的运行环境,首先第一个重点的解决方案是简化配置,公司宣传的 docker 的主要使用场景群集的最大组是人,在你的硬件设施上运行各种配置不一样的平台,包括软件系统,都会在降低额外开销的情况下提供了同样的功能,才能让你将运行环境和配置放在代码中,然后部署同一个 docker 的配置,可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间的耦合度。相对于虚拟化技术,docker 技术可以简化相应的配置,第二个最重要的解决方案场景就是代码流水线管理,前一个场景对于管理代码的流水线起了很大的帮助,代码从开发者的机器到最终生产环境的部署需要经过很多的中间环节,而每个中间环节都有自己微小的差别,docker 给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。第三个就提升开发的效率,第四个重要职责场景是隔离,就因为docker 可以提供这种资源兼有效的隔离,它可以很好的提供一个隔离的环境,使得应用之间不受相互影响,可以在一台机器上运行多个应用,并且能够实现容器资源的更有效的整合使用,这就是隔离应用。第五个就是整合服务器,这种通过信息来整合多个应用,整个服务器就会降低成本,因为没有多个超系统的内存占用以及能在多个实例之间共享,没有使用的内存,Docker 可以比虚拟机提供更小的,更好的服务器整合解决方案。第六个就是 docker 提供了很多的工具,这些工具不一定是针对容器,但是却适用于容器,可以帮助调试 bug,第七个重要的环境,就是多租户环境可以在多租户应用中提供一个多方位的使用场景,它可以为每个租户的应用场景创建隔离的环境。方便不同用户可以在这种同一台机器上做,之间不受相应的影响,提供一个非常好的多租户的一个隔离环境。第八个也是包括重要的一个场景,快速部署,在虚拟机之前引入新的硬件资源需要消耗几天的时间,虚拟化技术将这个时间缩短到分钟级别,而 docker 通过经济常见的容器和无需启动的操作系统,再次将这个过程所达到了秒级。这正是的一个重要的场景特点。
上面说的八个重点的使用场景,下面来了解一下 docker 的三大核心概念,通过容器镜像为标准化打包提供了一个基础容器,是从镜像创建的一个运行实例。容器就是镜像的运行时,docker 仓库是集中存放镜像文件仓库,这就是 docker 仓库来提供了镜像的一个存储方式。下面我们来详细的来介绍一下它的三大核心概念。
首先我们来看一下容器镜像,容器镜像是一个特殊的文件系统,除了提供所需的程序库资源配置文件等还包含了一些为运行时准备的配置参数,努力明确环境变量不包含任何动态的数据,其内容在构建之后也不会改变。镜像作为 doctor 最为突出的特性,变革了软件交付的标准,要理解镜像的话对整个 docker 的生命周期也是非常重要的。镜像,作为最为突出的创新之一,变革的软件缴付的标准我不要理解,理解整个包括的生命周期也是非常重要的,包括镜像类似一个只读的压缩包,它是把相应的应用程序全部打包压,
在这样一个镜像里面,docker的镜像可以用于快速的传建容器,我们只要采用的命令,就可以去创建一个容器镜像可以进行分层的构建及一个镜象。可以在多个中间层组成多个镜象,可以同享一个中间层,我们也是通过镜像来添加一层描述,一个新的镜像本身就是按照一层一层的这种分成构建的模式去构建井下道个镜象包含了一些精简的操作系统,能够提供应用所取的一些必要的文件和依赖包。docker竞价构建避稳方法有两种,一般构建自己的倾象有两种方式,比如使用生成镜像,使用docker并命令是我们可以将修改过的容器重新提交成为一个新的镜像,使用这种方式构建镜像。因为别人并不知道我们这东西做了哪些修改和操作,所以这个安全性会加生很大的影响,不太建议用docker这种方式来生成影像,一般的话,会推荐用这种方式来构建一个镜像,通过它就可以很清晰的标记到镜像所依赖的环境和后续所需要的相应运行所需要依赖的包。后续的话,我我们也会简单的介绍如何来编写一个完整的。
下面我们来看一下,其实就是镜像传建的一个运行实例,其实运行时,首先,不同的容器和镜像会有哪些差别?镜像image和容器的关系,就像是面向对象设计中类和实例一样,镜像是静态的定义,容器是镜像运行时的实体东西,可以被创建启动,停止,删除。暂停容器的实质进程在于直接在数组执行的进程,不同容器进程运行于属于自己独立的秘密空间,容器存储成的生存周期和容器一样,容积越小的容器,存储层也随之小。
任何保存与容器存储成的信息都会随动器删除丢失。我们按照docker最佳间时间容器不应该向其存储的一些论口,手机容器存储上要保持无状态。所有的文件解入操作都应该使用数据键或者绑定数,在这些位置的读写会跳过容器直接存储,其性能和稳定性更高。数据卷生成中追独立与东器小王数据却不会消亡。因此,使用数据容器可以随意删除,重新整理数据却不会丢失。
这个容器的第三个关键在于镜像仓库,docker 镜像仓库类似于代码仓库,它是ck集中存储镜像的一个文件参数,实现整个docker镜下的一个全局的存储。它提供一个标准的api对外返回的一个接口存储的镜像,把它分为公开的窗口和形态,目前最大的公开窗口是官方提供的的,其中,存放的数量庞大的镜像都不可以,阿里云也提供这种仓库的本地资源,也提供了稳定的国内访问。
当然,如果用户不希望去公开分享这个镜像文件,也只是用户在本地网络内创建一个自己能够放的仓库,但用户创建完自己的镜像之后,就可以使用这样的一个命令,将它上传到指定的公有仓库或者私有镜像仓库。在另一个基础上使用这个镜像是就可以从超户里面拉下来就可以简单的快速的使用,就是这个镜像下的命令。就是镜像推送的命令,还包括到社区,就镜像查询的命名。
我们了解了三大核心概念,我们来看一下整体的一个体系结构,使用客户端服务器cs架构这种远程api来管理和创建东西,容器通过到镜像来创建镜像。
仓储主要是分为三部份,官方的镜像仓股是私有镜像场控搭建可以继续开源的项目,或者是阿里云提供的镜像仓库服务。Dr serve提供了一个的服务端,它是在数组机中运行的守无进程来接受docker客户端可来发送的命令来执行拉取镜像,缓存和启动容器这些操作。docker的客户端主要是负责通过命令对容器进行相应的操作,比如拉去镜像,构建镜像,运行容器等等。
在图中我们可以清晰的看到,我们使用一般都是在客户端向服务端发出相应的请求,包括容器的构建,容器的部署,容器的运行服务端,将这些容器引在不同的服务器和设备上。
docker 技术性的一个关键特征,特别是官网上的这句话,“Build, Ship, and Run Any App, Anywhere”,翻译成中文就是随时随地的发布构建任何应用程序,其实实翻译成中文就是随时随即的构建,发布和运行任何应用程序就是构建定下镜像,就是把代码以及相应的文件以及所依赖的运行环境等打包成一个小节,然后进行存储,就是运出镜下,那我们可以在数组集和仓库镜像中进行相应的运输。
Run就是运行镜像,运行的形象就是一个容器,容器就是运行程序的一个地方,通过可以是在不同的环境东西打包一个这样的镜像,快速的进行运行,按照我们在不同环境中可以快速的去运行这些代码,而不需要考虑底层的依赖,并且我们可以在开发环境,测试环境与生产环境中可以保持程序运行的一致性,这个就是关键的一个特点,并去安装,就是随时随地的构建,发布和运行任何专用应用程序和代码。
文本内容包含了一条条构建镜像所需要的指令和说明。首先通过我们可以把代码和相应的文件打包形成一个镜像文件进行存储能,在程序需要的时候,我们可以用乱的方式把它镜像拉取到本地来进行相应的运行,是软件开发的一个技术,到镜像是软件的一个交付品到容器,可以认为是软件那个运行台到file是面向开发的,到镜像,成为一个交互的标准,到容器的设计,部署,运维三者是缺一不可的,来构成了整个基础。
我们简单来看一下的一些指令详节节首先,制定构建静下的一个基础镜像,必须是当中非注释函的第一个指令。这样的一个指令是在当前技术上执行这样一个命令,并提交为新的镜象语法,但在中只能使用一次,如果有多个,这只有最后一个生效,在启动容器的时候执行,。在build时候执行的详细指令可以通过到官网进行询查询。
我们可以通过一些基础操作,按照操作试着编写自己的代码。
接下来看一些指令详解。
命令 |
指令说明 |
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 |
指令说明 |