配置docker静态IP地址
本节所讲内容:
实验环境: 一个还原到之前安装了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<UP,BROADCAST,RUNNING,MULTICAST> 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
转载于:https://blog.51cto.com/xuegod/2321169
配置docker静态IP地址相关推荐
- 配置windows 静态IP地址
NAT模式下配置静态IP: 查看win7的IP地址:win+R-cmd-ipconfig 打开控制面板-网络和Internet-网络和共享-更改适配器设置-本地连接右击属性-点击IPV4属性-点击使用 ...
- 如何在CentOS 7中配置静态IP地址
转载来源:https://www.techrepublic.com/article/how-to-configure-a-static-ip-address-in-centos-7/ PS:这个简短的 ...
- 如何为CentOS 7配置静态IP地址
问题:在CentOS 7上,我想要将我其中一个网络接口从DHCP改为静态IP地址配置,如何才能永久为CentOS或RHEL 7上的网络接口分配静态IP地址? 如果你想要为CentOS 7中的某个网络接 ...
- 【无标题】如何在ubantu22版本配置静态IP地址--亲测有效
如何给ubantu 配静态ip地址 在Ubuntu中配置静态IP地址可以通过以下步骤实现: 打开终端,使用以下命令编辑网络配置文件 /etc/netplan/00-installer-config.y ...
- 在 Ubuntu 18.04 中配置静态 IP 地址及灵活切换IP的办法
Ubuntu 18.04 使用 Netplan 来配置 IP 地址,Netplan 是一个新的命令行网络配置工具. 新的 IP 配置方法不会再用到 /etc/network/interfaces 这个 ...
- 【linux】linux系统配置静态IP地址(超详细,手把手教会)
目录 1 引 言 2 科 普 3 详细教程 3.1 步骤说明 3.2 demo案例 3.3 操作步骤 4 参考文献 1 引 言 在使用Linux系统的过程中,你是否有遇到过需要配置固定IP的 ...
- 设置Ubuntu 20.04的静态IP地址
引言:我们做嵌入式或者其他的项目时,有时候不免发现,Ubuntu的ip地址经常会改变,这个时候就需要我们手动配置静态IP了. 给Ubuntu设置一个静态IP地址有以下几个好处: 持久性:静态IP地址是 ...
- 如何在 Debian 11 上设置一个静态 IP 地址
当你在电脑上安装一个新的操作系统时,DHCP服务器会给你分配一个动态IP地址.然而,在各种情况下,你可能需要在你的机器上设置一个静态IP地址,例如,当你正在托管一个网络服务器,或者任何服务需要一个IP ...
- linux设置静态ip地址_什么是静态IP地址,与动态IP地址比较以及如何为Windows和Linux设置?...
linux设置静态ip地址 IP addresses are the core mechanism of Computer networks. The IP address is used to sp ...
最新文章
- laravel框架总结(十一) -- 集合
- TSP - 状态压缩dp
- 《实战突击.php项目开发案例整合》.(明日科技).[PDF]ckook
- 送卡神算法力作《代码随想录》!
- Serilog 最佳实践
- CentOS 7添加开机启动服务/脚本
- 一种避免 iOS 内存碎片的方法
- Exchange Server 2016 独立部署/共存部署 (五)—— 配置DAG(下)
- 将mysql中的数据库表导出和导入
- 0.计划用libgdx写一个六边形回合制slg兵棋游戏
- Android点击通知进入详情,Android 点击通知进入正在运行的程序
- 11选5下期算法_五指大山|新手入门,快速玩转11选5
- 20180124现货黄金复盘
- winhex数据恢复教程
- SqlTransaction作用及如何使用(超详细)
- 电动车电池bms电池管理系统 锂电池算法SOC代码 获取锂电池SOC采用的是电流积分法,电化学阻抗法
- ode45 matlab 出错,Matlab中ode45求解出错
- 嵌入式Linux小项目之图片编解码播放器(5)
- 步步高s5pro和s5区别
- python爬取17000个球员_Python爬取NBA球员生涯数据及简单可视化
热门文章
- [Python]no encoding declared 错误解决方法
- 8086CPU汇编寻址写法
- 麒麟9905g版会用鸿蒙系统吗视频,几乎纯国产!华为P40顶级旗舰:麒麟990+5G网+鸿蒙系统...
- matlab单边衰减正弦信号,指数衰减正弦信号
- 知己知彼 防范攻击:网络攻击步骤与黑客攻击原理
- SWIFT(Society for Worldwide Interbank Financial SWIFT Telecommunications---环球同业银行金融电讯协会)
- Apache Camel简化SOA实施进程
- 四、MyBatis-映射文件
- 清空Form表单所有内容
- 剑指Offer_35_数组中的逆序对