最近特别的忙,负责的项目增加很多,差不多快4个月没有写博客,今天就给各位分享一下我docker方面经验。之前写过一篇docker的安装与使用(地址http://dl528888.blog.51cto.com/2382721/1427150),最近公司使用docker做持久化部署项目,主要使用docker的单机环境与集群环境,目前流程测试都没有问题,剩下仅有细节优化,现在我就给大家分享一下我的成功与经验。

本次介绍赋予docker container一个独立的外网ip,可以有自己独立的网络与其他服务器沟通。

需求:

需要一个独立ip xx.xx.xx.xx来与容器做映射,运行这个外网ip的80与443端口映射到容器的80与443端口,其实如果这个宿主机仅有这一个容器,或者仅有这个容器需要开通80与443对外,不需要独立的ip,但如果同一个宿主机有多个不同容器想把自己本身的80与443都对外把80与443对外,那么就得需要独立ip了。

本次环境:

系统:宿主机与容器为centos 6.5 x86_64
网络:em1是内网,em2是外网(设置本次外网ip是1.1.1.3),docker0是docker的桥接网卡
独立ip:设置本次独立ip是1.1.1.4
使用的技术:参考了openstack的iptables dnat技术
下面是docker版本
08:32:50 # docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.2
Git commit (client): d84a070/1.1.2
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.2
Git commit (server): d84a070/1.1.2
root@ip-10-10-29-224:~
09:58:51 # docker info
Containers: 15
Images: 8
Storage Driver: devicemapperPool Name: docker-8:3-22806948-poolData file: /var/lib/docker/devicemapper/devicemapper/dataMetadata file: /var/lib/docker/devicemapper/devicemapper/metadataData Space Used: 60996.6 MbData Space Total: 102400.0 MbMetadata Space Used: 33.9 MbMetadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 2.6.32-431.29.2.el6.x86_64

操作方法:

1、为独立ip与外网卡em2做网卡别名

ifconfig em2:0 1.1.1.4 netmask 255.255.255.0 up

2、启动新容器

docker run --restart always --privileged -d  --name='test' docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord

我这里使用supervisor启动容器的ssh与http服务,并且设置允许特权模式,在docker重启后自动启动容器。另外我没有设置开放的端口,原因是我自己使用iptables的dnat,没有使用默认docker的nat规则(设置了--iptables=false),使用自定义的好处是我可以随意指定开放端口,如果使用默认的,只能在容器生成的时候-p指定端口才能对外开放。

获取容器ip

docker inspect test|grep -i add

比如本次获取的ip是172.17.0.5

3、在宿主机的iptables里做dnat映射

默认的input、output、forward我不做设置,仅设置nat

*nat
:PREROUTING ACCEPT [15:1542]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING  -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER  -d 1.1.1.4 ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.5:80
-A DOCKER  -d 1.1.1.4 ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.5:443
COMMIT

其中-A DOCKER是做的dnat设置,-d是指定访问的外网ip地址,就是我刚才1.1.1.4,另外dport是允许访问的端口,--to-destination是容器的ip与内部端口

然后重启iptables就解决了此问题。

有问题留言,我会及时的给与答复。

docker高级应用之赋予容器独立外网ip相关推荐

  1. 用apache反向代理解决单外网ip对应内网多个web主机的问题

    用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...

  2. [转]用apache反向代理解决单外网ip对应内网多个web主机的问题

    用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...

  3. 禁止Docker容器访问外网

    禁止Docker容器访问外网--用于实现类似于虚拟机的Host-only模式 假设docker的虚拟网卡docker0的网段是192.168.123.0/24,通过iptables向DOCKER-US ...

  4. VMware创建Linux及局域网内独立访问IP和访问外网IP的配置

    好早之前有一篇是配置远程连接Linux和部署Tomcat的文章,但是并没有讲解如何配置IP的相关知识.最近公司在搞集群配置,我就先拿电脑上的VMware上的Linux做个测试,分享和总结一下经验吧,也 ...

  5. nginx反向代理下thinkphp、php获取不到正确的外网ip

    nginx反向代理下thinkphp.php获取不到正确的外网ip 在记录用户发送短信需要获取用户ip时,tp一直获取的是内网ip:10.10.10.10 tp框架获取ip方法:get_client_ ...

  6. vmware 多外网ip

    场景: A,B为物理服务器,都绑定了独立的外网ip.C为vm虚拟机,安装在A机器上.三台设备都在同一个局域网,网关为192.168.5.1. 目标:虚拟机能够和101,102局域网的机器互通,同时通过 ...

  7. 记一次MySQL使用外网IP连接超时

    背景:刚买的一台阿里云ecs服务器,专用网络,centos 7操作系统. 假设外网IP地址为10.365.25.2(纯属瞎编,如有巧合,纯属意外),内网IP:19.16.25.36(纯属瞎编,如有巧合 ...

  8. 为什么我可以正常上网,却ping不通自己的外网IP呢???

    https://zhidao.baidu.com/question/455923156647224925.html [重点] 一般运营商是禁止个人用户ping,为了安全,你可以访问别人的网站,但是别人 ...

  9. 什么是内网和外网?什么是内网IP和外网IP?本地连接和宽带连接又有什么区别?

    今天,有很多小伙伴被何为内网外网迷糊?究竟什么是内网?什么是外网?他们又有和区别?还有什么是内网IP和外网IP?本地连接和宽带连接有什么区别?怂怂今天就来给大家科普一下吧: 问题一.何为内外网及定义诠 ...

最新文章

  1. CCS编译添加链接库文件与头文件的方法
  2. 如何将nodejs项目程序部署到阿里云服务器上
  3. VMWare 全屏后最小化死机
  4. 计算机系统安装要点,电脑重新装系统要注意哪些要点 重装系统时的六大事项...
  5. 假期七天实习参观有感
  6. 频域卷积定理的证明 乘积的傅里叶变换等于分别做傅里叶变换的卷积乘1/2pi
  7. mysql查看mylog命令_mysql 日志查询(查看mysql日志命令)
  8. matlab plc控制系统设计,基于MATLAB的PLC温度监控系统设计
  9. 计算机重装后如何连接无线网络,电脑重装系统后怎么连接无线网络连接
  10. 结对开发——求二维环形数组所有子矩阵最大和的问题
  11. 2023年1月21日除夕活动取消通知
  12. tf-faster-rcnn训练报错: Loaded runtime CuDNN library: 7.0.5 but source was compiled with: 7.1.4.r-rcn
  13. c#中将一个实体类复制到另一个实体类
  14. 为什么不要使用 select * from xxx (oracle 亲测)
  15. c语言简单小游戏(模拟魔塔)
  16. 大学生个人网页模板 简单网页制作作业成品 极简风格个人介绍HTML(个人博客 4页)
  17. CV2 图像归一化函数
  18. Linux的系统管理命令和压缩命令和编辑器
  19. 百度云存储空间使用问题
  20. JIRA REST API(一)

热门文章

  1. 网站架构探索(2)-CDN基本常识 王泽宾
  2. 跨平台开发Flutter初体验
  3. 兼容性—IE6/7下带有overflow:hidden属性的父级元素包不住带有position:relative属性的子元素...
  4. Lucene+Tika 文件索引的创建与搜索
  5. 区块链是一种用一种不可变的形式存储数字信息
  6. React多页面应用脚手架-v1.3.0
  7. ICO流程,casestudy
  8. 【Linux】在虚拟机上安装CentOS7
  9. http://www.cnblogs.com/dolphin0520/p/3949310.html
  10. 基于CentOS中PXE网络环境构建实例