docker是一个开源的应用容器引擎,使用go语言开发;

基于linux内核技术对应用程序进行隔离;
核心理念是将应用及依赖包打包到一个可移植的容器中;
可发布到任意linux发行版的docker引擎上;
使用沙箱机制运行程序:
(应用程序只能访问自己的目录,这个目录称为沙箱目录,而应用程序之间禁止数据的共享和访问; 沙箱机制是一种安全机制,设计原理就是只能允许自己的应用访问目录,而不允许其他的应用访问;
在iOS系统中,除了特有的应用可以通过使用特定的API共享数据(例如联系人),而其他的应用之间都不能共享数据。)

Docker体系结构:

docker基础_第1张图片

  1. Engine:处理docker客户端的请求,并进行相关的分发,下载镜像--image repository--;

  2. runC:挂载文件系统并启动容器;

  3. docker ps -q 显示运行容器的id;

Docker工作过程:

docker基础_第2张图片

虚拟机与容器的区别:

启动时间不同
虚拟机分钟级,docker秒级
轻量级
docker以M为单位,虚拟机以G为单位
性能
docker更快速
安全性:
不如虚拟机,一定程度上需要访问物理机内核;如何解决?
使用要求
结合实际环境;docker适合快速部署等

  • 场景一:节省项目环境部署时间
    1.单项目打包
    2.整套项目打包
    利用docker-compose
    3.新开源技术试用

  • 场景二:环境的一致性
    便于移植,多次利用部署,保持运行状态一致性;

  • 场景三:持续集成:
    docker+jenkins构建持续集成环境:
    docker基础_第3张图片

  • 场景四:微服务
    将业务架构拆分成微小的业务去组织整体业务;
    一个容器中只运行一个服务,容器之间隔离;

  • 场景五:弹性伸缩
    业务量增加或减少,资源整合比较方便,资源拓展等;

docker的版本及安装:

docker EE是企业版本,提供技术支持等;
docker CE是公共版本;
docker基础_第4张图片

镜像管理:

存储驱动:
aufs,devicemapper,overlay,overlay2(目前最热)

管理命令:

exec 执行命令
pull 拉镜像
push 上传镜像
inspect 查看容器信息
stats 查看容器运行状态
save 保存镜像到本地
load 加载镜像文件
volume 创建存储

管理应用程序数据:

volumes、bind mounts和tmpfs;
tmpfs是存储在宿主机内存中,不会写入到文件系统;
bind mounts挂载宿主机目录,相当于软连接;

企业级私有仓库:

docker harbor

docker监控:

cadvisor+influxdb+grafana

cadvisor:容器资源收集系统,收集容器的资源利用率,有内置的图形页面;
influxdb:时序数据库管理系统,以时间为索引存储数据;
grafana:仪表盘,展示数据;