Docker容器网络管理

1、背景

在docker创建之后,容器的ip在每次重启容器后会发生变化,导致各个服务之间需要重新配置对应的ip。

2、目标

小编通过本文,希望能帮读者掌握对docker容器的网络管理,包括:

  • 自定义网络,包括:网关、网段;
  • 以单个容器为单位设置静态ip;
  • 在不同的docker-compose服务组中实现互相访问;

3、自定义网络

大家可以通过如下的命令实现网络的创建。

3.1 查看现有网络配置

这里可以查看当前docker环境下的所有网络配置:

chenzhiwei:advanced$ docker network ls
NETWORK ID          NAME                             DRIVER              SCOPE
9f3714d88b5c        advanced_extnetwork              bridge              local
acc2e21d9486        bridge                           bridge              local
2dbe91940141        host                             host                local
b0ed8cdae1b6        none                             null                local

上述advanced_extnetwork就是在编排Yii容器组的时候docker-compose创建的网络;

3.2 创建新的网络
docker network create \
--subnet=172.18.0.0/16 \
--gateway=172.18.0.1 \
smart

注意:网段必须不能被其他网络占用。

3.3 删除网络
docker network rm smart

4、启动容器时指定网络

并不是所有的容器都是通过docker-compose编排的,更多的是通过docker run的方式启动,但是我们想在这种启动方式下把容器的ip设置为指定网段下的静态ip,此时该怎么操作呢?

可以使用如下命令:

docker run -itd --name advaned_centos --network=advanced_extnetwork --ip 172.22.0.5 centos

示例如下:

在我们已经有的Yii开发容器组中单独再起一个容器,此容器的ip段需要和advanced容器组相同,如下:

chenzhiwei:advanced$ docker run -itd --name advaned_centos --network=advanced_extnetwork --ip 172.22.0.5 centos
931a767f5d1a5eca7f46e180f8be085516e68a7a11c1afb5dbc5949dd1bad713

chenzhiwei:advanced$ docker-ps
CONTAINER ID        NAMES                 IMAGE
931a767f5d1a        advaned_centos        centos
03d980e76164        advanced_frontend_1   advanced_frontend
85b2502a9a48        advanced_backend_1    advanced_backend
7acacee718a5        advanced_mysql_1      mysql:5.7

chenzhiwei:advanced$ docker inspect advanced_centos | grep IPAddress
Error: No such object: advanced_centos

chenzhiwei:advanced$ docker inspect advaned_centos | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.22.0.5",

此时由于advaned_centos容器和advanced_mysql等容器是同个网段,因此可实现通信,否则是无法通信的。

5、docker-compose指定已有网络

以前我们介绍过docker-compose.yml中自定义网络,并按照这个网络创建,但是会遇到这个情况,就是在已有的容器组之外需要另外一批容器组实现服务互通,因此后创建的容器组就需要和之前创建的容器组在同一个网络里,此时docker-compose.yml应该怎么写呢?

只需要指定已有网络即可,如下:

version: '2'
services:
    nginx:
        image: nginx:latest
        container_name: nginx
        networks:
           net1:
                ipv4_address: 172.22.0.6
networks:
    net1:
        external:
            name: advanced_extnetwork

此时会使用已有的advanced_extnetwork网络,实现网段统一。

关注我的微信公众号,更多文章推送不遗漏:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值