一.Docker简介
1.什么是容器?
容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。
与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何的专门
的解释系统
2.什么是docker?
(1)docker是能够把应用自动部署到容器的开源引擎,是一种操作系统级别的虚拟化方案
(2)只能运行相同或相似内核的操作系统
(3)依赖Linux内核特性:Namespace和Cgroups(Control Group)
3.Docker的目标
提供简单轻量的建模方式
职责的逻辑分离
快速高效的开发生命周期
鼓励使用面向服务的架构(docker鼓励单个容器只运行一个服务)
符合高内聚,低耦合,单一任务的目标
4.Docker 的使用场景
1.使用Docker容器开发,测试,部署服务
2.创建隔离的运行环境
3.搭建测试环境
4.构建多用户的平台即服务(PaaS)基础设施
5.提供软件即服务(SaaS)应用程序
6.高性能,超大规模的宿主机部署
二 Dockers的基本组成
1.Docker客户端 和Docker daemon
C/S架构
2.Docker Image 镜像
Docker Image 是采用了分层联合系统(aufs, Advanced union File System),
关于 AUFS 的几个特点:
- AUFS 是一种联合文件系统,它把若干目录按照顺序和权限 mount 为一个目录并呈现出来
- 默认情况下,只有第一层(第一个目录)是可写的,其余层是只读的。
- 增加文件:默认情况下,新增的文件都会被放在最上面的可写层中。
- 删除文件:因为底下各层都是只读的,当需要删除这些层中的文件时,AUFS 使用 whiteout 机制,它的实现是通过在上层的可写的目录下建立对应的whiteout隐藏文件来实现的。
- 修改文件:AUFS 利用其 CoW (copy-on-write)特性来修改只读层中的文件。AUFS 工作在文件层面,因此,只要有对只读层中的文件做修改,不管修改数据的量的多少,在第一次修改时,文件都会被拷贝到可写层然后再被修改。
- 节省空间:AUFS 的 CoW 特性能够允许在多个容器之间共享分层,从而减少物理空间占用。
- 查找文件:AUFS 的查找性能在层数非常多时会出现下降,层数越多,查找性能越低,因此,在制作 Docker 镜像时要注意层数不要太多。
- 性能:AUFS 的 CoW 特性在写入大型文件时第一次会出现延迟。
....
add Apache
add emacs
rootfs(ubuntu)
bootfs
3.Docker Container 容器
通过镜像启动
启动和执行阶段
写时复制(copy on write)
4.Docker Registry 仓库
公有
私有
Docker Hub
三 Docker容器相关技术简介
依赖linux内核的Namespace特性
Namespace 命令空间
编程语言
封装 -->代码隔离
操作系统
进程,网络,文件系统等系统资源的隔离
Docker的五种命令空间
PID(Process ID) 实现进程隔离
NET(Network) 实现网络隔离
IPC(Interprocess Communication) 实现跨进程通信的访问
MNT(Mount) 挂载点,实现文件系统的隔离
UTS(Unix Timesharing System) 实现隔离内核和版本标识
Contorl Group
资源限制
优先级设定
资源计量
资源控制
四 Docker的安装
检查ubuntu版本
uname -a 14.04以上均支持docker
ll /sys/class/misc/device-mapper 检查存储驱动
安装ubuntu维护的版本
sudo apt-get install docker.io
source /etc/bash_completion.d/docker.io
使用非root运行docker
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
五 容器的基本操作
启动容器
docker run IMAGE [COMMAND] [ARG...]
查看容器
docker ps -a -l
docker inspect name/id
自定义容器名
docker run --name=自定义名 -i -t IMAGE /bin/bash
重启启动已停止的容器
docker start [-i] 容器名
docker stop 容器名
删除已经停止的容器
docker rm 容器名/ID