我正在寻找一个 Ubuntu 虚拟机来使用,以便跟随 Linux 命令行的基础课程。
我在 VirtualBox 中安装了 Ubuntu,运行良好。
但是自从我安装了 Docker 之后,它就不再工作了,一直崩溃等等。
所以我想我会在 Docker 容器中使用 Ubuntu。
我拉取了标准的 docker 镜像:
https://hub.docker.com/_/ubuntu
并且能够通过docker run --name ubuntu002 -it ubuntu bash
但它缺少许多命令,例如systemctl
,等等less
。sudo
那么,是否可以将 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 更稳定/性能更好、更易于使用。