虚拟IP。何为虚拟IP,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

虚拟IP原理:http://blog.csdn.net/whycold/article/details/11898249
 
 
通过虚拟IP,我们可以虚拟化的增加docker宿主机的对外IP,通过对外不同IP来实现不同的接入服务。让我们看下面的例子:
1,查看当前网卡设备eth0并创建新的网卡设备eht0:1
ech0详细内容:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
内容如下:
DEVICE=eth0 
HWADDR=00:0c:29:ae:d2:2b 
TYPE=Ethernet UUID=d3015c96-42e0-483b-81d5-e4b05a384fbe 
ONBOOT=yes 
NM_CONTROLLED=yes 
BOOTPROTO=static 
IPADDR=192.168.1.10 
NETMASK=255.255.255.0 
GATEWAY=192.168.1.1 
DNS1=192.168.1.1
 
创建虚拟网卡设备eth0:1:
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:1
修改eth0:1设置IP192.168.1.11:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
内容如下:
DEVICE=eth0:1 
HWADDR=00:0c:29:ae:d2:2b 
TYPE=Ethernet UUID=d3015c96-42e0-483b-81d5-e4b05a384fbe 
ONBOOT=yes 
NM_CONTROLLED=yes 
BOOTPROTO=static 
IPADDR=192.168.1.11
NETMASK=255.255.255.0 
GATEWAY=192.168.1.1 
注意:eth0:1的DEVICE必须为eth0:1 ,表示通过eth0连接.且它们的设备mac需要一致
 
2.启动虚拟IP的网卡设备: 
# ifup eth0:1
此时通过ifconfig可以查看到eth0,eth0:1两个网卡设备,并且IP为 192.168.1.10、192.168.1.11
 
3.运行容器指定映射IP和端口:
查看当前docker 镜像
# docker images
REPOSITORY TAG IMAGE   ID CREATED VIRTUAL SIZE
centos latest 34943839435d 3 weeks ago 224 MB
通过镜像运行容器
# docker run -d -p 192.168.1.11:80:80 centos
此时就可以通过192.168.1.11这个IP的80端口访问容器centos了
#docker ps -a
而192.168.1.10这个IP的80端口是访问不到的这个容器的,这样我们就相当于又可以在192.168.1.10的IP上80端口访问其他新增的容器了
 
 
 
特别注意:
1.使用虚拟IP的话,在任何-p映射中不要使用 -p 0.0.0.0:80:80 或者 -p 80:80,这样会占用有IP的80端口
2.修改虚拟网卡配置时,请先ifdown eht0:x,修改完后ifup eth0:x
3.删除虚拟网卡设备文件请先进行ifdown eth0:X ,再删除eth0:X网卡设备文件,但不建议这么做。最好的方法是不要删除虚拟网卡设备文件,编辑多余不用的网卡设备文件,保留BOOTPROTO,HWADDROOT和ONBOOT这三项其他注释即可。
4.无论删除,或编辑网卡,之后请不要使用service network restart,否者会出现断网,需reboot重启恢复
5.关于容器因虚拟IP操作不当仍不能连网,请停止所有容器,ifdown所有虚拟网卡设备,再ifup,然后启动容器即可恢复。

(为容器分配独立IP方法二)通过虚拟IP实现docker宿主机增加对外IP接口的更多相关文章

  1. Linux namespace技术应用实践--调用宿主机命令(tcpdump/ip/ps/top)检查docker容器网络、进程状态

    背景 最近偶然听了几堂极客时间的云原生免费公开课程,首次接触到了Linux namespace技术,并了解到这正是现在风头正劲的容器技术基石,引起了自己探究一二的兴趣,结合课程+网络搜索+实践操作,也 ...

  2. docker centos7 配置和宿主机同网段IP

    docker centos7 配置和宿主机同网段IP 1.安装brctl 命令 # yum -y install bridge-utils 2.编辑网卡配置文件 # vi ifcfg-eno16777 ...

  3. 【LINUX】——如何配置宿主机和虚拟机IP在同一网段

    宿主机:win7  10.8.2.50 255.255.255.0 虚拟机:redhat 如果使用 NAT 的网络连接方式,虚拟机的 IP 会被分配为 192.168.*.* 网段,从虚拟机 ping ...

  4. docker 宿主机与容器直接文件移动命令

    1.将容器中的文件复制到宿主机 我们把容器中的 nginx 目录整个复制到  宿主机/usr/local/nginx 目录下,使用如下命令: docker cp nginx_test: /etc/ng ...

  5. 为docker容器设置独立ip

    docker 1.12使用新版macvlan设置与宿主机同网段ip ****************************************** 由于开发的一些特殊需求,需要将容器部署在与宿主 ...

  6. 绕过CDN查找网站真实IP方法

    查找网站 源IP方法: 如果遇到需要绕过CDN,查找网站真实IP地址时,可以采用如下方法: 假设主站服务和邮件服务在同一台服务器: 1.在网站用QQ邮箱注册账号: 2.收取注册验证邮件: 3.查看邮件 ...

  7. 【Docker】使用Docker Client和Docker Go SDK为容器分配GPU资源

    目录 背景 使用 Docker Client 调用 GPU 依赖安装 安装 Docker 安装 NVIDIA Container Toolkit¶ --gpus 用法 使用 Docker Go SDK ...

  8. Docker容器内部端口映射到外部宿主机端口

    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射. 注意:宿主机的一个端口只能映射到容器内部的某一个端口 ...

  9. 宿主机网络中其它机器与Docker容器网络互通配置

    前言 目前项目采用微服务架构进行开发,Nacos和其它服务部署到Docker中,Docker中容器采用的网络默认是桥接模式(Bridge),默认的子网码是172.17.0.1/16:宿主机是192.1 ...

随机推荐

  1. Dinic学习笔记

    网络流是啥不用我说了吧 增广路定理不用我说了吧 Dinic就是分层然后只在层间转移,然后就特别快,\[O(N^2M)\] 伪代码: function dinic int flow = 0 ; whil ...

  2. TT(Tokyo Tyrant )介绍及使用

    Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley D ...

  3. [Algo] 253. Longest Substring Without Repeating Characters

    Given a string, find the longest substring without any repeating characters and return the length of ...

  4. bat脚本修改dns(判断系统版本)

    @echo off systeminfo if "%OS 名称%"=="%7%" goto windows7:windows7echo 正在设置本机主DNS , ...

  5. ubuntu或者raspbian清理软件使用痕迹

    拿最常用的nginx举例 删除nginx–purge包括配置文件 sudo apt-get --purge remove nginx 开始使用上面这条,后来发现还是有很多相关联没有删除 首先需要停止n ...

  6. python_数据类型_总结

  7. 2019-2020-1 20199324《Linux内核原理与分析》第一周作业

    1.问题:使用banner输出图形字符为什么都是大写? 2.实验二:基本概念及操作 作业:命令toilet和figlet的使用 使用如下命令安装 $ sudo apt-get update $ sud ...

  8. 吴裕雄--天生自然 JAVA开发学习:Applet 基础

    import java.applet.*; import java.awt.*; public class HelloWorldApplet extends Applet { public void ...

  9. layui从url中取值 ajax获取当前链接中的变量

    在使用layui(javascript)的时候,  需要从当前页面的url地址中取值, 例如: http://localhost:8081/html/fund-purchase.html?fundID ...

  10. Linux的iptables菜鸟初学

    什么是iptables? iptables是linux下的命令行工具,操控的是linux的防火墙,这个防火墙叫netfilter.通俗的说应该是用户通过iptables把安全设定设置给netfilte ...