什么是’-rm’标志做什么?

我正在尝试 Docker 的第一次,还没有一个“心理模型”。完全初学者。

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

docker run -it --rm ...
docker container run -it --rm ...

问题:

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

我知道我对多克的看法是错的。

94187 次浏览

容器只是用于运行它们的映像的一个实例。 当创建一个容器化的应用程序时,心态不是拿一个新的,干净的 ubuntu 容器为例,下载你希望在其中有的应用程序和配置,然后让它运行。

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

这样做之后,您就拥有了一个包含所有内容的映像,为了使用您的应用程序,您只需使用适当的端口设置或其他动态变量(使用 docker run <your-image>)运行该映像即可

运行带有 --rm标志的容器对于那些只是为了完成某些事情而使用的容器来说是很好的,例如,在一个容器中编译你的应用程序,或者只是测试一些它可以工作的东西,然后你知道它是一个短命的容器,你告诉你的 Docker 守护进程,一旦它运行完毕,删除与它相关的所有东西并节省磁盘空间。

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

这是适合于小型测试或 POC 的目的,并节省了头痛的家政管理。

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

docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db

上面的代码将连接一个名为‘ app _ postgres _ 1’的运行容器并创建一个备份。一旦备份命令完成,容器就会被完全删除。

来自 https://docs.docker.com/engine/reference/run/#clean-up---rm

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

简而言之,保持主机不受停止和未使用的容器的干扰是有用的。

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

因此,当您在容器中并处理它时,您输入 exitctrl+z或任何其他方式来从容器中出来,而不是 ctrl+p+q,您的容器将退出。这意味着您的容器已经停止,但是它仍然可以在磁盘上使用,您可以使用: docker start container-name/ID重新启动它。 但是当您使用 —rm标记运行容器时,在退出时,容器将被永久删除。

“ docker run rm”命令使我们运行一个新的容器,然后当我们的工作完成后,通过节省磁盘空间将其删除。

需要注意的重要一点是,容器就像一个类实例,而不是用于数据存储。我们最好在工作完成后删除它们。当我们重新开始的时候,一切都会重新开始。

问题来了,如果容器被删除,那么容器中的数据怎么办?数据实际上保存在本地系统中,并在容器启动时链接到它。这个概念被命名为“卷或共享卷”。