Docker 指令/命令
**docker create \<image-id>**
>i为指定的镜像添加一个可读写层,构成一个新的容器,注意,这个容器并没有运行。
**docker start \<container-id>**
>i为容器文件系统创建一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。
**docker run \<image-id>**
>i先利用镜像创建一个容器,然后运行这个容器,这个命令非常方便,并且隐藏了命令的细节,但从另一方面来看,这容易让用户产生误解。
**docker run == docker create + docker start**
**docker ps**
>i列出所有运行中的容器。这隐藏了非运行态容器的存在,如果想找出这些容器,我们需要使用下面这个命令
**docker ps -a**
>i列出所有的容器,不管是运行的,还是停止的。
**docker images**
>i列出所有顶层(top-level)镜像。实际上,在这里我们没有办法区分一个镜像和一个只读层,所以我们提出了top-level镜像。只有创建容器时使用的镜像或者直接pull下来镜像能被称为顶层(top-level)镜像,并且每一个顶层镜像下面都隐藏了多个镜像层。
**docker images -a**
>i列出所有的镜像,也可以说是列出了所有的可读层,如果你想查看某一个image-id下的所有层,可以使用docker history来查看。
**docker stop \<container-id>**
>i会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程。
**docker kill \<container-id>**
>i向所有运行在容器中的进程发送了一个不友好的SIGKILL信号。
**docker pause \<container-id>**
>iDocker stop 和docker kill 命令会发送UNIX的信号给运行中的进程,docker pause则不一样,它利用了cgroups的特性,将运行中的进程空间暂停,具体内部原理你可以在这里找到:++https://www.kernel.org/doc/Documentation/cgroups/freezer-subsystem.txt++ 但是这种方式不足之处在于发送一个SIGTSTP信号对于进程来说不够简单易懂,以至于不能够让所有的进程暂停
**docker rm \<container-id>**
>i会移除构成容器的可读写层,注意,这个命令只能对非运行态容器执行。
**docker rmi \<image-id>**
>i会移除构成镜像的一个只读层。你只能够使用docker rmi来移除最顶层(top level layer)(也可以说是镜像),你也可以使用-f参数来强制删除中间的只读层。
**docker commit \<container-id>**
>i将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。
**docker build**
>i会反复执行对个命令。
Build会根据docker file文件中的FROM指令获取到镜像,然后重复的1) run(create and start)、2)修改、3)commit。在循环中的每一步都会生产一个新的层,因此许多新的层会被创建。
**docker exec \<running-container-id>**
>i会在运行中的容器内执行一个新进程。
**docker inspect \<container-id> or \<image-id>**
>i会提取出容器或镜像最顶层的元数据。
**docker save \<image-id>**
>i会创建一个镜像的压缩文件,这个文件能够在另外一个主机的docker上使用,和export命令不同,这个命令为每一个层都保存了他们的元数据,这个命令只能对镜像生效。
**docker export \<container-id>**
>i创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成一个层,只保存了当前统一视角看到的内容(译者注:export后的容器在import到docker中,通过docker images-tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像)。
**docker history \<image-id>**
>i递归的输出指定镜像的历史镜像。