Docker 造Linux虚拟机 (Docker创建linux虚拟机)

Docker 造 Linux 虚拟机

Docker 是一款流行的容器化应用程序,它通过封装软件包和其依赖项来简化部署和管理过程。Docker 使用 Linux 操作系统级别的虚拟化技术,使多个应用程序可以在同一主机上独立运行而不会相互干扰。

Docker 和虚拟机的区别

虚拟机是一种完整的操作系统(Linux、Windows 或其他操作系统)的实例。虚拟机使用特殊软件(称为虚拟化管理程序或 hypervisor)来模拟硬件,并在模拟硬件的虚拟空间中运行操作系统。

Docker 容器是一个独立的运行环境,其中包含应用程序及其依赖项。应用程序可以在 Docker 容器中运行,而无需直接接触主机操作系统。Docker 使用名为“Docker 镜像”的特殊文件来构建和管理应用程序容器。

Docker 容器比虚拟机更轻量级。 Docker 容器不需要虚拟化管理程序,因此它们可以更快地启动和停止。 Docker 容器只需运行应用程序及其依赖项,而不需要运行整个操作系统。因此, Docker 容器所需的内存和存储空间比完整操作系统的虚拟机少得多。

Docker 容器还具有一些其他优点。例如,容器可以在任何支持 Docker 的操作系统上运行。容器还可以通过 Docker 镜像进行共享,而不需要共享整个操作系统。

Docker 和虚拟机的用途

虚拟机通常用于隔离不同的应用程序,以便它们不会干扰彼此。虚拟机还用于在安装多个操作系统的同一台物理机上运行多个应用程序。

Docker 容器通常用于在同一操作系统上隔离应用程序,以便它们不会彼此干扰。 Docker 容器还用于简化软件的部署和管理过程,使应用程序可以从开发环境轻松地部署到生产环境。

操作系统虚拟化技术

Docker 使用名为 cgroups(控制组) 和 namespaces (命名空间) 的操作系统虚拟化技术来实现容器化。

cgroups 允许您限制容器内的进程使用的 CPU、内存、磁盘 I/O 和网络带宽。进程可以在容器中运行,但无法使用超过所分配的资源。

命名空间允许您隔离容器的进程和文件系统。例如,每个容器都可以有自己的网络命名空间,以便容器内的进程可以使用独立的 IP 地址和网络配置。每个容器还可以有自己的文件系统,并可以重定向标准 I/O 流以与主机操作系统完全隔离。

Docker 架构

Docker 架构分为三个组件:Docker 客户端、Docker 主机和 Docker 仓库。

Docker 客户端是用于与 Docker 主机进行通信的软件。 Docker 主机是运行 Docker 容器的主机。 Docker 仓库是存储 Docker 镜像的中央位置。

Docker 客户端使用 Docker API 与 Docker 主机通信。 Docker API 是一组用于管理容器、镜像和其他 Docker 容器组件的 RESTful API。

Docker 主机可运行在物理或虚拟硬件上。主机上运行 Docker 守护程序,该程序负责管理容器和镜像。

Docker 仓库存储 Docker 镜像。 Docker 仓库有两种类型:公共和私有。公共 Docker 仓库是由 Docker 公司提供的中央仓库。任何人都可以在 Docker Hub 问公共 Docker 镜像。私有 Docker 仓库由企业自行创建和管理,以存储其私有 Docker 镜像。

Docker 镜像

Docker 镜像是 Docker 容器的元素。镜像是应用程序和它的所有依赖项的预构建文件。镜像包含应用程序代码、运行时库、系统工具、库、设置和其他依赖项。这使得 Docker 容器可以快速创建和启动,因为所有依赖项都在镜像中。

Docker 镜像是只读的。您不能更改现有的 Docker 镜像。如果您需要修改容器内的应用程序或配置,您需要使用镜像构建新的 Docker 容器。Docker 镜像是使用 Dockerfile 构建的,Dockerfile 是一个文本文件,其中包含指定如何构建容器的指令。

Docker 容器

Docker 容器是镜像的实例。容器是可以启动、停止、删除和修改的。

启动容器时,Docker 主机将使用 Docker 镜像创建容器。容器可以在主机操作系统上运行,但容器中运行的进程无法使用主机操作系统。相反,进程被隔离到 Docker 容器中的独立运行环境中。

通过 Docker 客户端或 API,可以轻松地管理 Docker 容器。可以使用 Docker 客户端来查看容器状态、停止容器、启动容器、从容器中提取文件等。

常见问题

Q:Docker 容器可以运行所有类型的应用程序吗?

A:不是。 Docker 容器通常适用于基于 Linux 的应用程序。 Windows 应用程序需要使用 Windows 容器。 Docker also supports macOS and windows which we would prefer discussing in another article.

Q:Docker 如何处理持久化数据?

A:Docker 容器通常用于运行无状态应用程序。 Docker 容器通常不应用于存储数据。如果容器需要持久化数据,更好将数据存储在 Docker 容器外部的持久化数据存储中。为此,可以在 Docker 主机上运行文件共享服务器,如 NFS、B 或 GlusterFS。

Q:Docker 镜像可以与 VMWare 或其他虚拟化技术一起使用吗?

A:是的。 Docker 镜像与虚拟机相比更轻量级。因此,Docker 镜像可以与虚拟机配合使用,以提高虚拟机的密度和资源利用率。

结论

Docker 容器是一种轻量级、可移植和易于部署的容器化技术。 Docker 技术的特点包括使用 Linux 操作系统级别的虚拟化技术、使用名为 cgroups 和 namespaces 的操作系统虚拟化技术、使用 Dockerfile 构建 Docker 镜像和使用 Docker 客户端或 API 管理 Docker 容器。 Docker 技术可用于简化部署和管理过程,使应用程序可以从开发环境轻松地部署到生产环境。

相关问题拓展阅读:

linux命令docker-v是空的

没有特权用户的情况下运行。使用了一些基于Linux的虚拟机,因此Docker命令可以在这些系统中没有特权用户的情况下运行,linux命令是对Linux系统进行管理的命令。对于Linux系统来丛则说,无论是中央处理器、内存、尺橘磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令渗困棚是它正常运行的核心,与之前的DOS命令类似。

最详尽教程完整介绍-Windows 的 Linux 子系统-WSL1&WSL2

必须启用“适用于 Linux 的 Windows 子系统”可选功能并重启,然后才能在 Windows 上运行 Linux 发行版。

以管理员运行Powershell(开启WSL,如已开启可跳过)

WSL 1 和 WSL 2 之间的主要区别在于,在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。

WSL2相比WSL1来说可以完美支持Docker。与WSL1的模拟Linux API不同的是,WSL2采用在Hyper-V

虚拟机

中运行的方案。可以说WSL2和原汁原味的Linux已经十分接近

不支持Docker的

守族数护进程

,但您可以使用 Docker CLI 连接到通过 Docker for Windows 或您创建的任何其他VM 运行的远程Docker守护进程

不能完全兼容systemctl, systemd等等,IO速度相对原生Linux也是大打折扣,在编译和解压方面可以很深体会到。毕竟不是真正的Linux,而是挂在Windows NT内核之上的仿Linux 系统

由于WSL 还不是原生的Linux,所以需要借助

Docker for Windows

来实现Docker(Docker for Windows 是基于Hyper-V 技术)

另外一种方式是,在WSL1中安装docker 客户端,连接 docker server, 来解决在WSL1上使用docker 的问题。(PS: Win10 的Linux 子系统是装不了 docker (服务端)的,但是可以安装客户端)

参考

WSL2 是第二代 WSL,包含手散在2023年5月正式发布 Windows 10 v2023 版中。相比之一代,新的 WSL2 重新设计了架构,使用真正的 Linux 内核,几乎具有 Linux 的所有完整功能。启用WSL2的 Linux 系统启动时间非常快,内存占用很少,并且,WSL 2 还可以直接原生运行 Docker,

VS Code

编辑器还有 Remote-WSL 插件,相对于完整的 linux 虚拟机只是不兆薯首支持 systemctl、systemd,不能直接运行图形桌面。Windows 也越来越向虚拟平台靠拢,Windows NT 内核和 Linux 内核都是运行在虚拟平台之上的,是平级的

如果发现VERSION为1,说明Ubuntu运行在WSL1下,可以升级到 WSL2。同样,WSL2也可以降级到WSL1。

wsl -l -v #查看已安装Linux版本和名称,完整命令格式:wsl –list –verbose

具体步骤参考 :

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能

wsl –set-version Ubuntu 2 #升级到WSL2,其中 Ubuntu 是已经安装的Linux名称,命令格式:wsl –set-version

启用WSL后,通过 \wsl$ 可以访问WSL文件

最初的WSL是在Windows之上模拟

Linux内核

,但是Windows和Linux之间存在如此基本的差异,以至于某些事情不可能以与本机Linux相同的行为实现,这意味着不可能直接在 WSL中运行 Docker Engine 和Kubernetes

在WSL1中,Docker Desktop通过Hyper-V虚拟机去运行docker环境的

升级到WSL2 之后, Docker Desktop 可以直接用 WSL2,直接运行在Linux 内核上了

通过如下设置,Docker Desktop就和WSL2分发版本进行了集成,无需在WSL中安装docker; 当然,也可以选择不与Docker Desktop集成,直接在WSL 中运行docker 容器。

启用WSL后,docker运行数据都在WSL发行版中,文件位置都只能由WSL管理

安装docker后,docker会自动创建2个发行版:

WSL发行版默认都是安装在

C盘

,在%LOCALAPPDATA%/Docker/wsl目录

docker的运行数据、

镜像文件

都存在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx中

通过 WSL 2 集成,您仍然可以体验到与 Windows 的无缝集成,但在 WSL 中运行的 Linux 程序也可以执行相同的操作。这对于从事面向 Linux 环境的项目或为 Linux 量身定制的构建过程的开发人员产生了巨大影响。不再需要维护 Linux 和 Windows 构建脚本!例如,Docker 的开发人员现在可以在 Windows 上的 Linux Docker 守护程序上工作,使用与 Linux 计算机上的开发人员相同的工具和脚本集:

注:WSL2 Docker最爽的地方是和宿主机Win10共享network,我们在宿主机Win10使用localhost加

端口号

就可以访问Docker中对应container中的服务,十分方便

wsl #启动

wsl –shutdown #关闭所有正在运行的 Linux 和 WSL 2

启动 WSL2 之后,会在

任务管理器

中发现多了一个 虚拟机工作线程

访问wsl 文件

卸载发行版

有时候某个Linux发行版不再使用,或者是环境被搞坏需要重装,这时候我们可以卸载掉这个Linux发行版。方法如下。

可以用docker代替虚拟机,运行生产服务器吗?

正面回答这个问题之前,先看看

虚拟机

和Dcoker的区别。

总结一下虚拟机和Docker的区别:

再正面回答一下“Docker可以代替虚拟机运行生产服务器么”?

应用部署到服务器上的过程: 因为我是做java开发的,就拿一个正常的java项目举例。首先需要在服务器上搭建基础环境:

这只是一个简单的项目的部署前的配置,之后把您的项目打包发送的tomcat,运行即可。那如果有十几个服务器需要部署呢?是不是就要配置配答旦环境十多次,那人不是崩溃了。而且还会出现开发那边运行没问题,部署上去有问题的事情。所以这个时候docker出来了。

应用部署到docker上的过程:

两步搞定,不需要配置复杂的环境。如果有十多个容器需要部署怎么办?直接远程下载镜像即可,是不是很简单。

docker适合平台统一在linux的大单位用,服务越多越好,比如几百、几千、几万。配合k8s调度和

微服务

改造、加上自动化运维,能够实现弹性扩容和缩容,达到on demand的效果,典型的

用例

是互联网内容提供商。

对于一般中小企业,只有几十台服务器的,平台不统一的,投资docker不如虚拟机。

除了不能跨os平台,docker的另一个缺陷是隔离度不够。

先说答案:可以,但是没有必要。

容器技术是

虚拟化技术

的应用,使用容器代替虚拟机运行程序自然是可以的,容器在

持续集成

方面相对虚拟机还有一定的优势,但是如果仅仅是为了用容器而用容器,则没有必要。

容器技术更大的优势是容器编排,可以实现线上服务的无缝扩容,缩容,降级,熔断等自动化操作,极大的降低运维成本培扰。所以,如果不用容器编排,则无须急着迁移。

理论上完全可以的,但目前我所接触到的生产方案基本上都是docker在虚机集群上跑。

看系统的要求了。docker不可能完全替代全部,windows服务器不可以,软件系统没有使用docker重新加载的,也是很难的。

用docker需要配合自动化,否则那是给自己找举敏麻烦

Docker创建linux虚拟机的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Docker创建linux虚拟机,Docker 造Linux虚拟机,linux命令docker-v是空的,最详尽教程完整介绍-Windows 的 Linux 子系统-WSL1&WSL2,可以用docker代替虚拟机,运行生产服务器吗?的信息别忘了在本站进行查找喔。


数据运维技术 » Docker 造Linux虚拟机 (Docker创建linux虚拟机)