目录

Docker 的容器与镜像

原文链接

命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看当前运行的所有容器
docker ps -a

# 停止所有容器(container),这样才能够删除其中的images:
docker stop $(docker ps -a -q)

# 如果想要删除所有容器(container)的话再加一个指令:
docker rm $(docker ps -a -q)

# 查看当前有那些镜像(images)
docker images

# 删除镜像(images),通过镜像(images)的id来指定删除谁
docker rmi <image id>

# 想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

# 要删除全部镜像(images)的话
docker rmi $(docker images -q)

概览

如图所示,镜像就是一些只读层,而容器就是一些读写层。

/zh-cn/posts/image_and_container/2021-12-22-16-54-17.png

定义

镜像(image)

镜像就是一堆只读层的统一视角。除了最下面一层,其它层都会有一个指针指向下一层。在用户的角度这是一个统一文件系统。

/zh-cn/posts/image_and_container/2021-12-22-16-55-58.png

容器(container)

容器 = 镜像 + 读写层。并且容器的定义并没有提及是否要运行容器。

/zh-cn/posts/image_and_container/2021-12-22-16-56-24.png

运行态容器(running container)

运行态容器=容器+隔离的进程空间+进程。

/zh-cn/posts/image_and_container/2021-12-22-17-20-59.png

如下图所示,一个容器中进程的行为会作用于读写层。

/zh-cn/posts/image_and_container/2021-12-22-17-24-44.png

镜像层(image layer)

结合命令理解

docker create image-id

为一个镜像添加一个读写层形成一个容器。容器创建后没有运行。

/zh-cn/posts/image_and_container/2021-12-22-17-30-22.png /zh-cn/posts/image_and_container/2021-12-22-17-31-58.png

docker start container-id

为容器创建一个进程隔离空间。

/zh-cn/posts/image_and_container/2021-12-22-17-33-59.png

docker run image-id

run = creat + start

/zh-cn/posts/image_and_container/2021-12-22-17-36-05.png

/zh-cn/posts/image_and_container/2021-12-22-17-36-18.png

docker ps

列出运行态容器

/zh-cn/posts/image_and_container/2021-12-22-17-37-16.png

docker ps –a

列出所有容器

/zh-cn/posts/image_and_container/2021-12-22-17-44-47.png

docker images

列出所有的顶层镜像。顶层镜像是指创建容器所使用的镜像或能直接被pull下来的镜像。

/zh-cn/posts/image_and_container/2021-12-22-19-44-26.png

docker images –a

列出所有镜像。

/zh-cn/posts/image_and_container/2021-12-22-19-45-35.png

docker stop container-id

向运行的容器发出SIGTERM信号停止所有进程。

/zh-cn/posts/image_and_container/2021-12-22-19-46-39.png

docker kill container-id

向运行的容器发出SIGKILL信号停止所有进程。

/zh-cn/posts/image_and_container/2021-12-22-19-48-47.png

docker pause container-id

使用cgroups freezer暂停所有容器内进程. 发送信号SIGTSTP。

/zh-cn/posts/image_and_container/2021-12-22-20-12-25.png

docker rm container-id

移除可读写层(容器)。

/zh-cn/posts/image_and_container/2021-12-22-20-49-27.png

docker rmi image-id

移除镜像。

OPTIONS说明:

  • -f :强制删除;
  • –no-prune :不移除该镜像的过程镜像,默认移除;

当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中指定的标签而已,并不会影响原始的那个镜像文件。如果某个镜像不存在多个标签,当且仅当只有一个标签时,执行删除命令时,就要小心了,这会彻底删除镜像所有文件层。

/zh-cn/posts/image_and_container/2021-12-22-21-16-29.png

docker commit container-id

将容器的可读写层转换为只读层,容器转化为镜像。

/zh-cn/posts/image_and_container/2021-12-22-21-17-05.png /zh-cn/posts/image_and_container/2021-12-22-21-17-16.png

docker build

build命令根据Dockerfile文件中的FROM指令获取到镜像,然后重复地

  1. run(create和start)
  2. 修改
  3. commit

在循环中的每一步都会生成一个新的层,因此许多新的层会被创建。

/zh-cn/posts/image_and_container/2021-12-22-21-30-30.png /zh-cn/posts/image_and_container/2021-12-22-21-30-52.png

docker exec running-container-id

在运行中的容器中执行一个进程

/zh-cn/posts/image_and_container/2021-12-22-21-32-35.png

docker inspect container-id or image-id

提取容器或者镜像的元数据。

/zh-cn/posts/image_and_container/2021-12-22-21-42-51.png

docker save image-id

把镜像创作成一个压缩文件。这个压缩文件保存了每一层及其元数据。

/zh-cn/posts/image_and_container/2021-12-22-22-16-41.png

docker export container-id

把镜像创作成一个压缩文件。把多层镜像压缩成一个层。

/zh-cn/posts/image_and_container/2021-12-22-22-16-54.png

docker history image-id

查看指定镜像的创建历史。

/zh-cn/posts/image_and_container/2021-12-22-22-17-08.png

状态转换

/zh-cn/posts/image_and_container/2021-12-22-23-00-03.png