docker学习1

1,docker配置ipv6

参考:https://www.cnblogs.com/yangyuliufeng/p/9989812.html

公司计划在2020年前完成IPV6化改造,于是我先行查阅了一些资料了解Docker进行IPv6化的可能性。

预计明年正式开始测试。

方法一、使容器中的服务支持IPv6地址
不为容器中的服务特别分配IPv6地址。只要Docker把外部的IPv6地址端口映射到容器的IPv4端口上,随后访问主机的IPv6相应端口即可。

方法二、为Docker网络分配IPv6地址
(1)Docker daemon默认只支持IPv4地址,通过在运行Docker时增加–ipv6参数可以使其同时支持ipv4和ipv6地址。
(2)此时容器仅获得了本地ipv6地址,如果要获得全局ipv6地址,必须确保机器有至少/80的地址段,通过在运行Docker时增加–fixed-cidr-v6参数为其配置ipv6子网。
该参数会在路由表中添加一条路由,相当于执行了一下命令:
$ ip -6 route add 2001:db8:1::/64 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1
随后,所有路由往2001:db8:1::/64的流量都会通过docker0接口路由
(3)除了在运行时添加参数,还可以直接编辑/etc/docker/daemon.json文件,加入以下内容:
{
“ipv6”: true,
“fixed-cidr-v6”: “2001:db8:1::/64”
}
其中2001:db8:1::/64是IPv6地址段。
(4)使用systemctl restart docker命令重启Docker。
(5)使用ifconfig命令查看分配到Docker网络的IPv6地址段
(6)完成了上面的配置之后,无需特意配置,只需正常建立容器,即可为容器分配IPv6地址。可以使用“docker inspect容器名”查看容器的IP地址。

docker0   Link encap:以太网  硬件地址 02:42:51:fd:5e:28  
          inet 地址:172.17.0.1  广播:172.17.255.255  掩码:255.255.0.0
          inet6 地址: 2001:db8:1::1/64 Scope:Global
          inet6 地址: fe80::1/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  跃点数:1
          接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0 
          接收字节:0 (0.0 B)  发送字节:0 (0.0 B)

2,配置ipv6网桥

参考下面的链接:
https://blog.csdn.net/taiyangdao/article/details/83066009

1.设置Docker Engine支持IPv6

  1. 启动Docker Engine时即开启对IPv6的支持

默认启动时Docker Engine只支持IPv4。

启动Docker Engine时,指定–ipv6选项即可支持IPv6。

  1. 对于已经启动的Docker Engine开启对IPv6的支持

配置/etc/docker/daemon.json文件如下。

{
“ipv6”: true,
“fixed-cidr-v6”: “fd00:daad:beee::/48”
}
说明:Docker Engine支持IPv6后,docker0将拥有IPv6的link-local地址fe80::1。但要使得docker0拥有IPv6的global地址,还需要设置–fixed-cidr-v6,以指定Docker容器实例可用的IPv6子网。

执行systemctl reload docker重载Docker Engine的配置文件,Docker Engine将会添加几条新的路由规则到iptables。以上述配置文件为例,Docker Engine将会执行如下等价操作:

$ ip -6 route add fd00:dead:beef::/48 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1
如果Docker宿主机的网卡(例如eth0)是通过路由广播获取Docker Engine的IPv6配置参数,则上述配置文件的生效将引起Docker Engine将会执行如下等价操作:

$ ip -6 route add fd00:dead:beef::/48 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1
$ sysctl net.ipv6.conf.eth0.accept_ra=2
2 创建Docker网络支持IPv6

事实上,Docker Engine支持IPv6后,Docker Engine默认的bridge网络就支持IPv6,直接使用bridge网络即可(默认即使用bridge网络)。

如果要使用定制网络,则创建网络时docker network create带–ipv6选项,示例如下:

docker network create -d bridge --ipv6 --subnet "fd00:daad:beee:1::/64" --gateway="fd00:daad:beee::1" --subnet=172.18.0.0/16 --gateway=172.18.0.1 myNet

3 创建容器实例支持IPv6

Docker Engine支持IPv6后,创建容器时docker run带–ip6选项即可。

注意,如果docker run命令带–ip或–ip6选项,则其网络不能是默认的bridge网络,否则会抛出如下异常:

user specified IP address is supported on user defined networks only.

必须为创建的容器采用定制网络,才能够通过–ip或–ip6选项指定容器实例的IP。

首先要保证定制网络(如myNet)支持IPv6,然后创建容器时docker run带–ip6选项和–network=myNet即可。

docker run -itd -P --ip=172.18.0.101 --ip6="fd00:daad:beee:1::101" --network=myNet --name=my101 centos:7

参考链接:

https://docs.docker.com/config/daemon/ipv6/

https://docs.docker.com/v17.09/engine/userguide/networking/default_network/ipv6/#how-ipv6-works-on-docker

https://github.com/moby/moby/issues/29443#issuecomment-495808871
————————————————
版权声明:本文为CSDN博主「易生一世」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/taiyangdao/article/details/83066009

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值