设为首页 收藏本站
查看: 1181|回复: 0

[经验分享] 配置docker静态IP地址

[复制链接]

尚未签到

发表于 2019-2-20 10:19:20 | 显示全部楼层 |阅读模式
  本节所讲内容:
  
  
实验环境: 一个还原到之前安装了docker的虚拟机快照:  
   
  Docker的4种网络模式
  1、Docker有以下4种网络模式:
  host模式,使用--net=host指定。
  container模式,使用--net=container:NAME_or_ID指定。
  none模式,使用--net=none指定。
  bridge模式,使用--net=bridge指定,默认设置。
  默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能不是我们想要的,在centos7系统上, docker环境下可以使用pipework脚本对容器分配固定IP(这个IP可以是和物理机同网段IP)。
  注: docker 默认是bridge(--net=bridge)模式,相当于VMware中NAT模式。
  docker环境下可以使用pipework脚本对容器分配固定IP,相当于VMware中桥接模式。
  注:Pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。
  
  配置桥接网络:
  桥接本地物理网络的目的,是为了局域网内用户方便访问docker实例中服务,不要需要各种端口映射即可访问服务。 但是这样做,又违背了docker容器的安全隔离的原则,工作中辩证的选择.
  
  创建桥设备:
  安装包:
  [root@xuegod63 ~]# rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm
  把ens33绑到br0桥设备上:
  [root@xuegod63 ~]# cd /etc/sysconfig/network-scripts/
  [root@xuegod63 network-scripts]# cp ifcfg-ens33 /opt/ #备份一下eth0
  [root@xuegod63 network-scripts]# vim ifcfg-ens33#编辑配置文件为以下内容
  [root@xuegod63 network-scripts]# vim ifcfg-ens33
  TYPE="Ethernet"
  BOOTPROTO="none"
  DEFROUTE="yes"
  IPV4_FAILURE_FATAL="no"
  IPV6INIT="yes"
  IPV6_AUTOCONF="yes"
  IPV6_DEFROUTE="yes"
  IPV6_FAILURE_FATAL="no"
  NAME="ens33"
  UUID="7a556ff6-f865-4549-b08f-9e526c9bb638"
  DEVICE="ens33"
  ONBOOT="yes"
  IPADDR="192.168.1.63" #删除这些IP地址相关内容
  PREFIX="24"
  GATEWAY="192.168.1.1"
  DNS1="8.8.8.8"
  IPV6_PEERDNS="yes"
  IPV6_PEERROUTES="yes"
  IPV6_PRIVACY="no"
  BRIDGE="br0" #在文件最后插入这一行
  
  生成桥设备br0的配置文件:
  [root@xuegod63 network-scripts]# vim ifcfg-br0 #创建ifcfg-br0 文件,并写入以下内容
  DEVICE="br0"
  NM_CONTROLLED="yes"
  ONBOOT="yes"
  TYPE="Bridge"
  BOOTPROTO=none
  IPADDR=192.168.1.63
  NETMASK=255.255.255.0
  GATEWAY=192.168.1.1
  DNS1=114.114.114.114
  注:TYPE="Bridge"   B要大写。 不大写也可以。
  
  [root@xuegod63 network-scripts]# service network restart
  Restarting network (via systemctl): [ 确定 ]
  
  测试br0:
  root@xuegod63 network-scripts]# ifconfig
  
  [root@xuegod63 network-scripts]# ping g.cn
  PING g.cn (203.208.37.20) 56(84) bytes of data.
  64 bytes from 203.208.37.20: icmp_seq=1 ttl=57 time=12.3 ms
  
  下载pipework 包
  方法1:直接下载pipework zip包
  https://github.com/jpetazzo/pipework
  
  把pipework-master.zip上传到Linux中
  
  扩展
  方法2:使用git获得:
  git下载链接:https://github.com/jpetazzo/pipework
  
  下载pipework工具:https://github.com/jpetazzo/pipework.git
  [root@xuegod63 ~]# rpm -qf `which git`
  git-1.8.3.1-5.el7.x86_64
  [root@xuegod63 ~]# cd /opt/
  [root@xuegod63 opt]# git clone https://github.com/jpetazzo/pipework.git
  
  咱们使用方法1:
  将 pipework-master.zip上传xuegod63上:
  [root@xuegod63 ~]# unzip pipework-master.zip # 不需要编译,因为pipework 是一个shell脚本
  查看:
  [root@xuegod63 ~]# vim ./pipework-master/pipework
  [root@xuegod63 ~]# cp /root/pipework-master/pipework /usr/local/bin/ #方便后期使用pipework命令
  
  到此 pipework已经安装成功。
  
  启动docker:
  [root@xuegod63 ~]# systemctl start docker
  把centos-lastest-docker-image.tar 镜像上传Linux上,并导入docker平台
  [root@xuegod63 ~]# docker load -i centos-lastest-docker-image.tar
  
  使用静态IP启动一个docker实例
  例:以none模式,使用--net=none 启动一个容器,并且开启docker特权模式。
  [root@xuegod63 ~]# docker run -itd --net=none --privileged=true centos bash
  e4698f625a56661edd2678269215ba42d4fa41c2da881768a741a72b4a3d0c60
  扩展
  --privileged=true  #允许开启特权功能
  privileged [ˈprɪvəlɪdʒd]
  在docker 0.6版以后,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部物理机的一个普通用户权限。
使用privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。不启用privileged,容器中root用户不能执行mount。

  
  扩展: 测试privileged 特权功能 可以:1
  1、未设置privileged启动的容器:
  [root@localhost ~]# docker run -it centos:latest bash
  [root@65acccbba42f /]# ls /dev #可以看到的设备文件比较少
  console fd full fuse kcore null ptmx pts random shm stderr stdin stdout tty urandom zero
  [root@00931099722f /]# mount -o bind /etc /opt/
  mount: permission denied
  而在物理机是可以挂载成功的:
  [root@xuegod63 ~]# mount -o bind /etc /opt/
  [root@00931099722f /]# exit
  
  2、使用privileged启动的容器
  [root@xuegod63 ~]# docker run -it --privileged centos:latest bash
  [root@4a51d0fde3ce /]# ls /dev/ #可以看到很多设备文件
  [root@4a51d0fde3ce /]# mount -o bind /etc /opt/ #可以挂载成功
  [root@4a51d0fde3ce /]# mount /dev/sda1 /opt/ #可以挂载物理机上的sda1分区
  [root@4a51d0fde3ce /]# ls /opt/
  [root@4a51d0fde3ce /]# init 0 #不行,还是使用exit退出docker
  Couldn't find an alternative telinit implementation to spawn.
  [root@4a51d0fde3ce /]# exit
  对开特权模式的docker实例有了解:1 没有:2
  直接吸收:80%的技术! 拿个本纸
  
  
  
  扩展结束,接着给容器配置地址
  [root@xuegod63 ~]# docker ps
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  e4698f625a56 centos "bash" 30 seconds ago Up 27 seconds suspicious_colden
  可以看到容器启动的ID ,比如是e4698f625a56
  给此容器配置地址
  pipework语法:pipework 网桥名 容器实例ID 分配给容器的IP/掩码@网关
  [root@xuegod63 ~]# pipework br0 c88c4c7f01f9 192.168.1.71/24@192.168.1.1
  
  测试IP:
  [root@xuegod63 ~]# ping 192.168.1.71 #可以看到docker实例的IP已经可以使用
  PING 192.168.1.71 (192.168.1.71) 56(84) bytes of data.
  64 bytes from 192.168.1.71: icmp_seq=1 ttl=64 time=0.639 ms
  
  [root@xuegod63 ~]# docker inspect 容器实例ID #查看容器的详细情况
  
  进入容器,测试网络:
  [root@xuegod63 ~]# docker exec -it 87fadc0249a9 /bin/bash #进入容器
  [root@6e38ee3f9672 /]# cat /etc/resolv.conf
  # Generated by NetworkManager
  search xuegod63.cn
  nameserver 114.114.114.114
  
  [root@e4698f625a56 /]# yum install -y net-tools #安装ifconfig命令
  [root@e4698f625a56 /]# ifconfig
  eth1: flags=4163 mtu 1500
  inet 192.168.1.71 netmask 255.255.255.0 broadcast 192.168.1.255
  [root@e4698f625a56 /]# route -n
  Kernel IP routing table
  Destination Gateway Genmask Flags Metric Ref Use Iface
  0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
  192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
  
  到此,docker实例配置静态IP成功。
  
  实战1: 使用静态IP启动的docker实例运行,一个web服务器
  [root@1e1db6c6c17c ~]# yum install httpd -y #安装
  [root@1e1db6c6c17c ~]# systemctl start httpd #这个方式,无法启动
  [root@1e1db6c6c17c ~]# httpd #直接运行 httpd命令
  AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a0be:f1ff:feeb:484. Set the 'ServerName' directive globally to suppress this message
  [root@1e1db6c6c17c ~]# netstat -antup | grep 80 #发现80已经监听
  [root@1e1db6c6c17c ~]# cd /var/×××w/html/ #
  [root@1e1db6c6c17c ~]# echo aaaaa > index.html
  查看结果即可
  
  总结:
  1、创建一个br0桥接设备
  2、下载pipework 包并安装
  3、安装并运行docker
  4、导入centos docker 镜像
  5、启动一个docker实例 注意加参数: --net=none --privileged=true
  6、使用pipework 给docker实例配置IP




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674759-1-1.html 上篇帖子: 配置docker私有仓库 下篇帖子: 用docker搭建nginx负载均衡测试环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表