KALI容器虚拟化Docker安装

news2024/12/15 7:39:35

为什么需要DOCKER

  1. 环境一致性保障
    • 开发与生产环境统一:在软件开发过程中,开发环境和生产环境的差异常常导致应用程序出现问题。例如,开发人员在自己的机器上开发了一个 Web 应用,使用了特定版本的操作系统、数据库和编程语言运行时环境。当把这个应用部署到生产服务器上时,如果生产环境的配置稍有不同,可能会出现兼容性问题,如库版本不一致、系统设置差异等。而 Docker 可以将应用及其所有依赖打包成一个容器。这个容器在任何安装了 Docker 的环境中都能以相同的方式运行,确保了从开发到测试再到生产环境的一致性。
    • 跨团队协作便利:对于大型项目,不同的团队可能负责不同的部分。例如,一个团队负责后端开发,另一个团队负责前端开发。每个团队的开发环境设置可能会很复杂,并且相互之间需要协同工作。使用 Docker,各个团队可以将自己的应用部分封装在容器中,其他团队可以很容易地拉取并运行这些容器,从而在相同的环境下进行集成测试,避免了因环境差异导致的集成问题。
  2. 资源高效利用
    • 轻量级特性:与传统的虚拟机相比,Docker 容器更加轻量级。虚拟机需要为每个实例安装完整的操作系统,这会占用大量的磁盘空间和内存资源。而 Docker 容器共享主机操作系统的内核,多个容器可以在同一主机上运行,只需要为每个容器分配应用程序运行所需的资源。例如,一个简单的 Node.js 应用容器可能只需要几十 MB 的内存和少量的 CPU 资源就可以正常运行,而虚拟机可能需要几百 MB 甚至更多的内存。
    • 快速启动和停止:由于容器不需要像虚拟机那样进行完整的操作系统启动过程,其启动和停止速度非常快。一个 Docker 容器可以在几秒钟内启动,这对于需要快速扩展或收缩应用服务的场景非常有利。例如,在应对突发的流量高峰时,可以快速启动多个容器来处理请求,流量下降后又可以迅速停止这些容器,节省资源。
  3. 应用隔离与安全性
    • 进程隔离:Docker 容器为应用提供了良好的隔离性。每个容器都有自己独立的文件系统、进程空间和网络配置。这意味着即使一个容器中的应用出现故障或被攻击,也不会轻易影响到其他容器中的应用。例如,在一个运行多个微服务的系统中,一个微服务所在的容器由于代码漏洞被黑客攻击,攻击者很难通过这个容器访问到其他微服务所在的容器,因为容器之间的进程和文件系统是隔离的。
    • 安全机制增强:Docker 本身也提供了一些安全机制,如容器间的访问控制、安全策略配置等。可以通过配置网络策略,限制容器之间的通信方式和权限,从而提高整个系统的安全性。例如,可以设置只有特定的容器可以访问数据库容器,防止未经授权的容器对数据库进行操作。
  4. 易于部署和迁移
    • 部署简单:将应用打包成 Docker 容器后,部署变得非常简单。无论是在本地服务器、云服务器还是混合云环境中,只要安装了 Docker,就可以通过简单的命令将容器部署到目标环境中。例如,要将一个 Web 应用容器部署到云端的服务器上,只需要将容器镜像推送到云端的镜像仓库,然后在云端服务器上拉取并运行这个镜像即可。
    • 迁移方便:当需要将应用从一个环境迁移到另一个环境时,使用 Docker 容器也很方便。因为容器包含了应用及其所有依赖,只要目标环境支持 Docker,就可以轻松地将容器迁移过去,而不需要重新配置复杂的环境和依赖关系。例如,从企业内部的数据中心迁移到公有云环境,只需要确保公有云环境中有 Docker 运行环境,然后将容器镜像迁移过去并运行即可。

在 Kali 中安装 Docker 可以按照以下步骤进行操作:

  1. 更新软件包列表:打开终端,运行以下命令更新软件包列表:
sudo apt update

  1. 安装依赖包:运行以下命令安装 Docker 所需的依赖包:
sudo apt install -y curl gnupg2 apt-transport-https software-properties-common ca-certificates

  1. 导入 Docker GPG 秘钥:运行以下命令导入 Docker GPG 秘钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

  1. 添加 Docker 存储库:运行以下命令将 Docker 存储库添加到 Kali 系统中:
echo "deb [arch=amd64] https://download.docker.com/linux/debian buster stable" | sudo tee /etc/apt/sources.list.d/docker.list

  1. 更新 apt 包索引:运行以下命令更新 apt 包索引:
sudo apt update

  1. 安装 Docker:运行以下命令安装 Docker:
sudo apt install docker-ce docker-ce-cli containerd.io

  1. 查看 Docker 版本:运行以下命令查看 Docker 版本:
docker version

  1. 启动 Docker 服务:运行以下命令启动 Docker 服务:
sudo systemctl start docker

  1. 设置开机自启:运行以下命令设置 Docker 服务开机自启:
sudo systemctl enable docker

安装完成后,你就可以在 Kali 中使用 Docker 了。

Docker和虚拟机的区别

  1. 架构层面
    • Docker
      • Docker 是基于容器技术的。容器共享宿主机的操作系统内核,在操作系统层面进行隔离。例如,在一个 Linux 主机上运行多个 Docker 容器,这些容器共享主机的 Linux 内核,容器内的应用程序通过内核提供的隔离机制(如 cgroups 和 namespaces)来实现资源隔离和独立运行环境。这使得容器非常轻量级,启动速度快,因为不需要像虚拟机那样加载完整的操作系统。
    • 虚拟机(VM)
      • 虚拟机是通过 Hypervisor(如 KVM、VMware 等)来模拟完整的硬件环境,在这个模拟的硬件环境上安装独立的操作系统。例如,在一台物理主机上可以通过虚拟机软件安装 Windows、Linux 等不同操作系统的虚拟机。每个虚拟机都有自己独立的操作系统内核、虚拟的 CPU、内存、硬盘等硬件资源,虚拟机之间是完全隔离的,就像多台独立的物理机器一样。这种架构使得虚拟机相对比较笨重,启动时间较长。
  2. 资源利用
    • Docker
      • 由于容器共享内核,其资源占用非常少。例如,一个简单的 Node.js 应用的 Docker 容器可能只需要几十 MB 的内存就可以启动并运行,而且容器的大小也相对较小,因为不需要包含完整的操作系统文件。在资源利用上,Docker 可以在同一台主机上密集地部署多个容器,能够更高效地利用主机的 CPU、内存和磁盘资源。
    • 虚拟机(VM)
      • 虚拟机因为每个实例都有自己完整的操作系统,所以资源占用量较大。一个普通的 Linux 虚拟机可能需要几百 MB 甚至数 GB 的内存来运行,而且虚拟机的镜像文件通常也比较大,包含了完整的操作系统和应用程序。这就导致在一台主机上能够同时运行的虚拟机数量相对较少,资源利用效率不如 Docker 容器。
  3. 性能表现
    • Docker
      • 容器的性能损耗相对较小。因为容器直接使用主机的内核,在进程调度、文件系统访问等方面的开销较低。例如,在进行网络通信时,容器和主机之间的网络性能损耗较小,容器之间的通信速度也比较快,能够更快地响应应用请求,提供更高的性能。
    • 虚拟机(VM)
      • 虚拟机由于需要经过 Hypervisor 层进行硬件模拟和指令转换,会有一定的性能损耗。例如,在进行 I/O 操作或者 CPU 密集型任务时,虚拟机的性能可能会受到较大影响,因为数据需要在虚拟机的操作系统、Hypervisor 和物理硬件之间进行多次转换和传输,导致响应时间延长和性能下降。
  4. 隔离程度与安全性
    • Docker
      • 虽然容器之间有一定的隔离性,通过 namespaces 可以隔离进程、网络、文件系统等,但这种隔离是基于操作系统层面的。如果主机操作系统内核出现安全漏洞,可能会影响到所有容器。不过,Docker 也提供了一些安全机制,如 AppArmor、SELinux 等来增强容器的安全性。
    • 虚拟机(VM)
      • 虚拟机的隔离性很强,因为每个虚拟机都有自己独立的操作系统和硬件环境。即使一个虚拟机被攻击或者出现故障,通常不会影响到其他虚拟机。这种隔离程度使得虚拟机在安全性方面具有一定的优势,尤其是在处理多租户环境或者对安全要求较高的应用场景中。
  5. 部署和迁移便利性
    • Docker
      • Docker 容器的部署非常便捷。可以通过简单的docker pull(拉取镜像)和docker run(运行容器)命令来快速部署一个应用容器。容器镜像可以很方便地在不同的 Docker 环境中迁移,只要目标环境有 Docker 运行支持,就可以轻松地将容器从开发环境迁移到测试环境、生产环境等。
    • 虚拟机(VM)
      • 虚拟机的部署相对复杂。需要先创建虚拟机实例,安装操作系统,配置各种硬件资源和网络设置,然后才能在虚拟机内安装应用程序。在迁移时,由于虚拟机包含完整的操作系统和硬件配置,需要考虑不同硬件平台的兼容性等问题,迁移过程相对复杂,可能需要使用专门的迁移工具来确保虚拟机在新环境中能够正常运行。

docker常用命令

  1. 镜像相关命令
    • docker pull
      • 功能:从镜像仓库(如 Docker Hub)拉取镜像。
      • 示例:docker pull ubuntu:latest,这条命令会从仓库中拉取最新版本的 Ubuntu 镜像。如果要拉取特定版本,例如 MySQL 8.0.30,可以使用docker pull mysql:8.0.30
    • docker images
      • 功能:列出本地已下载的镜像。
      • 示例:docker images会显示本地镜像的列表,包括镜像名称、标签、镜像 ID、创建时间和大小等信息。
    • docker build
      • 功能:根据Dockerfile构建镜像。
      • 示例:假设在当前目录下有一个Dockerfile,要构建一个名为my - app,标签为v1的镜像,可以使用docker build -t my - app:v1.命令。其中,-t用于指定镜像的标签(名称和版本)。
    • docker rmi
      • 功能:删除本地镜像。
      • 示例:docker rmi image - id,其中image - id是要删除镜像的 ID(可以通过docker images命令获取)。如果要删除一个名为my - old - app:v1的镜像,且该镜像没有被容器使用,可以使用docker rmi my - old - app:v1
  2. 容器相关命令
    • docker create
      • 功能:创建一个容器,但不启动它。
      • 示例:docker create --name my - container - ubuntu:latest,此命令创建一个基于ubuntu:latest镜像的名为my - container的容器。
    • docker start
      • 功能:启动已经创建的容器。
      • 示例:docker start my - container,用于启动名为my - container的容器。
    • docker run
      • 功能:创建并启动一个容器。
      • 示例:docker run -it --name my - new - container ubuntu:latest bash,这个命令会创建并启动一个基于ubuntu:latest镜像的名为my - new - container的容器,并且通过-it参数以交互模式进入容器的 bash 终端。
    • docker ps
      • 功能:查看正在运行的容器。
      • 示例:docker ps会显示正在运行的容器的信息,包括容器 ID、名称、使用的镜像、状态、端口等信息。如果要查看所有容器(包括已停止的),可以使用docker ps -a
    • docker stop
      • 功能:停止正在运行的容器。
      • 示例:docker stop my - container,用于停止名为my - container的容器。
    • docker rm
      • 功能:删除一个或多个容器。
      • 示例:docker rm my - container,用于删除名为my - container的容器。不过,容器必须是已经停止的状态才能被删除。如果要删除所有已停止的容器,可以使用docker rm $(docker ps -a -q),其中$(docker ps -a -q)会获取所有容器的 ID。
    • docker exec
      • 功能:在运行的容器中执行命令。
      • 示例:docker exec -it my - container bash,此命令用于进入名为my - container的运行容器的 bash 终端,-it参数表示以交互模式和伪终端的方式进入。
    • docker attach
      • 功能:连接到正在运行的容器的终端。
      • 示例:docker attach my - container,不过与docker exec不同的是,docker attach主要用于重新连接到容器的启动命令终端,可能会受到容器启动命令的限制。
  3. 其他常用命令
    • docker version
      • 功能:显示 Docker 的版本信息,包括客户端和服务器端的版本。
      • 示例:docker version会分别显示客户端和服务器端的版本号、Go 版本、Git 提交哈希等信息。
    • docker info
      • 功能:显示 Docker 系统信息,如容器和镜像的数量、存储驱动、内核版本等。
      • 示例:docker info可以帮助你了解 Docker 系统的整体状态,如查看当前使用的存储驱动是overlay2还是aufs等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LC】240. 搜索二维矩阵 II

题目描述: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,…

前端html,vue使用第三方地图详细教程,以百度地图为例,实现地图标注,导航,定位,路线规划,坐标转换

目录 示例: 准备: ?编辑 开始: 1、新建页面,在script标签中引入百度地图的api数据,把自己在控制台创建的应用的ak替换上去 2、创建一个dom对象,设置宽高 3、在js中初始化地图 进阶: 1…

pytest入门一:用例的执行范围

从一个或多个目录开始查找,可以在命令行指定文件名或目录名。如果未指定,则使用当前目录。 测试文件以 test_ 开头或以 _test 结尾 测试类以 Test 开头 ,并且不能带有 init 方法 测试函数以 test_ 开头 断言使用基本的 assert 即可 所有的…

steel-browser - 专为AI应用构建的开源浏览器自动化 API

Steel是一个开源浏览器 API,可以轻松构建与 Web 交互的 AI 应用程序和代理。您无需从头开始构建自动化基础设施,而是可以专注于 AI 应用程序,而 Steel 会处理复杂性。 2300 Stars 99 Forks 4 Issues 5 贡献者 Apache-2.0 License TypeScript …

前端H5移动端基础框架模板 :Vue3 + Vite5 + Pinia + Vant4 + Sass + 附源码

技术栈选用 Vue3 Vite5 Pinia Vant4 Sass 源码地址: git clone https://gitee.com/gaiya001/h5-APP.git1. 1.vite.config.js文件配置 ** import { defineConfig } from vite // 导入 Vite 的配置函数 import vue from vitejs/plugin-vue // 导入 Vue 插件 i…

继电器控制与C++编程:实现安全开关控制的技术分享

在现代生活中,继电器作为一种重要的电气控制元件,在电气设备的安全控制中起到了至关重要的作用。通过低电流控制高电流,继电器能够有效地隔离控制电路与被控设备,从而保障使用者的安全。本项目将介绍如何通过树莓派Pico与继电器模块结合,使用C++编程实现继电器的控制。 一…

Stable Diffusion Controlnet常用控制类型解析与实战课程 5

本节内容,是stable diffusion controlnet常用控制类型与实战的第5节课程。在前面几期课程中,我们已经陆续学习了controlnet的多种控制类型,本节课程,我们将继续讲解revision,instructp2p,ip-adapter&#x…

spark如何自定义函数

UDF:一对一的函数【User Defined Functions】 substr、split、concat、instr、length、from_unixtime UDAF:多对一的函数【User Defined Aggregation Functions】 聚合函数 count、sum、max、min、avg、collect_set/list UDTF:一对多的函…

linux网络编程 | c | select实现多路IO转接服务器

poll实现多路IO转接服务器 基于该视频完成 04-poll函数实现服务器_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 要求:能看懂看,看不懂也没啥大事,现在基本都用epoll代替了 大家看视频思路吧,代码就是从讲义里面copy了一份…

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中,集合类(Collections)是构建高效程序的核心组件之一,而 List 接口作为集合框架中的重要一员,是一个有序、可重复的元素集合。与 Set 接口不同,List 保证了元素的顺序性,并允许存…

HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用

拿走请吱一声&#xff0c;点个关注吧&#xff0c;代码如下&#xff0c;网页有移动端适配 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

内网穿透讲解

什么是内网穿透 内网穿透是一种网络技术&#xff0c;它允许外网或者其他局域网的用户来访问这个局域网的服务器资源&#xff0c;让资源的利用率更高&#xff0c;更加灵活&#xff0c;但是也要确保网络安全。 工作原理 如果你在公司&#xff0c;但是你需要使用到你家里的那台电…

Harmonyos之深浅模式适配

Harmonyos之换肤功能 概述实现原理颜色适配颜色资源配置工具类编写界面代码编写适配效果 概述 深色模式&#xff08;Dark Mode&#xff09;又称之为暗色模式&#xff0c;是与日常应用使用过程中的浅色模式&#xff08;Light Mode&#xff09;相对应的一种UI主题。 换肤功能应…

蓝桥杯刷题——day4

蓝桥杯刷题——day4 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 小蓝和朋友们在玩一个报数游戏。由于今年是2024 年&#xff0c;他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是&#xff1a;20,24,40,48,60,72,80,96,100,120。请问第2…

Git:常用命令

一、查看当前分支 git branch 二、查看所有分支 git branch -a 三、切换到远程分支 git checkout origin/分支名 示例&#xff1a;git checkout origin/dev 四、拉取远程分支代码 git pull origin 分支名 示例&#xff1a;git pull origin dev 五、常用指令 查看暂存区…

算法题(4):报数游戏

审题&#xff1a;首先这题本质上是数学题中的找规律问题&#xff0c;我们需要用到编程的地方也只是辅助计算 思路&#xff1a;首先先用枚举法多算几个数出来&#xff0c;然后观察规律 枚举之后我们发现从第一个位置开始每过十个数就会增加120&#xff0c;所以每十个数可以算一个…

短视频矩阵源码开发部署全流程解析

在当今的数字化时代&#xff0c;短视频已成为人们娱乐、学习和社交的重要方式。短视频矩阵系统的开发与部署&#xff0c;对于希望在这一领域脱颖而出的企业和个人而言&#xff0c;至关重要。本文将详细阐述短视频矩阵源码的开发与部署流程&#xff0c;并附上部分源代码示例&…

【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解

【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解 一、单片机概念 单片机&#xff1a;Single-Chip Microcomputer&#xff0c;单片微型计算机&#xff0c;是一种集成电路芯片 1.1RAM里的SRAM和DRAM SRAM&#xff08;Static Random Access Memory&…

STM32仿真——01创建工程

目录 1.需要用到的软件工具​编辑 2.第一步Proteus软件新建工程​编辑 3.第二步——stm32cubumx 4、MDK代码编写 #注意安装的过程或者使用过程使用英文&#xff0c;以防报错&#xff1b; 1.需要用到的软件工具 2.第一步Proteus软件新建工程 选中&#xff0c;默认 先布局&…

Spark3.2.0集群部署ON YARN

环境说明 准备三台服务器&#xff0c;分别为&#xff1a;bigdata141&#xff08;hadoop 主节点&#xff09;、bigdata142、bigdata143确保 hadoop 集群先启动好&#xff0c;我这边的 hadoop 版本为 3.2.0另准备一台服务器&#xff0c;bigdata144&#xff0c;作为 hadoop 客户端…