配置docker静态IP地址

https://blog.51cto.com/xuegod/2321169

本节所讲内容:

实验环境: 一个还原到之前安装了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容器的安全隔离的原则,工作中辩证的选择.

创建桥设备:

安装包:

[[email protected] ~]# rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm

把ens33绑到br0桥设备上:

[[email protected] ~]# cd /etc/sysconfig/network-scripts/

[[email protected] network-scripts]# cp ifcfg-ens33 /opt/ #备份一下eth0

[[email protected] network-scripts]# vim ifcfg-ens33#编辑配置文件为以下内容

[[email protected] 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的配置文件:

[[email protected] 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要大写。 不大写也可以。

[[email protected] network-scripts]# service network restart

Restarting network (via systemctl): [ 确定 ]

测试br0:

[email protected] network-scripts]# ifconfig

[[email protected] 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

[[email protected] ~]# rpm -qf `which git`

git-1.8.3.1-5.el7.x86_64

[[email protected] ~]# cd /opt/

[[email protected] opt]# git clone https://github.com/jpetazzo/pipework.git

咱们使用方法1:

将 pipework-master.zip上传xuegod63上:

[[email protected] ~]# unzip pipework-master.zip # 不需要编译,因为pipework 是一个shell脚本

查看:

[[email protected] ~]# vim ./pipework-master/pipework

[[email protected] ~]# cp /root/pipework-master/pipework /usr/local/bin/ #方便后期使用pipework命令

到此 pipework已经安装成功。

启动docker:

[[email protected] ~]# systemctl start docker

把centos-lastest-docker-image.tar 镜像上传Linux上,并导入docker平台

[[email protected] ~]# docker load -i centos-lastest-docker-image.tar

使用静态IP启动一个docker实例

例:以none模式,使用--net=none 启动一个容器,并且开启docker特权模式。

[[email protected] ~]# 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启动的容器:

[[email protected] ~]# docker run -it centos:latest bash

[[email protected] /]# ls /dev #可以看到的设备文件比较少

console fd full fuse kcore null ptmx pts random shm stderr stdin stdout tty urandom zero

[[email protected] /]# mount -o bind /etc /opt/

mount: permission denied

而在物理机是可以挂载成功的:

[[email protected] ~]# mount -o bind /etc /opt/

[[email protected] /]# exit

2、使用privileged启动的容器

[[email protected] ~]# docker run -it --privileged centos:latest bash

[[email protected] /]# ls /dev/ #可以看到很多设备文件

[[email protected] /]# mount -o bind /etc /opt/ #可以挂载成功

[[email protected] /]# mount /dev/sda1 /opt/ #可以挂载物理机上的sda1分区

[[email protected] /]# ls /opt/

[[email protected] /]# init 0 #不行,还是使用exit退出docker

Couldn‘t find an alternative telinit implementation to spawn.

[[email protected] /]# exit

对开特权模式的docker实例有了解:1 没有:2

直接吸收:80%的技术! 拿个本纸

扩展结束,接着给容器配置地址

[[email protected] ~]# 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/掩码@网关

[[email protected] ~]# pipework br0 c88c4c7f01f9 192.168.1.71/[email protected]

测试IP:

[[email protected] ~]# 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

[[email protected] ~]# docker inspect 容器实例ID #查看容器的详细情况

进入容器,测试网络:

[[email protected] ~]# docker exec -it 87fadc0249a9 /bin/bash #进入容器

[[email protected] /]# cat /etc/resolv.conf

# Generated by NetworkManager

search xuegod63.cn

nameserver 114.114.114.114

[[email protected] /]# yum install -y net-tools #安装ifconfig命令

[[email protected] /]# 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

[[email protected] /]# 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服务器

[[email protected] ~]# yum install httpd -y #安装

[[email protected] ~]# systemctl start httpd #这个方式,无法启动

[[email protected] ~]# 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

[[email protected] ~]# netstat -antup | grep 80 #发现80已经监听

[[email protected] ~]# cd /var/×××w/html/ #

[[email protected] ~]# echo aaaaa > index.html

查看结果即可

总结:

1、创建一个br0桥接设备

2、下载pipework 包并安装

3、安装并运行docker

4、导入centos docker 镜像

5、启动一个docker实例 注意加参数: --net=none --privileged=true

6、使用pipework 给docker实例配置IP

原文地址:https://www.cnblogs.com/yaok430/p/12157867.html

时间: 2024-08-07 05:28:13

配置docker静态IP地址的相关文章

Ubuntu-12.04-server 配置修改静态 IP地址

前几天在装Ubuntu 12.04 Server版系统的服务器时IP地址写错了,导致服务器不能上网,今天重新修改了一下IP地址,这里做一个总结. 1.配置静态IP地址 sudo vi /etc/network/interfaces 原有内容默认使用DHCP分配IP,如下 auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp 这里将其修改,将eth0的IP分配方式修改为静态分配(static)后,为其设定IP地址.子网掩码.网关

如何为CentOS 7配置静态IP地址

问题:在CentOS 7上,我想要将我其中一个网络接口从DHCP改为静态IP地址配置,如何才能永久为CentOS或RHEL 7上的网络接口分配静态IP地址? 如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的方法,这取决于你是否想要使用网络管理器. 网络管理器(Network Manager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备和连接开启并激活.默认情况下,CentOS/RHEL 7安装有网络管理器,并处于启用状态. 使用下面的命令来验证网络管

虚拟机配置静态IP地址

使用VMware配置虚拟机静态IP地址 一.安装好虚拟后在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Vmnet8 Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子网掩码和网关,后面修改静态IP会用到. 二.检查宿主机VM8 网卡设置,打开网络和共享中心→ 更改适配器设置→,在VMware Network Adapter VMnet8上单击右键,选择属性按钮打开属性对话框. 三.在虚拟机右下角,点击网络适配器按钮,右键选择断开连接,然后再重新连接,确保刚才的设

CentOS 7配置静态IP地址

如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的方法,这取决于你是否想要使用网络管理器. 网络管理器(Network Manager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备和连接开启并激活.默认情况下,CentOS/RHEL 7安装有网络管理器,并处于启用状态. 使用下面的命令来验证网络管理器服务的状态: $ systemctl status NetworkManager.service 运行以下命令来检查受网络管理器管理的网络接口: $ nm

ubuntu14.04静态ip地址与动态ip地址配置

有时我们希望Ubuntu14.04的ip地址为静态ip地址,使得ubuntu中的ip地址不变,这样会方便在嵌入式设备和主机Ubuntu进行用网口进行调试. 静态ip地址的配置方法:在/etc/network/interfaces文件中,修改内容为 # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback auto eth0 iface eth0 inet static #iface eth0

Linux系统动态IP地址的获取和静态IP地址的配置

今天刚安装好虚拟机和Linux系统后做了以下实验在这实验中遇到的知识点和实验过程如下 #-  1.Broadcast 协议选项 [BCAST]BROADCAST 指定用于发送广播消息的 IP 地址.使用本地 IP 地址和子网掩码创建缺省广播地址.子网掩码指示哪部分 IP 地址识别网络哪部分识别主机 #-  2.dhclient获得IP地址用ifconfig -a命令查看 .etho表示1个网卡eth1表示2个网卡 .lo表示回环地址 #-  3.用vi打开配置文件命令如下 之后出现以下配置文件

Ubuntu 为网卡配置静态IP地址

为网卡配置静态IP地址编辑文件/etc/network/interfaces:sudo vi /etc/network/interfaces并用下面的行来替换有关eth0的行:# The primary network interfaceauto eth0iface eth0 inet staticaddress 192.168.2.1gateway 192.168.2.254netmask 255.255.255.0#network 192.168.2.0#broadcast 192.168.

4个路由静态IP地址配置

配置接口IP地址并通过静态路由 ,实现全网互通.在4个 路由器上配置IP地址路由器配置好的IP地址路由器静态IP地址配置,4个路由同样的操作步骤,IP地址不同.4台pc机都能互相ping通 原文地址:https://blog.51cto.com/14310238/2388151

Centos7配置静态IP地址

如果是虚拟机,虚拟机网络设置要设置成桥接模式. 1.先查看本机IP地址,找到网卡名 ip addr或者ip addr | more 2. 如上,网络ens192是我们目前的网络,需要修改为固定IP地址,即ens192 vi /etc/sysconfig/network-scripts/ifcfg-ens192 默认内容如下 其中ONBOOT="yes",说明它是启动网卡 配置静态IP地址需要增加的设置项 bootproto=static IPADDR #IP地址 NETMASK #子网