美文网首页
3.docker网络管理

3.docker网络管理

作者: 写代码的向日葵 | 来源:发表于2021-03-12 23:54 被阅读0次

  1. 镜像管理
  2. 容器管理
  3. 网络管理

一. 网络模式及工作原理

docker支持五种网络模式

  • bridge
    默认网络,docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中;IP地址段是172.17.0.1/16
  • host
    容器不会获得一个独立的network namespace,而是与宿主机共用一个
  • none
    获取独立的network namespace,但不为容器进行任何网络配置
  • container
    与指定的容器使用同一个network namespace,网卡配置也都是相同的
  • 自定义
    自定义网桥,默认与bridge网络一样

先创建一个docker0的网桥,使用veth pair创建一对虚拟网卡,一端放到新创建的容器中,并重命名eth0,另一端放到宿主机 上,以veth+随机7个字符串命名,并将这个网络设备加入到docker0网桥中,网桥自动为容器分配一个IP,并设置docker0的IP 为容器默认网关。所以容器默认网络都加入了这个网桥,因此都可以彼此通信。同时在iptables添加SNAT转换网络段IP,以便 容器访问外网。

image.png

二. 容器网络访问原理

  1. Linux IP信息包过滤原理
    Docker主要通过netfilter/iptables实现网络通信。 iptables由netfilter和iptables组成,netfilter组件是Linux内核集成的信息包过滤系统,它维护一个信息包过滤表,这个表 用于控制信息包过滤处理的规则集。而iptables只是一个在用户空间的工具,用于增删改查这个过滤表的规则。#三. 容器桥接宿主机网络及容器配置固定ip


    image.png
    image.png
  2. 容器访问外部

#iptables -t nat -nL
Chain POSTROUTING (policy ACCEPT)
target prot opt source 
MASQUERADE tcp -- 172.17.0.2 
  1. 外部访问容器
#iptables -t nat -nL
Chain DOCKER (2 references) 
target   prot opt source   destination
DNAT tcp -- 0.0.0.0/0   0.0.0.0/0    tcp dpt:88 to:172.18.0.2:80
  1. 桥接宿主机网络
  • 临时生效
# 网桥名称 
br_name=br0
# 添加网桥
brctl addbr $br_name 
# 给网桥设置IP
ip addr add 192.168.1.120/24 dev $br_name 
# 删除已存在的eth0网卡配置
ip addr del 192.168.1.120/24 dev eth0
# 激活网桥
ip link set $br_name up
# 添加eth0到网桥
brctl addif $br_name eth0 
# 还需要在Docker启动时桥接这个网桥: 
vi /etc/default/docker DOCKER_OPTS="-b=br0"
service docker restart
  • 永久生效
# vi /etc/network/interfaces
auto eth0
iface eth0 inet static
auto br0
iface br0 inet static
      address 192.168.1.120 
      netmask 255.255.255.0 
      gateway 192.168.1.1 
      dns-nameservers 192.168.1.1 
      bridge_ports eth0
  1. 配置固定IP
C_ID=$(docker run -itd --net=none ubuntu)
C_PID=$(docker inspect -f '{{.State.Pid}}' $C_ID)
# 创建network namespace目录并将容器的network namespace软连接到此目录,以便ip netns命令读取 
mkdir -p /var/run/netns
ln -s /proc/$C_PID/ns/net /var/run/netns/$C_PID
# 添加虚拟网卡veth+容器PID,类型是veth pair,名称是vp+容器PID
ip link add veth$C_PID type veth peer name vp$C_PID
# 添加虚拟网卡到br0网桥
brctl addif br0 veth$C_PID
# 激活虚拟网卡
ip link set veth$C_PID up
# 设置容器网络信息
IP='192.168.1.123/24'
GW='192.168.1.1'
# 给进程配置一个network namespace
ip link set vp$C_PID netns $C_PID
# 在容器进程里面设置网卡信息
ip netns exec $C_PID ip link set dev vp$C_PID name eth0
ip netns exec $C_PID ip link set eth0 up
ip netns exec $C_PID ip addr add  $IP dev eth0
ip netns exec $C_PID ip route add default via 192.168.1.1
  1. pipework
    如果你觉得使用上面命令比较复杂,也有别人封装好的脚本:
git clone https://github.com/jpetazzo/pipework.git
cp pipework/pipework /usr/local/bin/
docker run -itd --net=none --name test01 ubuntu pipework br0 test01 192.168.1.88/24@192.168.1.1

四.容器SSH连接

# docker run -itd --name test01 centos:6 # docker attach test01
# yum install openssh-server
# passwd root
# docker commit test01 centos6_ssh
# docker run -itd --name test03 -p 2222:22 centos6_ssh

相关文章

  • 3.docker网络管理

    镜像管理[https://www.jianshu.com/p/5c69c15458b3] 容器管理[https:/...

  • 3.Docker 容器管理

    查看镜像 简单开启容器并执行 进入容器,并给一个终端和输入设备 添加容器开启后需要执行的命令 删除容器 启动容器并...

  • Docker常用命令

    1.docker info 2.docker version 3.docker images 4.docker p...

  • 计算机网络技术(七)——网络管理技术

    摘要 网络管理概述 网络管理的体系结构与模式 网络管理的功能 简单网络管理协议(SNMP) 一、网络管理概述 网络...

  • Docker入门及安装

    1.卸载 2.CentOS7中安装 3.docker基本操作 容器操作 镜像操作

  • Docker 入门

    3.docker 中的nginx 安装: 3.1 拉去nginx 3.2 创建nginx 容器 3.3 停止和删...

  • fabric相关要学习的东西

    1.Linux操作系统基本操作2.go(Java)3.docker(dockerfile,docker-compo...

  • 3.Docker Image

    1.什么是Image image是文件和meta data的集合(root filesystem) 分层的,并且每...

  • docker基本命令使用

    1.docker search命令使用 2.docker pull 命令使用 3.docker rmi命令使用 4...

  • golang编译和docker执行

    1.源码 dockerfile 2.源码编译在mac环境需要交叉编译 3.docker执行需要暴露端口

网友评论

      本文标题:3.docker网络管理

      本文链接:https://www.haomeiwen.com/subject/jcmgqltx.html