由于Boot2Docker的存在,造成了三层Mac->VirtualBox->Docker网络,由VirtualBox到Docker的映射可以通过run容器的时候指定-p参数实现,而从宿主机到VirtualBox端口映射需要通过下述方法实现:
查询虚拟机网络:
VBoxManagelistvms查询虚拟机网络状态,默认虚拟机名为′default′ VBoxManage showvminfo “default” | grep NIC
2.关闭运行中的虚拟机
由于Boot2Docker会自动运行VirtualBox中的虚拟机,所以在设置网络映射时必须先关闭运行中的虚拟机。否则,将出现The machine ‘boot2docker’ is already locked for a session (or being unlocked)的错误提示
$ VBoxManage controlvm “default” poweroff
修改虚拟机与Mac系统的网络映射
根据实际需要进行网络映射,其中
rulename: 自定义规则名称
hostip: Mac访问地址,可不填
hostport: Mac映射端口
guestip: 虚拟机访问地址,可不填
guestport: 虚拟机映射端口
$ VBoxManage modifyvm “dufault” –natpf1 “,
Docker 在一个包装中联合了以上功能,并称之为容器格式。
Libcontainer
默认的容器格式被称为 libcontainer 。
Docker 也支持使用 LXC 的传统 Linux 容器。在将来, Docker 可能会支持其他 的容器格式,比如结合 BSD jails或者 Solaris Zones。
执行驱动程序是一种特殊容器格式的实现,用来运行 docker 容器。在最新的版 本中, libcontainer 有以下特性:
∙是运行 docker 容器的默认执行驱动程序。
∙和 LXC 同时装载。
∙使用没有任何其他依赖关系的 Go 语言设计的库,来直接访问内核容器的 API 。 ▪在 Docker 0.9中, LXC 现在可以选择关闭。
▪注意:LXC 在将来会继续被支持。
▪如果想要重新使用 LXC 驱动,只需输入指令 docker -d – e lxc, 然后重启Docker 。
▪目前的 Docker 涵盖的功能有:命名空间使用, cgroups 管理, capabilities 权限 集,进程运行的环境变量配置以及网络接口防火墙设置 —— 所有功能是固定可 预测的,不依赖 LXC 或者其它任何用户区软件包。
▪只需提供一个根文件系统,和 libcontainer 对容器的操作配置,它会帮你完成剩 下的事情。
▪支持新建容器或者添加到现有的容器。
▪事实上,对 libcontainer 最迫切的需求是稳定,开发团队也将其设为了默认。
用户命名空间
Docker 不是虚拟化,相反的,它是一个支持命名空间抽象的内核 , 提供了独立工作空间 (或容器 ) 。当你运行一个容器的时候, Docker 为容器新建了一系列的 namespace 。
▪一些 Docker 使用的 linux 命名空间:
∙pid namespace
▪用作区分进程(PID: Process ID)。
▪容器中运行的进程就如同在普通的 Linux 系统运行一样,尽管它们和其他进程 共享一个底层内核。
∙net namespace
▪用作管理网络接口。
▪DNAT 允许你单独配置主机中每个用户的的网络,并且有一个方便的接口传输 它们之间的数据。
▪当然,你也可以通过使用网桥用物理接口替换它。
∙ipc namespace
▪用作管理对 IPC (IPC: InterProcess Communication)资源的访问。
∙mnt namespace
▪用作管理 mount-points (MNT: Mount)。
∙uts namespace
▪用作区分内核和版本标识符 (UTS: Unix Timesharing System)。
Cgroups
Linux 上的 Docker 使用了被称为 cgroups 的技术。因为每个虚拟机都是一个进 程,所有普通 Linux 的资源管理应用可以被应用到虚拟机。此外,资源分配和 调度只有一个等级,因为一个容器化的 Linux 系统只有一个内核并且这个内核 对容器完全可见。
∙总之, cgroups 可以让 Docker :
∙实现组进程并且管理它们的资源总消耗。
∙分享可用的硬件资源到容器。
∙限制容器的内存和 CPU 使用。
▪可以通过更改相应的 cgroup 来调整容器的大小。
▪通过检查 Linux 中的 /sys/fs/cgroup对照组来获取容器中的资源使用信息。 ∙提供了一种可靠的结束容器内所有进程的方法。
Capabilities
Linux 使用的是 “POSIX capabilities” 。这些权限是所有强大的 root 权限分割而成的一系 列权限。在 Linux manpages上可以找到所有可用权限的清单。 Docker 丢弃了除了所 需权限外的所有权限,使用了白名单而不是黑名单。
一般服务器(裸机或者虚拟机)需要以 root 权限运行一系列进程。包括:
∙SSH
∙cron
∙syslogd
∙硬件管理工具 (比如负载模块 )
∙网络配置工具 (比如处理 DHCP, WPA, or VPNs)等。
每个容器都是不同的,因为几乎所有这些任务都由围绕容器的基础设施进行处理。默 认的, Docker 启用一个严格限制权限的容器。大多数案例中,容器不需要真正的 root 权限。举个例子,进程(比如说网络服务)只需要绑定一个小于 1024的端口而不需要 root 权限:他们可以被授予 CAP_NET_BIND_SERVICE来代替。因此,容器可以被降 权运行:意味着容器中的 root 权限比真正的 root 权限拥有更少的特权。
Capabilities 只是现代 Linux 内核提供的众多安全功能中的一个。为了加固一个 Docker 主机,你可以使用现有知名的系统:
∙TOMOYO
∙AppArmor
∙SELinux
∙GRSEC, etc.
如果你的发行版本附带了 Docker 容器的安全模块,你现在就可以使用它们。 比如,装载了 AppArmor 模板的 Docker 和 Red Hat自带 SELinux 策略的 Docker
一、编辑网卡配置文件,桥接网卡
生成br0网卡配置文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0.bak
cp ifcfg-eth0 ifcfg-br0
eth0网卡配置 (不需要UUID,存在则两个网卡都有IP,网络不通)
# cat ifcfg-eth0
TYPE=Ethernet
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
br0网卡配置 (注意:清除copy的mac地址)