LXC
Linux Container
namespaces 六种名称空间
主机名和域名 UTS
文件系统 Mount
进程间通信 IPC
进程树 PID
用户和用户组 User
网络接口 NetWork
cgroups
cpu和内存,块设备分配资源限制
blkio:块设备IO
cpu:CPU
devices:设备访问
memory:内存用量及报告
可以通过在一个主机创建不同的名称空间直接在实现不同的网络模型 在同一个主机上可以创建多个名称空间
docker镜像
分层构建 联合挂载的机制来实现 镜像包含启动容器所需要的文件系统及其内容 bootfs用来启动并引导用户空间 引导完成后自动被卸载 rootfs提供根文件系统
最基础的baseimage是由dockerhub的维护人员手动创建的
传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式, 完整性自检完成后将其重新挂载为读写模式
docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂 载一个“可写”层
docker Registry
1.提供镜像的存储
2.提供用户的认证
3.提供镜像的索引
一个 Registry中可以存在多个Repository
在Registry中会包含很多个应用程序的repo(仓库) 每一个repo中只会存放一个应用程序的镜像 其中会包含应用程序的不同版本
仓库名(nginx)就是应用程序的名称 其中包含多个镜像名如 nginx:1.10 nginx:1.11 nginx:1.12 镜像标识是通过tag来唯一标识的
dockerhub 仓库
docker push/pull 仓库:标签
非dockerhub仓库上传下载镜像
docker push/pull 服务器地址/名称空间/仓库:标签
docker pull registry.cn-hb.com/namespace/httpd:v1
docker tag(标签)
1.基于ID打标签
docker tag 9133dae37bd8 mageedu/busybox/httpd:latest
2.基于名称和标签打标签
docker tag mageedu/busybox/httpd:v0.1 mageedu/busybox/httpd:version0.1
3.为私有Registry打标签
docker tag 9133dae37bd8 myregistry:5000/busybox/httpd:v0.1
Docker objects
docker实现restful风格的接口,所以每个组件都可以当成资源和对象来管理每个对象都可以通过rest接口实现增删改查管理操作
images,containers,networks,volumes,plugins
docker基础网络
一个设备只能属于一个名称空间 内核支持两种设备的模拟
二层(网卡,网桥)设备 模拟网线的两端 veth_pair
三层设备(路由器) 内核可以直接当路由器使用 也可以使用一个单独的名称空间来实现
三种网络模型
bridge nat桥
host
none
overlay网络 叠加网络
两级三层报文封装
多封装一个物理机器IP头部,通过物理机之间网络发送数据包
容器可以共享其它容器的网络名称空间 joined container
容器也可以共享宿主机的网络名称空间 open container
[root@docker-node ~]# ip netns help Usage: ip netns list ip netns add NAME ip netns set NAME NETNSID ip [-all] netns delete [NAME] ip netns identify [PID] ip netns pids NAME ip [-all] netns exec [NAME] cmd ... ip netns monitor ip netns list-id 创建虚拟网卡对 # ip link add name veth1.1 type veth peer name veth1.2 # ip link show # ip link set veth1.2 netns r1 # ip netns exec r1 ifconfig -a # ip netns exec r1 set dev veth1.2 name eth0 # ifconfig veth1.1 10.0.0.1/24 up # ip netns exec r1 eth0 10.0.0.2/24 up