(六)配置docker静态Ip地址

创建docker静态IP

实验环境:一个还原到之前安装了docker的虚拟快照

docker的4种网络模式:

  • host模式,使用--net=host指定
  • container模式,使用--net =container:NAME_or_ID指定
  • none模式:使用--net=none指定。
  • bridge模式,使用--net=bridge指定,默认是bridge模式

默认选择bridge的情况下,容器启动会通过DHCP获取一个地址,这可能不是我们想要的,在centos7系统上,docker环境下可以使用pipwork脚本对容器分配固定IP(这个IP可以是和物理机同网段的IP)

注:docker默认是bridge(--net= bridge)模式,相当于VMware中的NAT模式,如果没有的话,从官网下载:RPM resource bridge-utils(x86-64) (rpmfind.net)

rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm

docker环境下可以使用pipework脚本对容器分配固定IP,相当于VMware中桥接模式。

注:pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。

配置桥接网络

桥接本地物理网络的目的,是为了局域网内用户方便访问docker实例中服务,不需要各种端口映射即可访问服务。但是这样做,又违背了docker容器的安全隔离的原则,工作中辩证的选择。

安装桥设备:br0

rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm

把en33绑到br0桥设备上 

cd /etc/sysconfig/network-scripts

cp ifcfg-enss /opt/

vim ifcfg-en33

把Ip的相关信息删掉,然后加一行:BRIDGE="br0"

vim ifcfg-br0

# 在文件中写一下的内容
DEVICE="br0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=none
IPADDR=192.168.1.63   # 改成你本机网卡的地址,不一定是192,可能是17的
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114

# 最后重启Network(有的系统用:service NetworkManager restart)
service network restart

# 测试br0
ping www.baidu.com

下载pipework包

方法1:直接下载pipework  zip包

https://github.com/jpetazzo/pipework

unzip pipework-masetr.zip
cd pipework-master
vim  pipework   # 可以查看里边的内容
cp pipework /usr/local/bin  # 方便后期使用pipework命令

到此,pipework已经安装成功d

启动docker;

systemctl start docker
# 把centos-latest-docker-image.tar  镜像上传linux上,并导入docker平台
docker load -i centos-latest-docker-image.tar

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

例:以none模式,使用--net=none, 启动一个容器,并且开启docker特权模式。(为什么要有特权模式?因为如果没有的话,就不会有mount的模式)

docker run -itd --net=none --privileged=true centos bash

在docker0.6版本以后,privileged被引入docker,使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部物理机的一个普通用户权限。

使用provileged启动的容器,可以看到很多host上的设备,并且可以执行mount,甚至允许你在docker容器中启动docker容器。不启用privileged,容器中root用户不能执行mount。

docker run -it --pricileged cenots bash

接着给容器配置静态IP地址:

可以看到容器启动的ID.

给此容器配置地址:
pipework语法: pipework  网桥名  容器实例ID  分配给容器的IP/掩码@网关

        pipework     br0           *************           192.168.1.71/24@192.168.1.1  

# 可以查看容器的详细信息
docker inspect 容器ID

进入容器,测试网络:

docker exec -it 容器ID   /bin/bash  # 进入容器

cat /etc/resolv.conf


# 你可以安装ifconfig命令
yum install -y net-tools

实战1:使用静态IP启动的docker实例运行,一个web服务器

/usr/sbin/httpd-DFOREGROUND&    # 直接运行httpd命令
netstart-antup | grep 80   # 发现80端口已经监听
cd /var/www/html 
echo aaaaaa> index.html

扩展:非正常方法关闭docker实例

docker inspect 容器ID | grep Pid  # 查看docker的id

kill -9 pid  # 找到docker的pid,直接kill掉,也可以关闭docker

总结:

  1. 创建一个br0桥接设备
  2. 下载pipework包并安装
  3. 安装并运行docker
  4. 导入centos docker镜像
  5. 启动一个docker实例,注意加参数:--net=none --privileged=true
  6. 使用pipework给docker实例配置IP

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用docker-compose可以通过自定义网络来分配IP地址。在docker-compose文件中定义一个网络,然后为该网络设置一个IP范围,通过这个范围来分配IP地址给容器。 首先,在docker-compose.yml文件中定义一个网络,在`networks`部分添加一个新的网络,并为该网络指定一个自定义的名称,例如"my_network"。 ``` version: '2' services: my_service: image: my_image networks: - my_network networks: my_network: ipam: config: - subnet: 192.168.0.0/24 ``` 上面的例子中,我们定义了一个名为"my_network"的网络,并为该网络指定了一个IP范围192.168.0.0/24。 然后,将容器添加到该网络中。在服务的定义中,使用`networks`属性将服务连接到上述定义的网络。 这样,当使用`docker-compose up`启动容器时,容器将被分配一个在IP范围内的IP地址。 需要注意的是,如果要为多个容器分配独立的IP地址,需要确保IP范围的大小足够容纳所有容器所需的地址。 另外,使用自定义网络可以实现多个容器之间的通信,它们可以通过容器名称来相互访问,而无需使用IP地址。 综上所述,通过在docker-compose文件中定义自定义网络并为其设置IP范围,可以实现为容器分配IP地址。 ### 回答2: Docker Compose 允许我们在容器部署时使用自定义网络来分配 IP 地址。下面是关于 Docker Compose 自定义网络分配 IP 地址的一些重要信息: 1. 自定义网络的配置:在 Docker Compose 文件中,我们可以使用 `networks` 关键字定义自定义网络,并为其指定一个名称。例如: ```yaml version: '3' services: app: # 定义自定义网络 networks: - my-network networks: my-network: # 可选配置网络驱动 driver: bridge ``` 2. IP 地址分配方式:Docker Compose 支持三种不同的 IP 地址分配方式,分别是 `default`、`bridge` 和 `host`。默认情况下,Docker Compose 使用 `default` 分配方式。通过在网络配置中指定 `ipam` 选项,我们可以使用其他分配方式。 3. 使用 `default` 分配方式:如果使用默认的 `default` 分配方式,那么 Docker Compose 将自动为容器分配 IP 地址,并且会保持容器名称与 IP 地址之间的关联。例如,我们可以通过在服务定义中使用 `networks` 字段指定网络,并通过使用该网络的容器名称来访问容器。 ```yaml services: app1: networks: - my-network app2: networks: - my-network networks: my-network: ``` 在这种情况下,Docker Compose 将为 `app1` 容器分配一个 IP 地址,并将其映射到容器名称 `my-app1`。 4. 使用其他分配方式:如果我们希望自定义 IP 地址分配方式,可以在网络配置中使用 `ipam` 选项。例如,我们可以指定一个静态 IP 地址供容器使用。 ```yaml services: app: networks: my-network: ipv4_address: 192.168.0.2 networks: my-network: ipam: config: - subnet: 192.168.0.0/16 ``` 在这种情况下,Docker Compose 将为 `app` 容器分配指定的 IP 地址 192.168.0.2。 通过以上的配置,我们可以根据需要在 Docker Compose 中自定义网络并分配 IP 地址。这样可以更好地控制容器之间的通信,并实现特定的网络需求。 ### 回答3: 在Docker Compose中,我们可以使用自定义网络来对容器进行分组和分配IP地址。通过自定义网络,我们可以更好地管理容器之间的通信和连接。 首先,在docker-compose.yml文件中定义一个自定义网络。我们可以使用以下语法来创建一个自定义网络: ```yml networks: <network_name>: driver: <driver_name> ``` 在上面的代码片段中,`<network_name>`是我们给网络取的名称,`<driver_name>`是网络使用的驱动程序。 例如,我们可以创建一个名为`my_network`的自定义网络,并使用默认的`bridge`驱动程序,只需在docker-compose.yml文件中添加以下代码: ```yml networks: my_network: driver: bridge ``` 一旦我们定义了一个自定义网络,我们可以将容器连接到这个网络,并为它们分配IP地址。 要将容器连接到自定义网络,我们可以使用以下代码: ```yml services: <service_name>: networks: - <network_name> ``` 在上面的代码片段中,`<service_name>`是我们要将容器连接到的服务名称,`<network_name>`是我们之前定义的自定义网络名称。 例如,如果我们要将一个名为`web`的服务连接到`my_network`网络,我们可以在docker-compose.yml文件中添加以下代码: ```yml services: web: networks: - my_network ``` 最后,我们可以为连接到自定义网络的容器分配IP地址Docker将自动为连接到网络的容器分配IP地址。我们可以使用以下代码来查看容器的IP地址: ```bash docker network inspect <network_name> ``` 在上面的命令中,`<network_name>`是我们之前定义的自定义网络名称。 总之,使用Docker Compose的自定义网络,我们可以轻松地进行容器的分组和分配IP地址。通过定义自定义网络并连接容器,我们可以实现灵活的容器通信和连接管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值