docker浅学笔记-docker网络管理

目录

###docker网络管理###

1、外部访问端口映射

2、单机容器互通

3、不同主机网络互通,etcd+flannel+docker实现

4、验证工作(192.168.192.129/130)


###docker网络管理###

       docker网络管理主要试验了三点:外部访问容器端口,痛点在于创建容器时考虑不周到,中途指定端口映射失败,需要先将容器打包为镜像,重新创建并指定端口映射;单机容器互通根据情况选择方法;不同主机网络互通痛点在于etcd设定ip地址规则,key一定要对应flannel配置文件,还有docker需要配置连接flannel,否则docker网桥和容器地址也不会改变,加以总结以记之。


1、外部访问端口映射

-P随机端口
-p 192.168.1.1:80:80指定端口
-p 80:80/udp 指定协议

创建镜像和容器
[root@node01 /]# docker pull centos
直接使用bash创建容器后,报错systemctl未知
[root@node01 /]# docker run --privileged -it -d  --name centos-lnmp centos  /usr/sbin/init
[root@node01 /]# docker exec -it centos-lnmp bash
[root@692d1b8f634a /]# yum install -y nginx
FAQ:安装好nginx后,docker run命令添加端口映射失败,只有在创建容器时候才能定义端口映射,目前解决方法为
1、将容易打包为镜像;2、导入镜像;3、重新创建容器并指定规则;4、查看结果。还有一种修改配置文件方法自行搜索。
[root@node01 /]# docker export -o lnmp.tar centos-lnmp
[root@node01 /]# docker import lnmp.tar hahaha:v1
[root@node01 /]# docker run --privileged -it -d  -p 8888:80  --name hahaha-lnmp hahaha:v1  /usr/sbin/init
[root@node01 /]# docker exec -it hahaha-lnmp bash
[root@node01 /]# docker ps

2、单机容器互通

* 第一种方法:link参数配置busybox网络互通(集常用命令和工具的软件)
 这种方法特点是容器IP可能不固定,一般容器名是固定的
[root@node01 ~]# docker run -it --name busybox1 busybox
[root@node01 ~]# docker run -it --link busybox1:busybox1 --name busybox2 busybox
/ # cat /etc/hosts
172.17.0.2      busybox1 c65f8fcbbc7b  #自动添加域名解析
172.17.0.3      3b2ce1c63b9a 

* 第二种方法:利用docker网络模式
[root@node01 ~]# docker network ls
host:能充分利用网卡性能,但容易占用本地端口产生冲突,不常用
创建自己的局域网络(可指定网段)
特点自定义网段与ip,创建出来的容器默认互通,但是只针对自定义的网络有效
[root@node01 ~]# docker network  create --driver bridge (--subnet 192.168.88.0/24 --gateway 192.168.88.1) my-net1
[root@node01 ~]# docker run -it --rm --network=my-net1 --ip 192.168.88.5 busybox

* 第三种方法:两个不在同一网络容器怎么互通
特点给容器添加双网卡
[root@node01 ~]# docker network connect 网络名 容器名

 

3、不同主机网络互通,etcd+flannel+docker实现


*主控端操作(192.168.192.129)*

#####主控端配置etcd####
[root@node01 ~]# yum install etcd flannel -y
配置etcd
[root@node01 ~]# cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.bak
[root@node01 ~]# vim /etc/etcd/etcd.conf
ETCD_LISTEN_PEER_URLS="http://192.168.192.129:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.192.129:2379,http://127.0.0.1:2379"
ETCD_NAME="master"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.192.129:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.192.129:2379"
重启etcd
[root@node01 ~]# systemctl enable etcd
[root@node01 ~]# systemctl start etcd
设置host主机的subnet即ip地址池
[root@node01 ~]# vim /root/etcd.sh
{ "Network": "10.10.0.0/16","SubnetLen": 24,"Backend": {"Type":"vxlan"} }
保存配置到etcd,/usr/local/bin/network/config作为key会在flannel里面也会配置
[root@node01 ~]# etcdctl --endpoints=http://192.168.192.129:2379 set /usr/local/bin/network/config < /root/etcd.sh

#####主控端配置etcd####
[root@node01 ~]# yum install -y flannel
[root@node01 ~]# cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak
[root@node01 ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.192.129:2379"
FLANNEL_ETCD_PREFIX="/usr/local/bin/network"
[root@node01 ~]# systemctl enable flanneld
[root@node01 ~]# systemctl start flanneld
[root@node01 ~]# systemctl restart docker
发现新增flannel.1网卡
[root@node01 ~]# ip a
flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
link/ether 7e:8c:5b:1a:60:35 brd ff:ff:ff:ff:ff:ff
inet 10.10.90.0/32 scope global flannel.1


*被控端操作(192.168.192.130)*
[root@node02 ~]# yum install -y flannel
[root@node02 ~]# cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak
[root@node02 ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.192.129:2379"
FLANNEL_ETCD_PREFIX="/usr/local/bin/network"
[root@node02 ~]# systemctl enable flannel
Failed to execute operation: No such file or directory
[root@node02 ~]# systemctl enable flanneld
[root@node02 ~]# systemctl start flanneld
[root@node01 ~]# systemctl restart docker
此时发现两台机器docker网卡ip地址相同都是10.10段,接下来需要配置 docker 连接 flannel


*docker操作(192.168.192.129/130)*
[root@node02 ~]# cat  /run/flannel/subnet.env
FLANNEL_SUBNET=10.10.48.1/24
FLANNEL_MTU=1450
[root@node01 ~]# vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --bip=10.10.90.1/24 --mtu=1450
[root@node02 ~]# systemctl daemon-reload
[root@node02 ~]# systemctl restart docker


4、验证工作(192.168.192.129/130)


此时执行 ip a命令
flannel和docker网卡应该都是10.10段,如果两台主机容器之间还是ping不通
如果开启了路由转发:echo 1 > /proc/sys/net/ipv4/ip_forward 还是不行,
且主机防火墙:firewalld和selinux已经关闭,因为linux还有底层的iptables,
所以在两台主机上分别执行iptables -P  FORWARD ACCEPT
#验证
最终结果应为两台主机之间、主机与容器之间、容器与容器之间网络互通

/ # ping www.baidu.com
PING www.baidu.com (61.135.169.121): 56 data bytes
64 bytes from 61.135.169.121: seq=0 ttl=127 time=59.426 ms
64 bytes from 61.135.169.121: seq=1 ttl=127 time=47.179 ms

/ # ping 192.168.192.129
PING 192.168.192.129 (192.168.192.129): 56 data bytes
64 bytes from 192.168.192.129: seq=0 ttl=64 time=0.058 ms
64 bytes from 192.168.192.129: seq=1 ttl=64 time=0.100 ms

/ # ping 192.168.192.130
PING 192.168.192.130 (192.168.192.130): 56 data bytes
64 bytes from 192.168.192.130: seq=0 ttl=63 time=0.427 ms
64 bytes from 192.168.192.130: seq=1 ttl=63 time=1.273 ms

/ # ping 10.10.48.2
PING 10.10.48.2 (10.10.48.2): 56 data bytes
64 bytes from 10.10.48.2: seq=0 ttl=62 time=1.025 ms
64 bytes from 10.10.48.2: seq=1 ttl=62 time=0.776 ms

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

情绪零碎碎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值