Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker run:为什么使用--rm(docker新手)_Docker_Docker Container - Fatal编程技术网

docker run:为什么使用--rm(docker新手)

docker run:为什么使用--rm(docker新手),docker,docker-container,Docker,Docker Container,我第一次尝试docker,但还没有一个“心智模型”。完全是初学者 我正在查看的所有示例都包含要运行的--rm标志,例如 docker run -it --rm ... docker container run -it --rm ... 问题: 为什么这些命令包含--rm标志?我会想,如果我要经历设置或下载一个包含好东西的容器的麻烦,为什么要删除它?我想把它留着再用 因此,我知道我对docker的看法是错误的。容器只是运行它们时所使用的映像的一个实例。 创建容器化应用程序时的心态不是以一个全新的

我第一次尝试docker,但还没有一个“心智模型”。完全是初学者

我正在查看的所有示例都包含要运行的
--rm
标志,例如

docker run -it --rm ...
docker container run -it --rm ...
问题:

为什么这些命令包含
--rm
标志?我会想,如果我要经历设置或下载一个包含好东西的容器的麻烦,为什么要删除它?我想把它留着再用


因此,我知道我对docker的看法是错误的。

容器只是运行它们时所使用的映像的一个实例。 创建容器化应用程序时的心态不是以一个全新的、干净的ubuntu容器为例,下载你想要的应用程序和配置,然后让它运行

您应该将容器视为应用程序的实例,但应用程序是嵌入到映像中的。 正确的用法是创建一个自定义映像,在该映像中嵌入所有文件、配置、环境变量等。阅读有关Dockerfile的更多信息以及它是如何完成的

一旦您这样做了,您就有了一个包含所有内容的映像,为了使用您的应用程序,您只需使用适当的端口设置或其他动态变量运行映像,使用
docker run

运行带有
--rm
标志的容器对于那些只在很短的时间内用于完成某些任务的容器来说是很好的,例如,在容器中编译应用程序,或者只是测试它的工作情况,然后您知道它是一个短寿命的容器,并告诉Docker守护进程一旦完成运行,擦除与它相关的所有内容并保存磁盘空间。

当您需要在容器任务完成后删除容器时,将使用标志
--rm

这适用于小型测试或POC目的,省去了内务的麻烦。

我在连接到运行的容器时使用
--rm
执行一些操作,如数据库备份或文件复制。以下是一个例子:

docker run-v$(pwd):/mnt-link app\U postgres\U 1:pg-rm postgres:9.5 pg\U dump-U postgres-h pg-f/mnt/docker\U pg.dump1 app\U db

上面将连接名为“app_postgres_1”的运行容器并创建备份。备份命令完成后,容器将被完全删除

来自

默认情况下,即使在容器退出后,容器的文件系统仍然存在。这使得调试更加容易(因为可以检查最终状态),并且默认情况下保留所有数据。但是,如果您正在运行短期的前台进程,这些容器文件系统可能会堆积起来。如果您希望Docker在容器退出时自动清理容器并删除文件系统,则可以添加
--rm
标志


简言之,保持主机与停止的和未使用的容器保持清洁是很有用的。

当您使用一个简单的命令(如(
docker run-it ubuntu
)从映像运行容器时,它会启动一个容器。您可以使用
docker attach container name
(或针对不同会话使用
exec
)连接到容器

因此,当您在容器中处理它时,您键入
exit
ctrl+z
或任何其他方式(除了
ctrl+p+q
)以退出容器,容器就会退出。这意味着您的容器已停止,但它仍在磁盘上可用,您可以使用以下命令重新启动它:
docker start container name/ID

但是,当您运行带有
-rm
标记的容器时,在退出时,容器将被永久删除。

--rm
将删除停止的容器(docker run创建的容器),而不是它所基于的图像(您下载的内容)。
docker run--help
。如果您不想删除容器,您可以传递它,它必须是
--rm
,它是在容器退出时自动清理容器并删除文件系统,这并不意味着从容器中删除内容。您不下载容器,而是下载图像。阅读此处了解图像和容器之间的区别:将环境变量传递给docker run是更好的选择吗。通过这种方式,您可以从不同的配置开始(例如,生产与预生产)?产品与测试环境是一个很好的例子,您可能希望使用env vars进行分离,并让您的应用程序从同一映像运行,但是,通过对每个envIs的不同设置,可以在用户关闭终端窗口时自动删除使用
--rm
启动的容器。i、 e不要故意在容器外壳中运行
exit
,而只是关闭终端GUI窗口。我注意到在这种情况下容器不会被删除。