我需要通过主机中的数据分析软件来运行多线程。 但我发现如果我直接使用多线程,导致的结果会相互冲突。可能是因为共享参数。
所以我想多次安装软件并同时运行软件。我可以通过
拉ubuntudocker run -it ubuntu bash
并在此ubuntu中安装该软件。
但是如何多次从存储库中取出ubuntu?我需要不同的ubuntus,它们确实安装在主机中。现在,一旦安装了第一个ubuntu,如果我再次使用docker run -it ubuntu bash
,只会生成一个新图像,而不是占用磁盘空间的真实系统。
容器是分开的,但如果软件只在主机中安装一次,如何避免常见参数问题?如何在主机中真正安装软件5次?
答案 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