docker机器和docker容器获取了相同的Ubuntu图像,但docker机器中有更多的二进制文件

docker机器和docker容器获取了相同的Ubuntu图像,但docker机器中有更多的二进制文件,docker,containers,Docker,Containers,我创建了一个容器并登录 docker run -it -d ubuntu bash 选中的fdisk-lits不可用 但当我使用以下方法创建机器时: docker-machine create -d "virtualbox" --swarm-image "ubuntu" dev3 命令fdisk在机器中可用 问:我猜二进制文件来自图像,这是怎么发生的?如何添加fdisk,而无需创建自定义映像或在创建容器后安装它 同一主机您的两个命令执行完全不同的操作 在第一种情况下,您将下拉ubuntud

我创建了一个容器并登录

docker run -it -d ubuntu bash
选中的
fdisk-l
its不可用

但当我使用以下方法创建机器时:

docker-machine create -d "virtualbox" --swarm-image "ubuntu"  dev3
命令
fdisk
在机器中可用

问:我猜二进制文件来自图像,这是怎么发生的?如何添加
fdisk
,而无需创建自定义映像或在创建容器后安装它


同一主机

您的两个命令执行完全不同的操作

在第一种情况下,您将下拉
ubuntu
docker图像并启动一个容器

在第二种情况下,您正在Virtualbox中使用名为
ubuntu
的VM映像构建一个虚拟机。这是一个完全不同的操作,
ubuntu
vm映像与
ubuntu
容器映像无关。实际引导一台机器所需的最小软件包集远远大于启动一个容器所需的软件包集,因此,虚拟机中有容器映像中找不到的软件包也就不足为奇了

例如,容器不与块设备交互,因此无需安装
fdisk
。如果您真的需要容器映像中的
fdisk
(这同样不太可能,尽管在某些用例中这是有意义的),那么您可以从Dockerfile构建自定义映像。例如:

FROM ubuntu:eoan
RUN apt-get update; apt-get -y install fdisk

您的两个命令所做的事情完全不同

在第一种情况下,您将下拉
ubuntu
docker图像并启动一个容器

在第二种情况下,您正在Virtualbox中使用名为
ubuntu
的VM映像构建一个虚拟机。这是一个完全不同的操作,
ubuntu
vm映像与
ubuntu
容器映像无关。实际引导一台机器所需的最小软件包集远远大于启动一个容器所需的软件包集,因此,虚拟机中有容器映像中找不到的软件包也就不足为奇了

例如,容器不与块设备交互,因此无需安装
fdisk
。如果您真的需要容器映像中的
fdisk
(这同样不太可能,尽管在某些用例中这是有意义的),那么您可以从Dockerfile构建自定义映像。例如:

FROM ubuntu:eoan
RUN apt-get update; apt-get -y install fdisk

例如,如果我负责dockerhub中的一个特定映像,我必须为VM和容器创建不同的映像?Docker与VM没有任何关系。如果您负责Docker hub中的特定映像,则该映像只是一个容器映像。
docker machine
工具用于创建运行docker的虚拟机。它并不是一个通用的部署工具。我想了解docker机器从何处获取二进制文件,你能给我指一些链接吗?我还没有使用docker机器(我在Linux上本机运行docker),所以我不确定它从何处获取vm映像。然后问题仍然存在。。。我从docker.io
docker.io/xx/xx/x
获取图像,并在机器和容器中使用相同的url。所以图像是一样的。例如,如果我负责dockerhub中的一个特定图像,我必须为VM和容器创建不同的图像?Docker与VM没有任何关系。如果您负责Docker hub中的特定映像,则该映像只是一个容器映像。
docker machine
工具用于创建运行docker的虚拟机。它并不是一个通用的部署工具。我想了解docker机器从何处获取二进制文件,你能给我指一些链接吗?我还没有使用docker机器(我在Linux上本机运行docker),所以我不确定它从何处获取vm映像。然后问题仍然存在。。。我从docker.io
docker.io/xx/xx/x
获取图像,并在机器和容器中使用相同的url。所以图像是一样的。