'--rm' 标志在做什么?

What is the '--rm' flag doing?

我是第一次尝试 Docker,还没有“心智模型”。初学者。

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

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

问题:

为什么这些命令包含 --rm 标志?我会想,如果我要经历设置或下载其中包含好东西的容器的麻烦,为什么要删除它?我想保留它以供再次使用。

所以,我知道我对Docker的想法是错误的。

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

您应该将容器视为您的应用程序的实例,但您的应用程序是嵌入到图像中的。 正确的用法是创建自定义图像,将所有文件、配置、环境变量等嵌入到图像中。详细了解 Docker 文件及其完成方式 here

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

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

标志--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

By default a container’s file system persists even after the container exits. This makes debugging a lot easier (since you can inspect the final state) and you retain all your data by default. But if you are running short-term foreground processes, these container file systems can really pile up. If instead you’d like Docker to automatically clean up the container and remove the file system when the container exits, you can add the --rm flag

简而言之,让主机远离已停止和未使用的容器非常有用。

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

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