在容器中运行的 Docker Ubuntu 镜像与常规 Ubuntu 系统有何区别?

在容器中运行的 Docker Ubuntu 镜像与常规 Ubuntu 系统有何区别?

我正在寻找一个 Ubuntu 虚拟机来使用,以便跟随 Linux 命令行的基础课程。

我在 VirtualBox 中安装了 Ubuntu,运行良好。

但是自从我安装了 Docker 之后,它就不再工作了,一直崩溃等等。

所以我想我会在 Docker 容器中使用 Ubuntu。

我拉取了标准的 docker 镜像: https://hub.docker.com/_/ubuntu 并且能够通过docker run --name ubuntu002 -it ubuntu bash

但它缺少许多命令,例如systemctl,等等lesssudo

在此处输入图片描述

那么,是否可以将 Ubuntu Docker 容器用作常规 Ubuntu 系统,或者它是某种不完整的 Ubuntu 系统?

答案1

Docker 容器的构建目标通常与在裸机或虚拟机上运行的机器不同。

大多数程序都可以安装到容器中,例如,我能够在运行后使用 apt-get 安装“less”和“systemctl” apt-get update

默认的 Ubuntu 容器安装较少程序的原因在于容器应该很小、启动很快、并且尽可能少地占用磁盘/CPU/RAM。

尽管如此,Ubuntu Docker 镜像很可能有一些与典型 Ubuntu 安装不同的定制,并且行为会略有不同。例如,如果您使用上述命令启动 Ubuntu 容器,则不会有正在运行的后台任务,也没有服务守护程序。

这个想法是,如果您需要在容器内运行“Ubuntu 应用程序”,而容器运行于其他操作系统之上,则您不需要 Ubuntu 来管理系统的时钟或 USB 端口,因为这些由主机操作系统处理,您只需要运行“Ubuntu 应用程序”,而不需要其他任何东西。考虑到这一点,您通常不会想要安装“systemctl”。

如果您想在 Ubuntu 容器内运行 Web 服务器,则可以使用“nginx”可执行文件启动容器,而不是使用“bash”可执行文件启动容器,并且不需要任何其他东西。

答案2

Ubuntu(或任何发行版)的 Docker 映像是一个精简版本,仅包含完整安装中的软件包子集。

然而,你安装任何软件包以提供所需的功能,但请记住,Docker 容器在设计上不提供对整个主机架构的访问,包括主机提供的某些功能,如日志记录和网络。这可能会或可能不会影响您在基本 Linux CLI 课程中的学习。

# apt list --installed

将显示已安装的软件包。要查找哪个软件包包含您缺少的命令,apt-file 将有所帮助。

https://askubuntu.com/questions/481/how-do-i-find-the-package-that-provides-a-file

值得一提的是,KVM/qemu 已经安装在 Ubuntu 中,如果您决定采用这种方式,我发现它比 VirtualBox 更稳定/性能更好、更易于使用。

相关内容