如何通过docker在同一主机上安装多个ubuntu映像?

如何通过docker在同一主机上安装多个ubuntu映像?,ubuntu,docker,docker-image,Ubuntu,Docker,Docker Image,我需要通过主机中的数据分析软件执行多线程运行。 但是我发现如果直接使用多线程,派生的结果会相互冲突。可能是因为公共参数是共享的 所以我想多次安装软件,同时运行这些软件。我可以通过 docker run -it ubuntu bash 并在这个ubuntu中安装软件 但是如何多次从存储库中提取ubuntu呢?我需要不同的ubuntus,这是真正安装在主机上。现在,一旦安装了第一个ubuntu,如果我再次使用docker run-it ubuntu bash,只会生成一个新的映像,而不是一个占用磁

我需要通过主机中的数据分析软件执行多线程运行。 但是我发现如果直接使用多线程,派生的结果会相互冲突。可能是因为公共参数是共享的

所以我想多次安装软件,同时运行这些软件。我可以通过

docker run -it ubuntu bash
并在这个ubuntu中安装软件

但是如何多次从存储库中提取ubuntu呢?我需要不同的ubuntus,这是真正安装在主机上。现在,一旦安装了第一个ubuntu,如果我再次使用docker run-it ubuntu bash,只会生成一个新的映像,而不是一个占用磁盘空间的真实系统

容器是分开的,但是如果软件只在主机中安装一次,如何避免常见的参数问题?如何在主机上安装软件5次?

您可以:

  • 为要安装的每组应用程序创建Dockerfile,并生成命名/标记的映像。这将更加整洁,易于复制

  • 或者,将要创建的容器命名为:

    docker run——名称为app1 ubuntu/bin/bash

    docker run——名称为app2 ubuntu/bin/bash

然后您可以使用提交保存它们的图像。如有必要,也可以启动、停止和输入。

您可以:

  • 为要安装的每组应用程序创建Dockerfile,并生成命名/标记的映像。这将更加整洁,易于复制

  • 或者,将要创建的容器命名为:

    docker run——名称为app1 ubuntu/bin/bash

    docker run——名称为app2 ubuntu/bin/bash


然后您可以使用提交保存它们的图像。如有必要,也可以启动、停止和输入。

Docker/OCI映像是一个不可变的对象。将图像作为容器运行不会修改图像,容器会将任何文件系统更改分层到图像顶部。您运行的每个容器都是一个单独的实体,在其自己的名称空间中运行,并带有自己的文件系统更改。每个容器都有唯一的ID引用

在大多数情况下,你会创建一个
Dockerfile
来描述你在ubuntu上需要的所有常见软件安装和配置

FROM ubuntu:16.04
RUN apt-get update && apt-get install mydeps
您可以构建并标记它

$ docker build -t me/myapp .
然后,当您运行映像时,将创建一个与映像和正在运行的任何其他容器分开的新容器:

$ docker run -ti me/myapp bash
root@28cfd02a55b1:/# echo test > /test
root@28cfd02a55b1:/# cat /test
test
在第二个容器中,该文件将不存在

$ docker run -ti me/myapp bash
root@39584fb744a9:/# cat /test
cat: /test: No such file or directory
在主机上,您可以看到每个容器实例都带有
docker ps

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED              STATUS              PORTS                    NAMES
39584fb744a9        me/myapp                     "bash"                   21 seconds ago       Up 20 seconds                                kind_brattain
28cfd02a55b1        me/myapp                     "bash"                   About a minute ago   Up About a minute                            blissful_thompson

Docker/OCI映像是一个不可变的对象。将图像作为容器运行不会修改图像,容器会将任何文件系统更改分层到图像顶部。您运行的每个容器都是一个单独的实体,在其自己的名称空间中运行,并带有自己的文件系统更改。每个容器都有唯一的ID引用

在大多数情况下,你会创建一个
Dockerfile
来描述你在ubuntu上需要的所有常见软件安装和配置

FROM ubuntu:16.04
RUN apt-get update && apt-get install mydeps
您可以构建并标记它

$ docker build -t me/myapp .
然后,当您运行映像时,将创建一个与映像和正在运行的任何其他容器分开的新容器:

$ docker run -ti me/myapp bash
root@28cfd02a55b1:/# echo test > /test
root@28cfd02a55b1:/# cat /test
test
在第二个容器中,该文件将不存在

$ docker run -ti me/myapp bash
root@39584fb744a9:/# cat /test
cat: /test: No such file or directory
在主机上,您可以看到每个容器实例都带有
docker ps

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED              STATUS              PORTS                    NAMES
39584fb744a9        me/myapp                     "bash"                   21 seconds ago       Up 20 seconds                                kind_brattain
28cfd02a55b1        me/myapp                     "bash"                   About a minute ago   Up About a minute                            blissful_thompson

这还不清楚-您可以自由同时运行(通过
docker run
)多个容器。所以我不确定你在描述什么问题?(我不知道你所说的“生成了新映像,而不是占用磁盘空间的真实系统”是什么意思。)@oliver一旦安装了该软件,它就会出现在主机上,比如/var/lib/docker/overly2/…如果它不出现在该目录中,并且没有新的磁盘空间被占用,我担心常见的参数问题。我不想只在不同的容器中运行软件。我希望软件真的安装在主机上。这没有多大意义-如果你想让东西“真的安装在主机上”,那么你为什么要使用Docker?@Oliver Dependencies如果软件在主机上安装多次会很混乱。那么你的问题是什么?这不清楚-你可以自由运行(通过
docker同时运行
)多个容器。因此我不确定您在这里描述的问题是什么?(我不确定您所说的“生成新映像,而不是占用磁盘空间的真实系统”是什么意思。)@oliver一旦安装了软件,它就会出现在主机上,比如说,在/var/lib/docker/overlay2/…如果它不出现在该目录下,并且没有新的磁盘空间被占用,我担心常见的参数问题。我不想只在不同的容器中运行软件。我希望软件真正安装在主机上。这是d如果你想让东西“真正安装在主机上”,那就没什么意义了那你为什么要用Docker?@Oliver Dependencies如果在主机上多次安装该软件会很混乱。那么你的问题是什么?只有一个应用程序。第一种方法意味着会制作许多包含该软件的图像,对吗?但它们不会占用新的磁盘空间。我想要一种方法,每个ubuntu都完全独立于e每个软件都是独立的。两种方式都是独立的(应用程序、配置、文件系统)。由于docker images分层机制,只要文件不被修改,他们就只会共享磁盘空间。只有一个应用程序。第一种方式意味着将制作包含该软件的许多图像,对吗?但它们不会占用新的磁盘空间。我想要一种方式,即每个ubuntu都完全独立。然后每个软件都是独立的这两种方式都是独立的(应用程序、配置、文件系统)。由于docker images layer mechanism.S的原因,只要文件未被修改,它们将只共享磁盘空间