04-Docker核心组件

四大组成对象

镜像、容器、网络、数据卷

镜像(image)

镜像 ( Image ) 就是一个可读文本。每次启动的时候使用

镜像是一种层叠式的架构,操作最上面一层,不接触底下的任意一层,导致镜像文件会越来越大

对于每一个记录文件系统修改的镜像层来说,Docker 都会根据它们的信息生成了一个 Hash 码,这是一个 64 长度的字符串,足以保证全球唯一性。

镜像的命名我们可以分成三个部分:username、repository 和 tag。

  • username: 主要用于识别上传镜像的不同用户,与 GitHub 中的用户空间类似。
  • repository:主要用于识别进行的内容,形成对镜像的表意描述。
  • tag:主要用户表示镜像的版本,方便区分进行内容的不同细节

管理镜像

docker images      # 列出本地所有的镜像
docker inspect     # 查看镜像信息,也可以列出容器的所有信息
# docker inspect 解释
--format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  # range 是循环
--format='{{ .NetworkSettings.Networks.bridge.IPAddress}}'

docker rmi        # 删除指定的镜像

删除镜像的过程其实是删除镜像内的镜像层,在删除镜像命令打印的结果里,我们可以看到被删除的镜像层以及它们的 ID。当然,如果存在两个镜像共用一个镜像层的情况,你也不需要担心 Docker 会删除被共享的那部分镜像层,只有当镜像层只被当前被删除的镜像所引用时,Docker 才会将它们从硬盘空间中移除。
docker rmi 命令也支持同时删除多个镜像,只需要通过空格传递多个镜像 ID 或镜像名即可。

改,镜像是不允许被改动的。当然可以去改底层结构,但是不推荐去改动镜像的东西,容易出错

增:后续会通过docker commit 和 Dockerfile进行制作镜像

容器(container)

容器的生命周期

图中展示了几种常见对 Docker 容器的操作命令,以及执行它们之后容器运行状态的变化。这里我们撇开命令,着重看看容器的几个核心状态,也就是图中色块表示的:Created、Running、Paused、Stopped、Deleted。

Created:  容器已经被创建,容器所需的相关资源已经准备就绪,但容器中的程序还未处于运行状态。
Running:  容器正在运行,也就是容器中的应用正在运行。
Paused:   容器已暂停,表示容器中的所有程序都处于暂停 ( 不是停止 ) 状态。
Stopped:  容器处于停止状态,占用的资源和沙盒环境都依然存在,只是容器中的应用程序均已停止。
Deleted:  容器已删除,相关占用的资源及存储在 Docker 中的管理信息也都已释放和移除。

主进程

在 Docker 的设计中,容器的生命周期其实与容器中 PID 为 1 这个进程有着密切的关系。
既可以认为,一个容器就是一个进程进行管理,没有PID为1的进程存在,都得挂。

写时复制机制(Copy on Write )

例如列表的浅拷贝。

当我们拷贝对象或数组时,复制的过程并不是马上发生在内存中,而只是先让两个变量同时指向同一个内存空间,并进行一些标记,当我们要对对象或数组进行修改时,才真正进行内存的拷贝。

Docker 的写时复制与编程中的相类似,也就是在通过镜像运行容器时,并不是马上就把镜像里的所有内容拷贝到容器所运行的沙盒文件系统中,而是利用 UnionFS 将镜像以只读的方式挂载到沙盒文件系统中。只有在容器中发生对文件的修改时,修改才会体现到沙盒环境上。

Docker 容器能够实现秒级启动速度,写时复制机制在其中发挥了举足轻重的作用。

网络(network)

数据卷(volume)

posted @ 2019-03-07 15:15  汉克书  阅读(297)  评论(0编辑  收藏  举报