标签:分配 att table 子进程 替代 mapped 监视 2.4 统计
在计算机术语中虚拟化技术或虚拟技术(Virtualization)是一种资源管理技术,它虚拟的是整个PC硬件。也就是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个计算机配置环境。来由此打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些计算机硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制(摘自 wikipedia)
容器与虚拟化
容器虚拟化之 Docker
Docker的初始版本是在2013年开发出来的,使用的是Go语言开发并且遵循Apache2.0协议,是一个开放源代码软件项目。让应用程序部署在容器化下的工作可以自动化进行,借此在Linux操作系统上提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。更多的Docker周边请浏览 Docker官网 ,Docker Hub
Docker利用Linux核心中的资源分离机制,CGroup及Linux核心名称空间(NameSpace),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名称空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统。而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施(摘自 wikipedia)。
容器的PID NameSpace(名空间)
在Docker中进程管理的基础就是Linux内核中的PID名空间技术,在不同PID名空间中进程ID是独立的,即在两个不同名空间下的进程可以有相同的PID。
Linux内核为所有的PID名空间维护了一个树状结构。最顶层的是系统初始化时创建的root namespace(根名空间),再创建的新PID namespace就称之为child namespace(子名空间),而原先的PID名空间就是新创建的PID名空间的parent namespace(父名空间)。通过这种方式,系统中的PID名空间会形成一个层级体系。父节点可以看到子节点中的进程,并可以通过信号等方式对子节点中的进程产生影响。反过来,子节点不能看到父节点名空间中的任何内容,也不可能通过kill或ptrace影响父节点或其他名空间中的进程。
在Docker中,每个Container都是Docker Daemon的子进程,每个Container进程缺省都具有不同的PID名空间。通过名空间技术,Docker实现容器间的进程隔离。另外Docker Daemon也会利用PID名空间的树状结构,实现了对容器中的进程交互、监控和回收。下面是Docker利用名空间技术所使用到的各种资源隔离方法,关于它是做什么的可自行Google这里不在阐述,只讲它的功能;
Docker容器级技术依赖于 NameSpace,CGroup,AUFS,Device Mapper
注意:为了能够向NameSpace发起调用,让NameSpace完成某些操作,其API有 clone(),setns(),unshare()
所实现的功能:
Resource limitation:资源限制
Prioritization:优先级控制
Accounting:审计和统计,主要是计费
Control:挂起进程,恢复进程
------ 多个子系统参考路径 ls /sys/fs/cgroup ------
mapped device:被映射的设备
mapping table:被映射的表
target device:源设备
Docker的核心组件
Docker的用途
Docker的基础使用
[root@192_168 ~]# yum install -y docker
[root@192_168 ~]# systemctl enable docker
[root@192_168 ~]# systemctl start docker
[root@192_168 ~]# systemctl status docker
[root@192_168 ~]# docker info
[root@192_168 ~]# docker version
[root@192_168 ~]# docker images/inspect
[root@192_168 ~]# docker build/commit
[root@192_168 ~]# docker pause/unpause
[root@192_168 ~]# docker rm/rmi
[root@192_168 ~]# docker top/kill
[root@192_168 ~]# docker run/start
[root@192_168 ~]# docker stop/restart
[root@192_168 ~]# docker ps/ps -a
[root@192_168 ~]# docker rm
[root@192_168 ~]# docker events
[root@192_168 ~]# docker history
[root@192_168 ~]# docker logs
[root@192_168 ~]# docker login/logout
[root@192_168 ~]# docker pull/search
[root@192_168 ~]# docker run -it --rm busybox:latest /bin/sh
[root@192_168 ~]# docker commit bb1954ab1978 centos:base-tools
Docker的相关组件
registry:保存docker镜像及镜像层次结构和元数据,一个registry包含多个repository一个repository内包含多个镜像;
repository:由具有某个功能的镜像的所有相关版本构成的集合;
index:管理用户的账号、权限、镜像及镜像标签等等相关信息的检索库 docker search;
graph:从registry中下载的docker镜像需要保存在本地,此功能既由graph来完成/var/lib/docker/graph;
docker images/search/pull/push/login/logout/docker rmi及docker commit/build 等;
run、kill、stop、start、restart、logs、attach、import、export
通过镜像创建一个新的容器 run
启动一个处于停止状态的容器 start
--name 给容器起一个名字,在后续的命令执行中可直接调用;
-i 保持一个打开的STDIN状态,通常与-t结合使用;
-t 关联一个终端;
--net=default 启动一个容器关联到哪个桥上去,默认启动在docker0桥上;
-d --detach=false 在后台(守护进程)方式运行docker;
注意:在交互式模式下启动的容器,关闭时可使用exit命令或Ctrl+d键;
~]# docker run -it --name busybox --net=default -d busybox:latest
Docker私有仓库构建(Docker Registry)
安装:环境是CentOS 7.4
[root@192_168 ~]# yum install -y docker docker-distribution
启动:[root@192_168 ~]# systemctl start docker
[root@192_168 ~]# systemctl start docker-distribution
[root@192_168 ~]# systemctl status docker docker-distribution
如果需要监听在80端口,可以用iptables转发实现[root@192_168 ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5000
构建本地镜像[root@192_168 ~]# docker images
[root@192_168 ~]# docker tag 1e1148e4cc2c localhost:5000/centos:1.0.1
[root@192_168 ~]# docker push localhost:5000/centos:1.0.1
[root@192_168 ~]# docker images
[root@192_168 ~]# docker rmi localhost:5000/centos:1.0.1
[root@192_168 ~]# docker pull localhost:5000/centos:1.0.1
修改docker配置文件,默认使用内网仓库
修改文件/etc/sysconfig/docker
#添加内网仓库ADD_REGISTRY=‘--add-registry localhost:5000‘
#禁用官方仓库docker.io(可选)BLOCK_REGISTRY=‘--block-registry docker.io‘
配置文件:#INSECURE_REGISTRY=‘--insecure-registry localhost:5000‘
#ADD_REGISTRY=‘--add-registry localhost:5000‘
#BLOCK_REGISTRY=‘--block-registry docker.io‘
Docker 数据卷
(1) 数据卷是提供一个或多个容器使用的文件或目录,有多种特性
(2) 可共享于多个容器之间
(3) 对数据卷的修改会立即生效
(4) 对数据卷的更新与镜像无关
(5) 数据卷会一直存在
-v --volume=[ ] 绑定挂载一个数据卷,默认存储路径:/var/lib/docker/volumes/
~]# docker run -it --name busybox --rm -v /data busybox:latest
docker run -it --name busybox -v /var/lib/docker/volumes/a8c7da4dcc16e757303b6358e3d4dc50cb1adfa38118216cb5f9a55331b2107d/_data/:/data busybox:latest
冒号前:是宿主机路径 冒号后:容器主机路径
标签:分配 att table 子进程 替代 mapped 监视 2.4 统计
原文地址:http://blog.51cto.com/51eat/2351073