docker镜像是基础加应用,是一个软件从最顶层一直到最底层系统库的完整依赖栈。有了这样一个完整的依赖栈,再加上容器技术的隔离性,就能在任何地方把应用启动起来,且保证行为一致,只要内核在docker要求的最低版本之上就行。这种结合带来了一种崭新的运维模式,并以此为基础爆发出一个繁荣的生态。
镜像:
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
分层存储。一层层构建,前一层是后一层的基础,由多层文件系统联合组成。
每一层构建好后就不会在变,前一层删除后一层文件时,只是做标记,不会真正删除。
容器:
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
容器销毁,数据随之被删除。任何保存于容器存储层的信息都会随容器删除而丢失。
镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础。
在运行的容器中做文件修改,然后docker commit,就相当于在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。实际环境中不会用(臃肿、透明)。
镜像与容器的关系:通常用面向对象中的类与对象来比喻
Docker Registry:
Docker Registry是集中的存储、分发镜像的服务
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
Docker Registry公开服务与私有服务。
有点类似maven仓库,也有公服、私服。
整体架构
Docker采用了C/S架构,包括客户端和服务端。 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。Docker daemon一般在宿主机后台运行,等待接收来自客户端的消息。
为什么使用docker
更高效的利用系统资源。不需要进行硬件虚拟以及运行完整操作系统等额外开销行更多数量的应用。
更快速启动时间。直接运行于宿主内核,无需启动完整的操作系统
一致的运行环境
DEVOPS 持续集成与部署。
更轻松的迁移。
常用命令
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
学习资料
Docker学习路线图
https://yq.aliyun.com/articles/40494
《Docker — 从入门到实践》电子书:
https://www.gitbook.com/book/yeasy/docker_practice/details?spm=5176.100239.blogcont40494.63.KJ7hdw