Docker初识
1. 什么是Docker?
是一个开源的容器引擎,可以方便对容器进行管理(容器是一种轻量级、可移植、自包含的软件打包技术)
是基于容器的轻量虚拟化技术,基于内核的Cgroup和Namespace技术,并没有传统虚拟化的Hypervisor层,
通信上,Docker并不直接与内核交互,而是通过Libcontainer(真正意义上的容器引擎)来交互
通过clone系统调用来直接创建容器,通过 pivot_root 系统调用来进入容器, 通过直接操作cgroupfs文件来实现对资源的管控
优点:(Docker对 Union mount的应用)
1) 性能与物理机十分接近
2) 极大提高磁盘利用率(对层级镜像的创新应用)
即不同的容器共享底层的只读镜像,通过写入自己特有的内容后添加新的镜像层,该新增的镜像层和下层的只读镜像一起
作为基础镜像被更上层的用户使用;
3) 提高内存使用率
不同的容器访问同一个文件时,只会占用一份内存(需要使用支持 Union mount 的文件系统,比如 AUFS 和 Overlay)
相对于传统虚拟化的优点:
1)更高效得利用系统资源
2)更快速的启动时间:秒级启动
3)更轻松的迁移
2.
Cgroup:
Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如:cpu,memory,IO等等)的机制
http://blog.51cto.com/speakingbaicai/1359825
Namespace:
主要做访问隔离。其原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用
3.
容器=Cgroup+Namespace+rootfs+容器引擎(用户态工具)。
其中各项功能分别为:
Cgroup:资源控制;
Namespace:访问隔离;
rootfs:文件系统隔离;
容器引擎:生命周期控制;
4. 三个基本概念(镜像、容器、仓库)
镜像:分层存储
容器:如果镜像是类的话,容器则是实例,镜像是静态的定义,容器是运行的实体,可被创建、启动、删除
仓库:ubuntu:14.04其中ubuntu是仓库的名称,14.04是指定版本的镜像
5. 使用镜像
docker pull ubuntu:16.04
docker image ls
docker image rm $(docker image ls -q redis) #删除镜像
在
Dockerfile
文件所在目录执行:
docker build -t nginx:v3 . #新建一个镜像
docker run --name webserver -d -p 80:80 nginx
--name webserver : 将容器命名为webserver
-d:后台运行容器,并返回容器ID;
-p 80:80 将容器的80端口映射到主机的80端口
docker kill $(sudo docker ps -q) #停止运行的容器
docker ps -q #显示正在运行的容器id
6. 应用场景
公司:
在单板上用docker比传统虚拟机更便捷
用docker搭建openstack环境(为每一项服务都做了一份docker镜像,一个控制节点,一个计算节点)
家里:
尝试新的编程语言/数据库/命令行工具
在unbuntu下使用centos或者suse