运行和启动Docker容器之间的区别

时间:2016-01-14 06:04:08

标签: docker

在实践中开始我做的容器:

docker run a8asd8f9asdf0

如果是这样,那会是什么:

docker start

办?

在手册中说

  

启动一个或多个已停止的容器

5 个答案:

答案 0 :(得分:215)

这是一个非常重要的问题,答案非常简单,但基本:

  1. 运行:创建图像的新容器,然后执行容器。您可以创建相同图像的N个克隆。命令是: docker run IMAGE_ID 而不是 docker run CONTAINER_ID
  2. enter image description here

    1. 开始:启动先前已停止的容器。例如,如果您使用命令docker stop CONTAINER_ID停止了数据库,则可以使用命令docker start CONTAINER_ID重新启动同一容器,并且数据和设置将相同。
    2. enter image description here

答案 1 :(得分:86)

  • run运行图片
  • start启动容器

docker run doc确实提到了:

  

docker run命令首先在指定的图像上创建一个可写容器图层,然后使用指定的命令启动它。

     

也就是说,docker run等同于API /containers/create,然后是/containers/(id)/start

do not run an existing container, you docker exec to it (since docker 1.3) 你可以restart an exited container

答案 2 :(得分:8)

run命令从映像创建一个容器,然后在该容器上启动根进程。使用run --rm标志运行它可以为您省去事后删除无用的死容器的麻烦,并使您完全忽略docker startdocker remove的存在。

enter image description here

run命令执行一些不同的操作:

docker run --name dname image_name bash -c "whoami"
  1. 从图像创建容器。此时,容器将有一个ID,如果有容器,则可能有一个名称,它将显示在docker ps
  2. 启动/执行容器的根进程。在上面的代码中,将执行bash -c "whoami"。如果在没有命令执行容器的情况下运行docker run --name dname image_name,则会立即进入停止状态。
  3. 根进程完成后,容器将停止。在这一点上,它几乎没有用。一个人不能再执行任何操作或使该容器复活。基本上有两种退出停止状态的方法:从停止的容器中删除容器或创建检查点(即映像)以运行其他内容。在以相同名称启动容器之前,必须先运行docker remove

如何在容器自动停止后删除容器? --rm命令中添加run标志:

docker run --rm --name dname image_name bash -c "whoami"

如何在单个容器中执行多个命令? 通过防止该根进程死亡。这可以通过在--detached标志开始处运行一些无用的命令,然后使用“ execute”运行实际命令来完成:

docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"

那为什么我们需要docker stop 要停止我们在上一代码段中使用无穷命令tail -f /dev/null启动的这个挥之不去的容器。

答案 3 :(得分:0)

daniele3004的答案已经很好。

对于像我这样不时混淆runstart的人来说,这只是一个又快又脏的公式:

docker run [...] = docker pull [...] + docker start [...]

答案 4 :(得分:0)

运行-使用图像和开始相同的容器创建。 (创建并开始)

enter image description here

启动-启动泊坞窗中处于停止状态的容器。

enter image description here