当前位置:网站首页 > 产品管理 > 正文

docker 进程守护(docker管理程序)



本篇博客参考了《微服务架构基础》和一些其他教程,对Docker进行了较为全面的总结,以便加深理解和记忆。

1)来源

Docker是一个开源的应用容器引擎,基于go语言开发,诞生于2013年,包括Community Edition(CE社区版,免费)和Enterprise Edition(EE企业版,付费),遵从Apache2.0开源协议。

2)功能

Docker可以让应用及其依赖封装到一个可移植的镜像中,发布到任意Linux机器上,也可也实现虚拟化。Docker完全使用沙箱机制,相互隔离,保证了容器之间的安全性。

3)特点

特点 解释 快速交付和部署 镜像简化了容器环境的搭建过程,轻量且启动速度快 更高效的虚拟化 运行时无需额外的虚拟机程序支持,属于内核级的虚拟化,因而可以具有更高的性能与效率 更轻松的迁移与扩展 Docker容器几乎可以在任何平台上运行,包括物理机、虚拟机、公有云、私有有、PC机和服务器等。这种良好的兼容性有利于应用的迁移和扩展 更简单的管理 所有修改可以以增量的方式被分发和更新,从而实现自动化并高效的管理

4)Docker与虚拟机的区别

①虚拟机:运行在每个应用层级的客户端操作系统上,是资源密集型。由于磁盘的镜像和应用程序的操作系统相互交叉,所以导致虚拟机对操作系统的依赖性很强,一旦系统出现问题,虚拟机依赖的文件都可能存在丢失的情况。

②Docker容器:进程级的隔离,多个容器可以共享单个内核,且创建Docker容器的镜像所需要的配置不依赖于宿主机器。正是由于容器间配置的隔离性,容器之间没有配置交叉,因而Docker拥有很好的可移植性。

5)运行机制

  • Docker引擎

Docker Engine是Docker的核心部分,使用的CS架构,其主要组成部分如下:

名称 功能 docker CLI(command line interface) Docker的命令接口(客户端组件),开发者可以在命令行中使用Docker相关指令与Docker守护进程交互,从而进行一些操作 REST API Docker应用程序接口,开发者可以通过API接口与Docker的守护进程交互,从而执行相应的操作 docker daemon Docker的服务端组件,它是Docker架构中在后台运行的一个守护进程,负责接收由命令行和API接口的指令,然后执行相应的后台操作
  • Docker架构
名称 功能 Client客户端 可认为是Docker CLI,开发者通过该命令接口与后台守护进程交互以执行相应指令 DOCKER_HOST Docker主机 Docker内部引擎运行的主机,主要指Docker daemon。可以与客户端和Docker镜像仓库交互,以实现本地-远程镜像/容器的管理 Registry注册中心 Docker镜像仓库,默认使用Docker官方远程注册仓库Docker Hub

6)Docker底层技术

名称 功能 Namespace 命名空间 Docker通过命名空间来提供隔离的工作空间,当一个容器运行时,Docker会为该容器创建一系列的命名空间,并为命名空间提供一层隔离。每个容器运行在相对隔离的环境下,对其他命名空间是相对受限的 Control groups 控制组 Linux系统的Docker Engine依赖于Control groups的技术,控制组可以对程序进行资源限定,并允许Docker引擎在容器间进行 硬件资源共享以及随时进行限制和约束 Union file systems 联合文件系统 UnionFS是一种分层、轻量级且高性能的文件系统,它支持将文件系统的修改作为一次提交来一层层的叠加,同时还可以将不同目录挂载到同一虚拟文件系统下。不同Docker容器可以共享一些基础的文件系统层,与自己独有的改动层一起使用,大大地提高了存储效率。Docker支持的UnionFS包括:AUFS、btrfs、vfs和DeviceMapper Container format 容器格式 Docker Engine将命名空间、控制组和联合文件系统组合成一个叫容器格式的整体,当前默认的容器格式是libcontainer,未来Docker可能与其他技术(如BSD Jails、Solaris Zones等)的集成使用来开发其他容器格式

1)安装要求

Docker支持多种平台,但由于Docker是基于Ubuntu发布的,因而官方更推荐在Ubuntu上使用Docker。以Ubuntu系统为例,Docker安装需要满足:
①Ubuntu版本的支持(Ubuntu Trusty 14.04(LTS)、Ubuntu Xenial 14.04(LTS)、Ubuntu Zesty 17.04、其他更高版本)
②Ubuntu的内核支持:Docker需要在64位Ubuntu上安装,其内核版本不能低于3.10(可以通过 查看)

2)安装方式

  • 在线安装
 
  
  • 离线安装

在docker官网的下载页下载对应系统、对应版本、对应机器架构的安装包,如Ubuntu下的.deb文件,上传至Ubuntu系统中,进行安装

 
  
  • 通过脚本文件安装
 
  

Dockerfile文件用于构建Docker镜像,其命令包含了构建镜像的配置信息。

1)基本结构

Dockerfile的结构包括4个基本部分:

 
  

2)常用指令

 
  

4)通过Dockerfile文件构建镜像

 
  

5).dockerignore文件

Docker读取应用上下文中的Dockerfile之前会先将.dockerignore文件中声明的文件或目录排除,再读Dockerfile构建镜像,它有助于在进行文件复制时避免向进程中加入过大或敏感无用的文件和目录

 
  
 
  

1)DockerHub仓库

 
  

2)Docker Registry

Docker Registry相比于Docker官方提供的开放的镜像仓库,Docker Registry是用户私人搭建的镜像仓库。

在想严格控制镜像的存储位置,完全拥有自己的镜像分配渠道,或想将镜像存储和分布紧密嵌入到自己开发的程序中,可以使用Docker Registry。

下面给出通过命令行搭建和访问Docker Registry的方法,除此以外,还可以通过Portus等第三方可视化私有仓库工具来简化操作

①Docker Registry仓库搭建

 
  

②私有Docker Registry仓库访问

 
  

1)数据存储机制

①通过Dockerfile文件创建的镜像,会在某个基础镜像之上层层提交修改(对应每一条指令)

②通过某一镜像构建容器时,会在镜像层之上增加一个容器层。不同容器进行的(数据)修改由各自保存,共享底层的镜像层。当容器层被删除时,容器层包括其存储的数据也会被一同删除,底层的镜像层保持不变

2)数据存储方式

缺陷 容器停止后数据无法持久化保存 容器中的数据难以被其他数据共享,想共享则需要容器提供专门的机制(如搭建资源访问系统) 容器机与运行的主机紧密耦合,难以轻易地 移动数据 容器层需要一个存储驱动程序来管理文件系统,存储驱动程序提供了一个使用Linux内核的联合文件系统,这种额外的抽象降低了性能

②数据外挂

由数据存储在容器中的缺陷,我们通常不会将数据直接存放于容器中,而是采用Docker volume数据外挂机制,将数据映射到宿主机中,有如下三种方式:

名称 解释 volumes 数据卷 存储在宿主机的特定位置(Linux下为/var/lib/Docker/volumes/)并由Docker管理,非Docker进程无法修改文件系统的这个部分 bind mounts 绑定挂载 可存储在宿主机的任意位置,Docker进程和非Docker进程都可以对它们任意修改 tmpfs mouts 只存储在宿主机的内存中,不进行持久化

下面着重对volumes数据卷方式进行介绍

3)volumes 数据卷

Volumes数据卷比bind mounts更容易备份和迁移,可以使用Docker CLI或API进行管理,跨平台性更好,更加安全,允许加密和云存储,是持久化容器数据、数据共享的很好选择

 
  

Docker默认使用bridge(单主机互联)和overlay(跨主机互联)两种网络驱动来进行容器的网络管理,用户还可自定义网络驱动插件来进行Docker容器的网络管理。

  • 单机互联

1)单机下的默认网络

单机下Docker自带三种网络:bridge(容器的默认网络驱动,配置后可以与宿主机实现通信)、host、none(后两者属于无网络,容器无法与外界通信)

 
  

2)单机下的自定义网络

单机下的自定义网络,即是自定义bridge网络,它是基于原有的bridge网络创建的新的网络,可以较好的实现容器隔离

 
  

3)单机下的容器互联

①未使用相同网络管理的容器之间不能通信
②使用默认bridge网络管理的容器之间可以通过IP通信,但无法通过容器名称通信
③使用自定义bridge网络管理的容器之间可以通过容器名称通信

 
  
  • 跨主机互联

见Swarm集群的网络管理

1)介绍

Docker Swarm是一个用于创建和管理Docker集群的工具,Docker 1.12以后都集成了swarmkit工具,该工具主要用于Docker集群管理和容器编排。因此,开发者可以不用安装额外的工具就可以通过简单的命令创建并管理Swarm集群。

Docker Swarm集群算是微服务等架构推动的产物,此前较为成熟的容器集群工具有谷歌的开源系统架构Kubernetes和Apache的分布式管理框架Mesos等。

2)特点

特点 解释 使用方便 可直接使用Docker客户端来创建和管理Docker集群,无需部署第三方工具 可扩展 集群中的每个服务,都可以声明运行副本任务的数量,向上或向下扩展时,集群管理器将通过增加或删除副本任务来自动适应所需的状态 可实现期望的状态调节 集群管理器节点不断地监视集群状态,并协调实际状态和期望状态之间的任何差异。如启动某一服务的10个副本,其中两个副本崩溃后,管理器将创建 集群中多主机网络自动扩展管理 当集群服务的覆盖网络初始化或更新应用时,集群管理器会自动在工作节点创建或更新网络来管理服务 提供服务发现功能 集群管理器节点为集群中每个服务分配一个唯一的DNS名称,通过Dcoker Swarm提供的负载均衡功能,可以通过嵌入在集群中的DNS服务器查询每一个运行的容器 实现负载均衡 可以将容器中服务的端口暴露给外部负载均衡器,而在内部允许指定如何在节点之间分配服务器 安全性强 群中的每个节点强制使用TLS相互认证和加密,以确保自身和其他节点之间的通信安全,还支持使用自定义的签名证书保证安全 支持延迟更新和服务回滚 进行服务更新时可以将服务逐步延申到各个节点上,集群管理器允许服务部署到不同节点组之间出现延迟;若某个节点出现问题,还可以将服务回滚到之前的版本

3)集群搭建

准备多台Linux机器,其中一台作为管理节点,其余作为工作节点。

 
  

4)网络管理

集群状态下会增加两个网络类型:docker_gwbridge(以bridge驱动)、ingress(以overlay驱动),其中ingress是服务默认的网络类型。

实际中会使用基于overlay驱动的自定义网络

 
  

5)集群可视化工具visualizer

Docker Compose,Docker编排工具,是用来定义和运行多容器应用的Docker工具。通过该工具可通过docker-compose.yaml配置文件来配置服务,只需要一条简单的命令就可以创建并启动所有服务,提高了部署效率(否则逐一运行不同参数的dockerfile文件,给部署和维护都带来了很多麻烦)

1)linux下的安装与卸载

 
  

2)使用方法

①编写Dockerfile文件,定义应用运行的环境,然后构建镜像

②定义docker-compose.yaml文件,对每个应用的执行和参数进行统一定义

 
  

③运行docker-compose部署指令,启动所有应用

到此这篇docker 进程守护(docker管理程序)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就! 
  

                            

版权声明


相关文章:

  • 产品经理三大证书(产品经理相关的证书)2025-10-10 17:27:07
  • 日志管理的作用是什么(日志管理应具备日志的什么等功能)2025-10-10 17:27:07
  • 文件管理的回收站在哪(文件管理的回收站在哪vivo)2025-10-10 17:27:07
  • 任务管理器快捷打开命令(快捷键打开任务管理器)2025-10-10 17:27:07
  • rbac权限管理(rbac权限管理实现)2025-10-10 17:27:07
  • springaop日志管理(springboot aop日志记录)2025-10-10 17:27:07
  • 文件管理的回收站在哪里(手机文件管理的回收站在哪里)2025-10-10 17:27:07
  • 日志管理系统功能(日志管理系统功能页面)2025-10-10 17:27:07
  • dm管理工具创建用户(dm管理工具打不开)2025-10-10 17:27:07
  • ipad文件管理在哪里找(ipad文件夹管理在哪里)2025-10-10 17:27:07
  • 全屏图片