Docker深入理解

来深入理解一下容器和镜像的区别

docker start run docker start run 区别_元数据

镜像:镜像就是一堆只读层,它们重叠在一起,上面一层会有一个指针指向下一层

容器:就是在镜像top层加了一个可读可写的层

docker create

docker start run docker start run 区别_docker start run_02

docker create 命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。注意,这个容器并没有运行

docker start

docker start run docker start run 区别_docker start run_03

Docker start命令为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。

docker run

docker start run docker start run 区别_docker start run_04

docker run命令实际上就是docker create 和 docker start两个命令的结合

docker stop

docker start run docker start run 区别_元数据_05

docker stop命令会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程

docker rm

docker start run docker start run 区别_docker_06

docker commit

docker start run docker start run 区别_docker_07

docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像

docker start run docker start run 区别_docker_08

docker bulid

docker build命令非常有趣,它会反复的执行多个命令

我们从上图可以看到,build命令根据Dockerfile文件中的FROM指令获取到镜像,然后重复地1)run(create和start)、2)修改、3)commit。在循环中的每一步都会生成一个新的层,因此许多新的层会被创建。

docker save

docker save命令会创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用。和export命令不同,这个命令为每一个层都保存了它们的元数据。这个命令只能对镜像生效。

docker export

docker export命令创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容(译者注:expoxt后 的容器再import到Docker中,通过docker images –tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像)

docker history

docker history命令递归地输出指定镜像的历史镜像