1) 虚拟化技术的概念?
虚拟化技术是指在一台物理计算机上创建多个虚拟的计算机环境,每个虚拟环境都可以运行自己的操作系统和应用程序,就好像它们是在独立的物理计算机上运行一样。这种虚拟化技术可以让一台物理计算机同时运行多个虚拟机,从而充分利用硬件资源,提高计算机的利用率。
2) 虚拟化技术的意义?
充分利用硬件资源:虚拟化技术可以让一台物理计算机同时运行多个虚拟机,从而充分利用硬件资源,提高计算机的利用率。 降低成本:通过虚拟化技术,用户可以在一台计算机上运行多个操作系统和应用程序,而无需购买和维护多台物理计算机,从而降低成本。
3) 虚拟化技术的种类? - VMware ESXI;
- XEN;
- KVM;
- Open-vz;
- Hyper-v;
- Podman;
- Docker。
4) 什么是Docker虚拟化?
Docker是一种应用程序容器化技术,它可以将应用程序及其依赖项打包为一个可移植的容器,从而实现在不同的计算机上快速部署和运行应用程序的目的。
Docker虚拟化与传统的虚拟化技术不同,传统虚拟化技术通过在物理计算机上运行多个操作系统实例或虚拟机实例来实现虚拟化。
Docker虚拟化是通过容器化技术实现的,容器是一个轻量级的虚拟化技术,它在操作系统层面上实现虚拟化,因此容器和宿主机共享同一个操作系统内核。
5) Docker和传统VMware workstation区别?
Docker虚拟化与传统的虚拟化技术不同,传统虚拟化技术通过在物理计算机上运行多个操作系统实例或虚拟机实例来实现虚拟化。
Docker虚拟化是通过容器化技术实现的,容器是一个轻量级的虚拟化技术,它在操作系统层面上实现虚拟化,因此容器和宿主机共享同一个操作系统内核。
6) Docker镜像和容器的区别?
Docker镜像是一个只读的文件系统,包含了用于创建Docker容器的所有文件和配置信息,可以看作是Docker容器的模板。Docker镜像可以包含操作系统、应用程序及其依赖项、运行环境、配置文件等。Docker镜像是通过在Dockerfile中描述镜像的构建过程,然后通过Docker命令构建出来的。
而Docker容器是Docker镜像的一个运行实例,可以看作是Docker镜像的一个可执行版本。当启动一个Docker容器时,Docker会在宿主机上创建一个独立的文件系统,然后将Docker镜像中的文件系统复制到这个文件系统中,同时启动容器中指定的应用程序。Docker容器在运行过程中可以修改文件系统和配置信息,但是这些修改不会影响到Docker镜像本身。
7) Dockerfile制作原理?
Dockerfile是Docker虚拟化技术中用于构建Docker镜像的一种文本格式文件,包含了构建镜像所需要的所有指令和配置信息。主要是基于一个基础镜像,在基础镜像上不断的叠加新功能。
8) Docker Harbor仓库工作流程?
- 用户使用Docker客户端构建Docker镜像,并将其推送到Docker Harbor仓库。用户可以通过Docker客户端的命令行界面或图形化界面来执行推送操作。
- Docker Harbor接收到镜像推送请求后,根据用户配置的访问控制规则和镜像存储策略,对镜像进行验证、处理和存储。Docker Harbor支持使用HTTPS、TLS等安全协议来保护镜像传输的安全性。
- Docker Harbor将存储的镜像信息存储在仓库的数据库中,用户可以通过Docker Harbor的Web界面来查看、搜索、管理仓库中的镜像。
- 用户可以通过Docker客户端从Docker Harbor仓库中拉取Docker镜像,以在自己的环境中部署和运行应用程序。用户可以根据需要选择特定的镜像版本或标签,以便在应用程序升级或回退时进行管理。
9) Docker bridge桥接模式原理?
在Docker桥接网络中,Docker会自动创建一个名为docker0的虚拟网桥,它作为桥接网络中所有容器的交换机。Docker0网桥有两个虚拟网络接口:一个用于和宿主机相连,一个用于和容器相连。当容器加入到桥接网络中时,Docker会为容器创建一个虚拟网卡veth pair,并将其中一端连接到容器的网络命名空间中,另一端连接到docker0网桥中。通过这种方式,容器可以使用docker0网桥上的IP地址与其他容器或宿主机进行通信。
10) Docker LXC Croup之间的区别?
Docker、LXC和Cgroups都是Linux容器技术的代表性工具,它们都可以用于创建和管理容器,但它们的设计理念和实现方式有所不同,主要区别如下:
Docker是一种基于应用的容器技术,旨在为应用提供一个独立的运行环境,具有轻量、可移植、可扩展等特点。Docker使用自己的容器格式,即Docker镜像,通过镜像分发、构建、发布和部署容器。
LXC(Linux Container)是Linux内核级别的容器技术,提供了一种轻量级的虚拟化解决方案,可以在同一台物理机上运行多个独立的Linux系统。LXC基于Linux命名空间和Cgroups技术实现,它使用Linux操作系统原生的进程和文件系统隔离机制来实现容器,可以直接运行标准的Linux发行版。
Cgroups(Control Groups)是Linux内核提供的一种资源管理机制,可以限制进程组使用的资源,例如CPU、内存、磁盘I/O等。Cgroups提供了一种灵活的资源隔离机制,可以帮助实现Linux容器的资源管理和限制。
相比之下,Docker在应用层面上提供了一种更高级别、更易用的容器技术,可以轻松创建、部署和管理容器,且具有更好的可移植性和版本控制功能。LXC和Cgroups则提供了更底层的容器技术,需要手动进行配置和管理,但它们的性能和隔离性更高,可以直接运行标准的Linux系统。因此,选择适合的容器技术取决于应用场景和具体需求。
11) Docker Compose编排原理?
Docker Compose是一个用于定义和运行多个Docker容器的工具,它基于YAML格式的配置文件,通过简单的命令即可完成容器的部署、管理和协同工作。
Docker Compose的编排原理如下:
- 定义服务:在docker-compose.yml配置文件中定义一个或多个服务,每个服务对应一个Docker容器,可以指定容器的镜像、环境变量、端口映射、依赖关系等。
- 创建网络:Docker Compose会为每个项目创建一个默认的网络,可以将各个容器连接到同一个网络中,使它们可以直接相互通信。
- 启动容器:使用docker-compose up命令启动所有服务对应的容器,Docker Compose会根据定义的服务和依赖关系,自动创建、启动和管理容器,使它们能够协同工作,实现复杂的应用架构。
- 管理容器:Docker Compose提供了一系列管理命令,可以方便地启动、停止、重启、删除和查看容器,以及获取容器日志和状态信息。
- 扩展应用:在需要扩展应用时,可以通过修改docker-compose.yml文件来添加或删除服务,然后再次运行docker-compose up命令即可实现快速部署和扩容。
12) Docker swarm集群原理?
初始化集群:选择一台主机作为管理节点,使用docker swarm init命令初始化集群,创建一个Docker Swarm集群,自动创建一个默认的Swarm服务。
- 加入节点:使用docker swarm join命令让其他Docker主机加入Swarm集群,这样就可以统一管理多个主机上的Docker容器。
- 创建服务:使用docker service create命令创建一个服务,可以指定镜像、容器数量、环境变量、网络设置等信息,Swarm会自动分配服务到各个节点上,并启动容器实例。
- 负载均衡:使用内置的负载均衡算法,Swarm会自动将请求路由到运行相应服务的容器上,实现负载均衡和高可用。
- 扩展应用:可以通过docker service scale命令来扩展服务的容器数量,Swarm会自动将容器分配到集群的各个节点上,实现自动扩展。
- 服务更新:使用docker service update命令来更新服务的镜像、环境变量、网络设置等信息,Swarm会逐步停止旧容器并启动新容器,实现无缝升级。
- 故障转移:如果某个节点或容器发生故障,Swarm会自动检测到并重新分配服务,保证整个集群的高可用性。
13) Docker export和commit区别?
Docker export和commit命令都是将容器转化为镜像的方法,但是它们的作用和应用场景有所不同。export适用于创建一个只包含文件系统的镜像文件,commit适用于保存容器的元数据信息和运行状态。
14) 如何去监控Docker容器资源运行情况?
Docker提供了一个内置的命令docker stats,可以实时查看所有容器的资源占用情况,包括CPU、内存、网络I/O和磁盘I/O等信息。可以使用该命令来快速了解Docker容器的资源使用情况。
15) Docker如何对CPU、MEM扩容、缩容?
Docker对CPU的扩容和缩容,可以通过 docker update 命令来实现。该命令可以修改容器的配置,包括 CPU 的使用限制。而内存则采用内存的扩容和缩容,可以通过在启动容器时指定 --memory 参数来实现。
16) Docker如何对硬盘容器进行限制?
Docker可以通过对容器的磁盘进行限制来控制容器使用的存储空间大小。常用的限制方式有两种:
一是通过限制容器的磁盘使用空间大小:可以在启动容器时通过 --storage-opt 参数来设置容器的磁盘空间限制。
二是通过使用磁盘配额来限制容器的磁盘使用:可以使用文件系统的磁盘配额功能来限制容器的磁盘使用。
17) Docker hosts模式和Container模式区别?
Docker容器在Host 模式下,容器与宿主机共享同一个网络命名空间,即容器使用宿主机的网络配置,直接绑定宿主机的网络接口,不会进行网络地址转换 (NAT)。这意味着容器可以直接访问宿主机上的所有网络接口和端口,包括外部网络。
而在Container 模式下,Docker 会为每个容器创建一个独立的网络命名空间,容器之间相互隔离。每个容器都有自己的 IP 地址和网络配置,并且容器之间的网络通信需要进行 NAT。
使用 Container 模式可以更好地隔离容器之间的网络,但也会降低网络性能和访问外部网络的能力。 可以使用
18) Docker容器默认DNS是多少?为什么?
Docker采用的默认DNS是宿主机的DNS,可以查看宿主机/etc/resolv.conf文件查看即可。也可以给Docker容器配置其他的DNS服务器。
19) Docker超级特权有什么用?
Docker 的超级特权(privileged)模式可以给容器以宿主机的所有特权,包括访问宿主机的所有设备、文件系统、内核模块等。
20) 描述Jenkins和Docker如何进行整合?工作流程?
Jenkins 是一个流行的持续集成和持续交付工具,而 Docker 是一个流行的容器化解决方案。将 Jenkins 和 Docker 进行整合,可以实现更高效、可靠和可重复的构建、测试和部署流程。
- 在 Jenkins 中安装 Docker 插件,以便 Jenkins 可以与 Docker 容器进行交互。
- 在 Jenkins 中创建一个 Docker 镜像构建任务,定义需要构建的 Docker 镜像的名称、版本和构建过程。
- 在构建任务中定义需要构建的 Docker 镜像所需的 Dockerfile 和其他构建文件。
- 在构建任务中使用 Docker 插件启动 Docker 容器,并将构建所需的文件复制到容器中。
- 在容器中运行构建命令,以生成新的 Docker 镜像。
- 在构建任务中使用 Docker 插件将新构建的 Docker 镜像推送到 Docker 仓库中,以便进行部署。
|