docker高级应用之赋予容器独立外网ip

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

最近特别的忙,负责的项目增加很多,差不多快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了。

本次环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
系统:宿主机与容器为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: devicemapper
  Pool Name: docker-8:3-22806948-pool
  Data  file /var/lib/docker/devicemapper/devicemapper/data
  Metadata  file /var/lib/docker/devicemapper/devicemapper/metadata
  Data Space Used: 60996.6 Mb
  Data Space Total: 102400.0 Mb
  Metadata Space Used: 33.9 Mb
  Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 2.6.32-431.29.2.el6.x86_64

操作方法:

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

1
ifconfig  em2:0 1.1.1.4 netmask 255.255.255.0 up

2、启动新容器

1
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

1
docker inspect  test | grep  -i add

比如本次获取的ip是172.17.0.5

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

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

1
2
3
4
5
6
7
8
9
10
11
*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就解决了此问题。

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






 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1604167,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
11天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
32 5
|
5天前
|
Web App开发 iOS开发 Docker
Docker 容器的日志
【10月更文挑战第31天】
16 5
|
4天前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
随着容器技术的快速发展,容器编排工具成为了现代软件开发和运维的重要环节。在众多容器编排工具中,Kubernetes和Docker Swarm无疑是最受欢迎的两个。本文将从技术特性、易用性和社区支持三个方面,对Kubernetes和Docker Swarm进行比较,以帮助您选择更适合您需求的容器编排工具。
17 3
|
5天前
|
存储 缓存 Docker
docker中挂载数据卷到容器
【10月更文挑战第16天】
15 2
|
6天前
|
存储 关系型数据库 MySQL
|
7天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第13天】
13 2
|
8天前
|
运维 监控 数据可视化
Docker容器可视化管理工具 - WGCLOUD基础介绍
WGCLOUD是新一代运维监测平台,它可以监控Docker容器的各种性能数据,比如内存,cpu,Image,运行时间,运行状态,端口映射等信息
|
9天前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
29 2
|
11天前
|
存储 应用服务中间件 云计算
深入解析:云计算中的容器化技术——Docker实战指南
【10月更文挑战第14天】深入解析:云计算中的容器化技术——Docker实战指南
36 1
|
10天前
|
存储 Kubernetes 监控
深入探索Docker容器化技术的奥秘
【10月更文挑战第15天】深入探索Docker容器化技术的奥秘
16 0