docker的网络管理

来源:互联网 发布:js递归树形数据结构 编辑:程序博客网 时间:2024/06/05 03:32

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

ip link set dev docker0 downip addr del 172.17.42.1/24 dev docker0ip addr add 192.168.0.1/24 dev dcoker0 # ip link set dev docker0 upcp /lib/systemd/system/docker.service /etc/systemd/system/docker.service  vim /etc/systemd/system/docker.service 修改如下[Service]Type=notifyExecStart=/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/bashif [ -z $1 ] || [ -z $2 ] || [ -z $3 ] || [ -z $4 ] || [ -z $5 ]; thenecho "*****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 fiCONTAINERID=$1 SETIP=$2 SETMASK=$3 GATEWAY=$4 ETHNAME=$5#判断宿主机网卡是否存在ifconfig $ETHNAME > /dev/null 2>&1 if [ $? -eq 0 ]; thenread -p "$ETHNAME exist,do you want delelte it? y/n " del if [[ $del == 'y' ]]; thenip link del $ETHNAMEelseexitfi fi#pid=`docker inspect -f '{{.State.Pid}}' $CONTAINERID` mkdir -p /var/run/netnsfind -L /var/run/netns -type l -deleteif [ -f /var/run/netns/$pid ]; then rm -f /var/run/netns/$pidfiln -s /proc/$pid/ns/net /var/run/netns/$pid#ip link add $ETHNAME type veth peer name Bbrctl addif br3 $ETHNAMEip link set $ETHNAME upip link set B netns $pid
#先删除容器内已存在的 eth0ip netns exec $pid ip link del eth0 > /dev/null 2>&1 #设置容器新的网卡 eth0ip netns exec $pid ip link set dev B name eth0ip netns exec $pid ip link set eth0 upip 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
原创粉丝点击