Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器,容器是一个运行时环境。
可以把容器看做一个简易版本的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
版本区分
分为社区版CE和企业版EE
社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。
Docker仓库从Docker1.13版本之后采用时间线的方式作为版本号。
社区版按照stable和edge两种方式发布,每个季度更新stable版本,如18.06,18.09;每个月份更新edge版本,如18.09,18.10
核心技术
- docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源的虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,引擎在CPU和内存利用率上docker将会在效率上有明显优势
- docker利用的是宿主机的内核,不需要Guest OS。因此当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核,
后台模式
Docker容器后台运行必须要有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top、tail)就会自动退出,这个是docker的机制,例如针对nginx应用,默认其是后台启动的,就导致docker前台没有运行的应用,运行命令完毕后docker容器就会退出,最佳的解决方案是将要运行的程序以前台的形成运行。数据问题
容器运行结束后,如果不通过commit指令生成新的镜像,使得数据作为镜像的一部分保存下来,当容器删除后,容器内产生的数据会丢失,可以通过数据卷解决。命令执行
Docker不建议启动SSH,可以使用exec和attach指令进入镜像字段
ljhan2/nginx:1.1.9ljhan2-命令空间[包名] nginx-镜像名称[类名] 1.1.0 -镜像版本[版本]
数据卷
- 英文表达: Volume
- 容器数据的持久化
- 容器和主机之间共享数据
-
Dockerfile
可以采用如下说法:
构建文件
- 描述文件
- 构建描述
阶段分析
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段。
- Dockerfile是软件的原材料 ==> 面向开发
- Docker镜像是软件的交付品 ==>交付标准
- Docker容器是软件的运行态 ==>部署运维
三要素
Docker三要素分布是
镜像[Image]:环境的封装包含系统环境和应用环境
仓库[Registry]: 存放镜像提供保存下载服务的,包括官方仓库[hub.docker.com]和私有仓库
容器[Container]: 镜像的实例三剑客
docker compose: 解决单主机模式下容器编排问题
docker swarm: 解决多主机模式下容器编排和网络通信问题,目前已经内置在Docker中
docker machine: 把容器变成独立的虚拟机,通过容器模拟虚拟机编排工具
Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。
Compose是Fig的升级版,Fig已经不再维护。Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用。
Mesos
Apache[2013]
Docker Swarm
Docker自己[2016]
Kubernetes谷歌
[2014]