docker的网络管理

Docker在启动时会创建一个虚拟网桥docker0,默认地址为172.17.42.1/16, 容器启动后都会 被桥接到 docker0 上,并自动分配到一个 IP 地址。
docker网络管理
修改 docker 的默认网络配置: # systemctl stop docker

ip link set dev docker0 down
ip addr del 172.17.42.1/24 dev docker0
ip addr add 192.168.0.1/24 dev dcoker0 # ip link set dev docker0 up
cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service 
 vim /etc/systemd/system/docker.service
 修改如下
[Service]
Type=notify

ExecStart=/usr/bin/docker daemon -H fd:// --bip="192.168.0.1/24" ...(修改的ip地址)
systemctl daemon-reload # systemctl start docker

当然这是写到配置文件中的,属于永久修改.
以下是各种参数的使用方法与含义
这里写图片描述
这里写图片描述

在 none 网络模式下分配固定 ip:
netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟 化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。
使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则 等都是独立的,就好像进入了另外一个网络一样。

# docker run -it --name vm2 --net none ubuntu bash # ip link add name veth0 type veth peer name veth1 # brctl addif docker0 veth0
# mkdir /var/run/netns
# docker inspect -f '{{.State.Pid}}' vm2 5134
# ln -s /proc/5134/ns/net /var/run/netns/5134
# ip link set veth1 netns 5134
# ip netns exec 5134 ip link set veth1 name eth0
# ip netns exec 5134 ip link set eth0 address 02:42:c0:a8:01:03 #可选 # ip netns exec 5134 ip link set eth0 up
# ip netns exec 5134 ip addr add 192.168.1.10/24 dev eth0
# ip netns exec 5134 ip route add default via 192.168.1.1

常用的 namespace 的命令: 1. 添加一个 namespace
ip netns add [name]
2. 在 namespace 中启用一个设备
ip netns exec [name] ip link set lo up
3. 在 namespace 中新加一个设备
ip link set [dev-name] netns [name]
启用:
ip netns exec [name] ip link set [dev-name] up
4. 查看指定 namespace 中指定设备的参数信息
ip netns exec [name] ip addr show [dev-name] permanent scope global
5. 为 namespace 中指定设备设置 ip
ip netns exec [name] ip -4 addr add 192.168.1.2/24 brd 192.168.1.255 scope global dev
[dev-name]
6.查看所有 network namespace ip netns list
7.ping 虚拟机实例

ip netns exec [name] ping 192.168.1.3
添加固定 IP 的 Shell 脚本:
#/bin/bash
if [ -z $1 ] || [ -z $2 ] || [ -z $3 ] || [ -z $4 ] || [ -z $5 ]; then
echo "*****Input the necessary parameters: CONTAINERID IP MASK GATEWAY ETHNAME"
echo "*****Call the script like: sh static_ip.sh vm1 192.168.1.10 24 192.168.1.1 veth0"
exit fi
CONTAINERID=$1 SETIP=$2 SETMASK=$3 GATEWAY=$4 ETHNAME=$5
#判断宿主机网卡是否存在
ifconfig $ETHNAME > /dev/null 2>&1 if [ $? -eq 0 ]; then
read -p "$ETHNAME exist,do you want delelte it? y/n " del if [[ $del == 'y' ]]; then
ip link del $ETHNAME
else
exit
fi fi
#
pid=`docker inspect -f '{{.State.Pid}}' $CONTAINERID` mkdir -p /var/run/netns
find -L /var/run/netns -type l -delete
if [ -f /var/run/netns/$pid ]; then rm -f /var/run/netns/$pid
fi
ln -s /proc/$pid/ns/net /var/run/netns/$pid
#
ip link add $ETHNAME type veth peer name B
brctl addif br3 $ETHNAME
ip link set $ETHNAME up
ip link set B netns $pid
#先删除容器内已存在的 eth0
ip netns exec $pid ip link del eth0 > /dev/null 2>&1 #设置容器新的网卡 eth0
ip netns exec $pid ip link set dev B name eth0
ip netns exec $pid ip link set eth0 up
ip netns exec $pid ip addr add $SETIP/$SETMASK dev eth0 ip netns exec $pid ip route add default via $GATEWAY
容器端口映射:
# docker run -p 8000:80 -p 8001:443 -it --name site1 nginx bash
# docker run -it -P --name site2 nginx bash 大写 -P 参数表示宿主机随机分配端口

Docker 的端口映射是由 iptables 来实现的:
容器间互联:
–link 参数可以在不映射端口的前提下为两个容器间建立安全连接, –link 参数可以连接一个 或多个容器到将要创建的容器。
–link 参数的格式为 –link name:alias,其中 name 是要链接的容器的名称,alias 是这个连 接的别名。

# docker run -d --name db redis
# docker run -it --name web --link db:db nginx bash
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值