docker(4)docker的网络,自定义网桥

摘要:
如果不同的应用程序组具有不同的网络要求,则可以在创建时单独配置每个用户定义的网桥。可以一起启动多个容器docker-compose,并且compose文件可以定义共享变量。对于可以访问不同网络上的容器或非Docker主机的端口,必须使用or标志发布该端口。-p--publish上面是docker文档中的一段话:整体描述了docker自定义网桥的用处。

Docker 的网络

运行 ifconfig 找到 docker0 : 虚拟网卡默认网卡名称为docker0

docker(4)docker的网络,自定义网桥第1张

查看docker 的网桥:

我这里默认们没有进行安装 网桥管理设备:进行安装一下;

yum install bridge-utils

docker(4)docker的网络,自定义网桥第2张

命令:查看网桥crctl show:
docker(4)docker的网络,自定义网桥第3张

注意上图中的interfaces 这里为空,我们启动一个新的容器如下:

命令: docker run -d -it --name centos6 centos

docker(4)docker的网络,自定义网桥第4张

我们进入容器中查看该容器的ip 地址

我这里的容器是最小化的centos,一般情况我都会安装一下几个

yum install net-tools

yum install vim

yum install telnet

docker(4)docker的网络,自定义网桥第5张

我看查看容器中的IP地址:

Docker 默认已经给我们分配了地址

docker(4)docker的网络,自定义网桥第6张

退出后在查看我们本机的网桥:这里注意 interfaces 发生了变化

docker(4)docker的网络,自定义网桥第7张

这是docker0: 在容器创建时,为连接容器创建的网络接口。

我们运行容器的时候也可以查看该网络接口:

docker(4)docker的网络,自定义网桥第8张

修改docker0 的ip地址: 使用超级管理员权限
sudo ifconfig docker0 192.168.254.0 netmask 255.255.255.0

docker(4)docker的网络,自定义网桥第9张

自定义网桥:

  • 用户定义的桥接器可在容器化应用程序之间提供更好的隔离和互操作性

连接到同一用户定义的网桥的容器会自动将所有端口相互暴露,并且不会向外界显示任何端口。这使得容器化应用程序可以轻松地相互通信,而不会意外地打开对外界的访问。

想象一下具有Web前端和数据库后端的应用程序。外部世界需要访问Web前端(可能在端口80上),但只有后端本身需要访问数据库主机和端口。使用用户定义的网桥,只需要打开Web端口,并且数据库应用程序不需要打开任何端口,因为Web前端可以通过用户定义的网桥访问它。

如果在默认网桥上运行相同的应用程序堆栈,则需要打开Web端口和数据库端口,并使用每个的标记-p--publish标记。这意味着Docker主机需要通过其他方式阻止对数据库端口的访问。

  • 用户定义的桥接器在容器之间提供自动DNS解析

默认网桥上的容器只能通过IP地址相互访问,除非您使用被认为是遗留的--link选项。在用户定义的桥接网络上,容器可以通过名称或别名相互解析。

想象一下与前一点相同的应用程序,具有Web前端和数据库后端。如果你打电话给你的容器webdb,Web容器可以在连接到数据库容器db,无论哪个码头工人托管应用程序堆栈上运行。

如果在默认桥接网络上运行相同的应用程序堆栈,则需要在容器之间手动创建链接(使用旧--link标志)。这些链接需要在两个方向上创建,因此您可以看到这对于需要通信的两个以上容器而言变得复杂。或者,您可以操作/etc/hosts容器中的文件,但这会产生难以调试的问题。

  • 容器可以在运行中与用户定义的网络连接和分离

在容器的生命周期中,您可以动态地将其与用户定义的网络连接或断开连接。要从默认桥接网络中删除容器,您需要停止容器并使用不同的网络选项重新创建容器。

  • 每个用户定义的网络都会创建一个可配置的网桥

如果容器使用默认网桥,则可以对其进行配置,但所有容器都使用相同的设置,例如MTU和iptables规则。此外,配置默认桥接网络发生在Docker本身之外,并且需要重新启动Docker。

使用创建和配置用户定义的网桥docker network create。如果不同的应用程序组具有不同的网络要求,则可以在创建时单独配置每个用户定义的网桥。

  • 默认桥接网络上的链接容器共享环境变量

最初,在两个容器之间共享环境变量的唯一方法是使用--link标志链接它们。用户定义的网络无法实现这种类型的变量共享。但是,有更好的方法来共享环境变量。一些想法:

  • 多个容器可以使用Docker卷装入包含共享信息的文件或目录。
  • 可以一起启动多个容器docker-compose,并且compose文件可以定义共享变量。
  • 您可以使用swarm服务而不是独立容器,并利用共享机密配置

连接到同一用户定义的网桥的容器有效地将所有端口相互暴露。对于可以访问不同网络上的容器或非Docker主机的端口,必须使用or标志发布该端口。-p--publish

上面是docker 文档中的一段话:整体描述了docker 自定义网桥的用处。

开始自定义网桥

我这里开启了一台新我们查看网络信息

Ifconfig

docker(4)docker的网络,自定义网桥第10张

首先停止容器运行:

systemctl stop docker.service

docker(4)docker的网络,自定义网桥第11张

停止docker0 默认网桥

sudo ip link set dev docker0 down

docker(4)docker的网络,自定义网桥第12张

删除docker0 网桥

sudo ip link del dev docker0

docker(4)docker的网络,自定义网桥第13张

上图中可以看到网桥已经删除成功:

创建新的网桥:并配置IP地址,并启动网桥

sudo brctl addbr docker1

sudo ip addr add 192.168.100.1/24 dev docker1

sudo ip link set dev docker1 up

docker(4)docker的网络,自定义网桥第14张

配置使用自定义网桥:保存退出

vi /etc/docker/daemon.json

docker(4)docker的网络,自定义网桥第15张

启动并运行一个容器:

systemctl start docker.service

docker run -d -it --name centos1 centos

进入容器中:

docker inspect -f {{.State.Pid}} centos1

nsenter --target 19745 --ipc --uts --mount --pid --net

docker(4)docker的网络,自定义网桥第16张

安装ifconfig 命令并查看 容器IP

yum install net-tools

docker(4)docker的网络,自定义网桥第17张

查看网络

docker(4)docker的网络,自定义网桥第18张

有不足之处希望大家指出相互学习,

本文原创:转载请注明出处 谢谢!

免责声明:文章转载自《docker(4)docker的网络,自定义网桥》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Gradle一分钟实现Spring-MVC原码,反码,补码,移位下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Centos7下安装Docker(详细的新手装逼教程)

早就听说过Docker,一直不清楚是个啥,今天捣鼓了一下,这里做个记录。 ----------------------------------------------------------------------------------------------------------------------------------------------...

使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

1、IoC/DI简介 IoC 即 Inversion of Control,DI 即Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详细的说明可参见大牛Martin Fowler的强文http://martinfowler.com/articles/injection.html,借用Holly...

sqlmap基础教程

sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞。它由Python语言开发而成,因此运行需要安装python环境。 python环境安装教程:http://jingyan.baidu.com/album/c910274be14d64cd361d2dd8.html?picindex=2 注意:sqlmap只是用来检测和利...

misconfiguration : kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgro

/* vim /etc/docker/daemon.json { "registry-mirrors": [ "https://a8qh6yqv.mirror.aliyuncs.com", "http://hub-mirror.c.163.com" ], "exec-opts": ["native.cgroupdriver=sy...

Oracle表中一行记录被锁(行锁,表锁,死锁)

表现形式:可以向表里面save新数据,但是无法跟新某一条数据,update的时候就一直在等待。 Oracle锁表查询和解锁方法 数据库操作语句的分类DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert、delete、updateDCL:数据库控制语言 ,关键字:grant、removeDQL:数据库查询语言,关键字:s...

django连接ORM

一. 程序连接mysql 1. 导入pymysql模块 2. 创建连接 3. 获取执行命令的游标 4. 使用游标去执行sql语句 5. 获取sql语句的执行结果 6. 关闭游标 7. 关闭连接 二. ORM介绍 1. 概念 ①. 对象关系映射(Object Relational Mapping)模式是一种为了解决面向对象与关系数据库存在的互相不匹配的现象技...