当前位置: 首页 > 后端技术 > Java

轻量级容器引擎Docker安装及其架构

时间:2023-04-01 15:11:07 Java

Docker安装卸载旧版本较旧的Docker版本称为docker或docker-engine。如果安装了这些程序,请卸载它们及其关联的依赖项。yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine安装Docker依赖在第一次安装DockerEngine-Community之前新主机,您需要设置一个Docker存储库,之后您可以从存储库安装和更新Docker。yuminstall-yyum-utils\device-mapper-persistent-data\lvm2设置Docker安装地址在新主机上首次安装DockerEngine-Community之前,需要设置Docker仓库。之后就可以从仓库安装和更新Docker了,使用下面的命令搭建一个稳定的仓库(阿里云)sudoyum-config-manager\--add-repo\http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoinstallDockerEngine-Community安装最新版本的DockerEngine-Community和containerdsudoyuminstall-ydocker-cedocker-ce-clicontainerd.io如果提示接受GPG键,选择是。安装后默认不启动docker,并且创建了docker用户组,但是这个用户组下没有用户。Docker镜像加速阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登录后在左侧菜单中选择镜像加速器可以看到你的专属地址:configuredaemon.json可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https://xxxxx.mirror.aliyuncs.com"]}EOFsudosystemctldaemon-reloadsudosystemctlrestartdockerstartDockersystemctlstartdockerverifydockerservice通过运行hello-world镜像验证DockerEngine-Community是否安装正确.dockerrunhello-world运行这段代码后,会先从仓库中拉取hello-world镜像,然后运行镜像,运行后输出一个HellofromDocker!开启Docker自动补全使用docker时,镜像名称等参数无法自动补全,使用效率大打折扣,以下是解决方案bash-completeyuminstall-ybash-completion刷新文件源/usr/share/bash-completion/completions/dockersource/usr/share/bash-completion/bash_completion进入dockerp后测试Docker会列出选项dockerpDockerArchitectureDocker的整体架构是c/s架构,模块之间松散耦合,包括Client、Daemon、Registry、Graph、Driver、Libcontainer和DockerContainer。DockerClient是用户界面,它支持用户和DockerDaemon之间的通信。DockerDaemon是Docker的核心后台进程,运行在宿主机上,处理服务请求。DockerIndex是中央注册表,支持具有公共和私有访问权限的Docker容器映像的备份。DockerContainers负责应用程序运行,包括操作系统、用户添加的文件和元数据DockerImages是用于运行Docker容器的只读模板DockerFile是用于说明如何自动创建Docker镜像的文件指令集Docker基本概念Docker包括三个基本概念:镜像Docker镜像是一种特殊的文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含一些为运行时准备的配置参数(如匿名卷、环境变量、用户等待)。镜像不包含任何动态数据,构建后内容不会改变。HierarchicalStorageMirroring只是一个虚拟的概念,它的实际体现并不是由一个文件组成,而是由一组文件系统组成,或者说是多层文件系统的组合。UnionFS联合文件系统(UnionFS)是linux的一种存储技术,是Docker镜像的一种存储方式。它是一个分层文件系统,将不同的目录拉入同一个虚拟目录。下图是Docker如何使用FS构建的UnionLayered镜像:(比如最底层是操作系统的boot,上层是Linux操作系统,上层是Tomcat,jdk,再上一层是应用代码)这些层是只读的,加载完成后,这些文件会被视为同一个目录,相当于只有一个文件系统。我们可以通过dockerinfo查看镜像的一些信息,可以看到存储驱动使用的不是UnionFS而是overlay2,而overlay也是一个联合文件系统,所以上面主要介绍了联合文件系统的概念。至于这些存储驱动的演进过程和优缺点,在构建镜像的时候会一层层构建,前一层是后一层的基础。每一层构建完成后,不会再发生变化,下一层的任何变化只发生在本层。(比如删除上一层文件的操作,实际上并没有删除上一层的文件,只是把当前层的文件标记为删除。最终容器运行的时候,虽然这个文件不会被删除看到了,但实际上文件会一直跟在镜像后面,所以在构建镜像的时候需要格外小心,每一层应该只包含需要添加到该层的东西,多余的东西要清理掉upbeforetheendofthelayer.)容器镜像(Image)和容器(Container)的关系就像面向对象编程中的类和实例。镜像是静态定义,容器是镜像运行时的??实体。容器可以创建、启动、停止、删除、暂停等。容器的本质是一个进程,但与直接在宿主机上执行的进程不同,容器进程运行在自己独立的命名空间中。所以一个容器可以有自己的根文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器中的进程运行在一个隔离的环境中,使用时,仿佛是在一个独立于宿主机的系统下运行。这个特性使得容器封装的应用程序比直接在主机上运行更安全。也正是因为这种隔离特性,很多人在刚开始学习Docker的时候,经常会把容器和虚拟机混为一谈。前面说过,镜像采用分层存储,容器也是如此。每个容器运行时,都会以镜像为基础层,在其上创建当前容器的存储层。我们可以把这个为容器运行时读写准备的存储层称为容器存储层。容器存储层的生命周期与容器相同。当容器死亡时,容器存储层也死亡。因此,当容器被删除时,存储在容器存储层中的任何信息都将丢失。仓库镜像构建完成后,可以方便的在当前宿主机上运行。但是,如果我们需要在其他服务器上使用这个镜像,就需要一个集中存储和分发的镜像服务。DockerRegistry就是这样一种服务。一个DockerRegistry可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库中会存放同一个软件的不同版本的镜像,标签往往用来对应软件的各个版本。我们可以使用<仓库名>:<标签>的格式来指定镜像是哪个版本的软件。如果没有给出标签,latest将被用作默认标签。(以Ubuntu镜像为例,ubuntu是仓库的名字,里面包含了不同的版本标签,比如14.04、16.04,我们可以通过ubuntu:14.04或者ubuntu:16.04来指定我们需要的镜像版本。如果忽略tag,比如ubuntu,会被认为是ubuntu:latest。)仓库名经常以三段路径的形式出现,比如heima.com/nginx-proxy:tag,前者常表示一个DockerRegistryina多用户环境用户名,后者往往是对应的软件名。但这也不是绝对的,要看具体使用的DockerRegistry软件或服务。本文由传智教育博学谷-狂野建筑师教研团队发布,转载请注明出处!如果本文对您有帮助,请关注并点赞;如果您有什么建议,也可以留言或私信。您的支持是我坚持创作的动力