我是第一次尝试使用码头工具而且还没有#34;心理模型"。初学者总数。
我正在查看的所有示例都包含要运行的-rm标志,例如
docker run -it --rm ...
我的问题:为什么" - rm"。我想如果我设置或下载容器中有好东西的麻烦,为什么要删除它,我想让它再次使用。
所以,我知道我对docker有错误的想法。
答案 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
)附加到您的容器。
因此,当您在容器内进行操作并键入 exit
或 ctrl+z
或以任何其他方式从容器中出来时(ctrl+p+q
除外),您的容器退出。这意味着您的容器已停止,但它仍然在您的磁盘上可用,您可以使用:docker start container-name/ID
重新启动它。
但是当您运行带有 —rm
标签的容器时,在退出时,容器会被永久删除。