• Docker容器(五)——Docker静态化IP


    (1).Docker的四种网络模式

      Docker有以下四种模式,通过--net=[参数]选项(现在也可以使用--network [参数])指定:

        host模式:使用宿主机的IP地址和端口。使用--net=host指定。

        container模式:和一个指定容器共享IP和端口。使用--net=container:[容器实例名称或ID]指定。

        none模式:关闭容器的网络功能。使用--net=none指定。

        bridge模式:为容器分配IP,并将容器连接到docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置,实现与宿主机通信。默认模式,使用--net=bridge指定。

      默认选择bridge的情况下,容器启动后会通过DHCP自动获取一个地址。在CentOS7系统上,docker环境下,如果想要给容器分配一个固定IP(可以和宿主机同网段),可以使用pipework脚本(网络模式选择none)。

      注意1:docker默认dridge模式相当于VMware中NAT模式;pipework脚本给容器分配固定IP,相当于VMware中桥接模式。

      注意2:当容器重启时,pipework设置的IP会自动消失,需要重新设置。

    (2).为容器配置静态IP

     1)配置桥接网络

    [root@youxi1 ~]# yum -y install bridge-utils
    [root@youxi1 ~]# cd /etc/sysconfig/network-scripts/
    [root@youxi1 network-scripts]# cp ifcfg-ens33{,.bak}
    [root@youxi1 network-scripts]# ls ifcfg-ens33*
    ifcfg-ens33  ifcfg-ens33.bak
    [root@youxi1 network-scripts]# vim ifcfg-ens33
    #IPADDR="192.168.5.101"  //注释掉IP、子网掩码、网卡、DNS
    #PREFIX="24"
    #GATEWAY="192.168.5.2"
    #DNS1="192.168.5.2"
    BRIDGE="br0"  //添加桥接到br0
    [root@youxi1 network-scripts]# vim ifcfg-br0  //新建br0配置文件
    DEVICE="br0"  //设备名称
    NM_CONTROLLED="yes"
    ONBOOT="yes"
    TYPE="Bridge"  //注意,B要大写
    BOOTPROTO=none
    IPADDR=192.168.5.101  //IP地址、子网掩码、网关、DNS要和上面注释掉的一样
    NETMASK=255.255.255.0
    GATEWAY=192.168.5.2
    DNS1=192.168.5.2
    [root@youxi1 network-scripts]# systemctl restart network  //重启网络
    [root@youxi1 network-scripts]# ip a sh
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
        link/ether 00:0c:29:e6:d6:27 brd ff:ff:ff:ff:ff:ff
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:8b:ee:a5:51 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
    4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 00:0c:29:e6:d6:27 brd ff:ff:ff:ff:ff:ff
        inet 192.168.5.101/24 brd 192.168.5.255 scope global noprefixroute br0
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fee6:d627/64 scope link 
           valid_lft forever preferred_lft forever
    

     2)下载pipework

      下载pipework地址:https://github.com/jpetazzo/pipework。可以在Windows上下载好后上传至CentOS放服务器,也可以使用命令git clone https://github.com/jpetazzo/pipework.git直接在CentOS服务器上下载。

    [root@youxi1 network-scripts]# yum -y install unzip
    [root@youxi1 network-scripts]# cd ~
    [root@youxi1 ~]# unzip pipework-master.zip  //解压
    [root@youxi1 ~]# cp pipework-master/pipework /usr/local/bin/  //为了可以直接调用
    

     3)为容器配置静态IP

    [root@youxi1 ~]# docker images
    REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
    centos                         httpd               65f64a254fcc        6 days ago          346MB
    centos                         latest              67fa590cfc1c        4 weeks ago         202MB
    hub.c.163.com/library/tomcat   latest              72d2be374029        2 years ago         292MB
    [root@youxi1 ~]# docker run -itd --network none --privileged centos:latest bash
    51c03944e31297272541cc035e235f326a8933d066021e945d8ea4caf8fd1c17
    [root@youxi1 ~]# pipework br0 51c03944e312 192.168.5.102/24@192.168.5.2
    [root@youxi1 ~]# ping 192.168.5.102
    PING 192.168.5.102 (192.168.5.102) 56(84) bytes of data.
    64 bytes from 192.168.5.102: icmp_seq=1 ttl=64 time=0.218 ms
    64 bytes from 192.168.5.102: icmp_seq=2 ttl=64 time=0.085 ms
    ^C
    --- 192.168.5.102 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1000ms
    rtt min/avg/max/mdev = 0.085/0.151/0.218/0.067 ms
    [root@youxi1 ~]# systemctl stop firewalld.service  //如果想ping域名以及安装net-tools,请关闭防火墙。
    [root@youxi1 ~]# docker exec -it 51c03944e312 bash
    [root@51c03944e312 /]# ping www.baidu.com
    PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
    64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=128 time=7.92 ms
    64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=128 time=7.99 ms
    ^C
    --- www.a.shifen.com ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 7.922/7.960/7.999/0.097 ms
    [root@51c03944e312 /]# yum -y install net-tools
    [root@51c03944e312 /]# ifconfig 
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.5.102  netmask 255.255.255.0  broadcast 192.168.5.255
            ether b2:68:6f:3f:2d:dd  txqueuelen 1000  (Ethernet)
            RX packets 1532  bytes 8274432 (7.8 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 1378  bytes 78622 (76.7 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 4  bytes 336 (336.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 4  bytes 336 (336.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

      注意:由于我不知道设置静态IP后需要添加什么端口,所以我将防火墙关闭了。

    4)扩展

      --privileged选项表示开启特权模式。在没有该选项的容器实例中,虽然显示的是root用户,其实只是宿主机(物理机)的一个普通用户,包含设备文件和部分命令在内都无法使用。如果使用了该选项就可以调用这部分内容,例如mount命令。

      测试如下:

    [root@youxi1 ~]# docker run -it centos:latest bash
    [root@d1d63355d418 /]# ls /dev/
    console  fd    mqueue  ptmx  random  stderr  stdout  urandom
    core     full  null    pts   shm     stdin   tty     zero
    [root@05b2b38259cf /]# exit
    exit
    [root@youxi1 ~]# docker run -it --privileged centos:latest bash
    [root@08065470bd72 /]# ls /dev/  //可以看到差距相当大
    agpgart          mem                 snd     tty27  tty50    usbmon1
    autofs           midi                sr0     tty28  tty51    usbmon2
    bsg              mqueue              stderr  tty29  tty52    vcs
    btrfs-control    net                 stdin   tty3   tty53    vcs1
    bus              network_latency     stdout  tty30  tty54    vcs2
    console          network_throughput  tty     tty31  tty55    vcs3
    core             null                tty0    tty32  tty56    vcs4
    cpu              nvram               tty1    tty33  tty57    vcs5
    cpu_dma_latency  oldmem              tty10   tty34  tty58    vcs6
    crash            port                tty11   tty35  tty59    vcsa
    dm-0             ppp                 tty12   tty36  tty6     vcsa1
    dm-1             ptmx                tty13   tty37  tty60    vcsa2
    dmmidi           pts                 tty14   tty38  tty61    vcsa3
    dri              random              tty15   tty39  tty62    vcsa4
    fb0              raw                 tty16   tty4   tty63    vcsa5
    fd               rtc0                tty17   tty40  tty7     vcsa6
    full             sda                 tty18   tty41  tty8     vfio
    fuse             sda1                tty19   tty42  tty9     vga_arbiter
    hidraw0          sda2                tty2    tty43  ttyS0    vhci
    hpet             sdb                 tty20   tty44  ttyS1    vhost-net
    hwrng            sdb1                tty21   tty45  ttyS2    vmci
    input            sg0                 tty22   tty46  ttyS3    vsock
    kmsg             sg1                 tty23   tty47  uhid     zero
    loop-control     sg2                 tty24   tty48  uinput
    mapper           shm                 tty25   tty49  urandom
    mcelog           snapshot            tty26   tty5   usbmon0
    

      

    参考:https://www.cnblogs.com/zuxing/articles/8780661.html

  • 相关阅读:
    sqlserver2005存储汉字成问号解决办法:
    .net c# 日期格式和常用处理
    文件夹无法访问拒绝访问,无法删除文件的,快速有效解决方法
    打印出所有的 info.plist 中的 keys、values
    利用时间戳来准确计算某个时间点具现在的时间差
    项目中的技巧经验汇总
    "Base SDK Missing"问题的解决
    UIPopoverController的使用
    给ios自带控件添加圆角边的方法
    实现程序内截屏功能的代码
  • 原文地址:https://www.cnblogs.com/diantong/p/11535696.html
Copyright © 2020-2023  润新知