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

时间:2018-01-27 12:05:17

标签: ubuntu docker docker-image

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

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

拉ubuntu
docker run -it ubuntu bash

并在此ubuntu中安装该软件。

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

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

2 个答案:

答案 0 :(得分:3)

你可以:

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

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

    docker run --name app1 ubuntu / bin / bash

    docker run --name app2 ubuntu / bin / bash

然后,您可以使用 commit 保存它们的图像。如有必要,也可以开始,停止并进入。

答案 1 :(得分:1)

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