docker 架构 镜像 容器 命令

docker是一种虚拟化技术, 虚拟化技术从实现形式上分为基于硬件的虚拟化和基于软件的虚拟化, 而docker是基于软件的虚拟化中的一种--- 操作系统层虚拟化.

镜像是一堆执行dockerfile中的命令后的只读层, 每一层只读层也可称为镜像层, 通过统一文件系统(union file system)技术将不同的制度层整合为一个文件系统,保存在自己的主机, 如下图:

 

容器是在镜像的基础上增加一层读写层.  容器的状态不影响容器的定义, 不管是否处于运行状态, 加了读写层的镜像就是容器

运行的容器是拥有可读写层的统一文件系统(也就是镜像) 加上隔离的进程空间和包含其中的进程, 如下图:

一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer), 如下图:

 

关于镜像层, 如下图:

 

元数据(metadata)就是关于这个镜像层的额外信息,它不仅能够让Docker获取运行和构建时的信息,还包括父层的层次信息。需要注意,只读层和读写层都包含元数据

每一层都包括了一个指向父层的指针。如果一个层没有这个指针,说明它处于最底层.如下图:

 

docker 架构

Docker 使用 C/S (客户端/服务器)体系的架构,Docker 客户端与 Docker 守护进程通信,Docker 守护进程负责构建,运行和分发 Docker 容器。Docker 客户端和守护进程可以在同一个系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程使用 REST API 通过UNIX套接字或网络接口进行通信. 

 

 

docker Daemon(docker 守护进程, 也就是服务器): Docker 的服务端由多个服务配合完成:
1. dockerd, 用来监听 Docker API 的请求 和管理 Docker 对象, 比如 镜像, 容器, 网络 和 Volume, 
2. containerd, 提供 gRPC 接口, 响应来自 dockerd 的请求, 
通过 container-shim 管理 runC 镜像和容器环境, containerd 是 containerd-shim 的父进程, 
containerd-shim 是容器进程的父进程

 


docker client(docker 客户端): docker, docker client 是我们和 Docker 进行交互的最主要的方式方法, 
比如我们可以通过 docker run 命令来运行一个容器, 然后我们的这个 client 会把命令发送给上面的 dockerd, 让他来做真正的事情.

 


docker registry: 用来存储Docker 镜像的仓库, Docker Hub 是Docker 官方提供的一个公共仓库, 而且 Docker 默认也是从Docker Hub 上查找镜像的, 
当然你也可以很方便的运行一个私有仓库, 当我们使用 docker pull 或者 docker run 命令时, 就会从我们配置的Docker 镜像层库中拉取镜像, 使用 docker push 命令时, 会将我们构建的镜像推送到对应的镜像仓库中

 


Images: 镜像是只读模板, 带有创建Docker 容器的功能, 一般来说, 镜像会基于另外一些基础镜像并加上一些额外的自定义功能, eg 你可以构建一个基于CentOS的镜像, 然后在这个基础镜像上安装一个 Nginx 服务器, 这样就可以构建一个属于自己的镜像了.

 

Containers: 容器, 是一个镜像的可运行实例, 可以使用 Docker REST API 或者 CLI 来操作容器, 容器的实质是进程, 但是与直接在宿主机上执行的进程不同, 容器进程运行于属于自己的独立的,命名空间. 因此 容器可以拥有自己的 root 文件系统, 自己的进程空间, 甚至自己的用户 ID 空间, 容器内的进程是运行再一个隔离的环境里, 使用起来, 就好像是在一个独立于宿主 的系统下操作一样, 这种特性使得容器封装的应用比直接在宿主运行更加安全.

 

常用命令:

 

docker create <image-id>   # 给指定镜像新增一层可读写层, 生成一个新的容器, 此时容器并没有运行

docker start <container-id>   # 给容器创建一个进程隔离空间, 每个容器有且只有一个进程隔离空间

docker run <image-id>   # 根据指定的镜像创建一个容器, 并运行该容器, 效果等同于 docker create 和docker start 2个命令组合

docker ps   # 查看所有运行中的容器

docker ps -a   # 查看所有的容器

docker images   # 查看所有的顶层镜像, 也即是可读写的镜像

docker images -a   # 查看所有的镜像, 包含只读层

docker images <images-id>   # 查看指定镜像的所有层(包括只读层和读写层)

docker stop <container-id>   # 向指定容器发送一个SIGTERM的信号, 停止容器内所有进程

docker kill <container-id>   # 向指定容器内的所有进程发送一个SIGKILL信号

docker pause <container-id>   # 利用Cgroups的特性暂停运行中的进程

docker rm <container-id>   #  移除构成容器的可读写层, 此命令只针对未运行的容器

docker rmi <image-id>   # 移除构成镜像的只读层

docker commit <container-id>   # 将容器的最顶层的可读写层变成只读层, 执行效果是将容器变成了不可变的镜像

docker build   # 执行dockerfile文件中的命令, 创建多个只读层

docker exec <running-container-id>   # 进入指定运行中的容器中

docker inspect <container-id> or <image-id>   # 查看指定容器/镜像的最顶层的元数据

docker save <image-id>   # 创建镜像的压缩文件, 可以共享

docker export <container-id>  # 创建一个tar文件, 并将元数据和不必要的层移除, 将多个层整合为一个层

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值