docker run:为什么要使用--rm(docker newbie)

时间:2018-04-09 05:43:42

标签: docker

我是第一次尝试使用码头工具而且还没有#34;心理模型"。初学者总数。

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

docker run -it --rm ...

我的问题:为什么" - rm"。我想如果我设置或下载容器中有好东西的麻烦,为什么要删除它,我想让它再次使用。

所以,我知道我对docker有错误的想法。

5 个答案:

答案 0 :(得分:39)

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

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

执行此操作后,您将拥有包含所有内容的图像,并且为了使用您的应用程序,您只需使用docker run <your-image>

运行具有正确端口设置或其他动态变量的图像

运行带有--rm标志的容器适用于那些你用得很短的容器而只是为了完成某些事情,例如,在容器内编译你的应用程序,或者只测试它工作的东西,然后你就是知道它是一个短暂的容器,你告诉你的Docker守护程序,一旦它完成运行,擦除与之相关的所有内容并保存磁盘空间。

答案 1 :(得分:7)

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

  

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

简而言之:将主机从已停止和未使用的容器中保持清洁是有用的。

答案 2 :(得分:5)

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

这适用于小型测试或POC用途,可以减少家务管理的麻烦。

答案 3 :(得分:1)

我在连接到正在运行的容器时使用--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

以上内容将连接名为&#39; app_postgres_1&#39;的正在运行的容器。并创建一个备份。备份命令完成后,将完全删除容器。

答案 4 :(得分:1)

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

因此,当您在容器内进行操作并键入 exitctrl+z 或以任何其他方式从容器中出来时(ctrl+p+q 除外),您的容器退出。这意味着您的容器已停止,但它仍然在您的磁盘上可用,您可以使用:docker start container-name/ID 重新启动它。 但是当您运行带有 —rm 标签的容器时,在退出时,容器会被永久删除。