docker--network(dockernetwork重启)
本篇文章给大家谈谈docker--network,以及dockernetwork重启对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Docker 网络-Network
Network是docker的四丛乎大对象之一,是容器的网络功能对象。通过渗卖悉Network命令配宴集进行管理。
--network host所有容器和主机互通
docker默认每个容器的网络都是独立的,不互通的,和宿主机也是隔离的。
如何互通呢?容器之间可以通过--network 设置相同名称网络,来实现互通,如所有容器都run --network mynet123。
你服务器上安装了mysql,docker里有容器redis,容器nginx还有容器website,和宿主机的mysql怎么互通呢?
为了实现nginx能打开website,website能访问redis和mysql,我们只需要把所有容器的网络都设为和宿主机同处一个网络就行了
当 docker 容器使用 host 连接方式的时候,容器与宿主共用网络,这样就能从容器中访问宿主网络了
容器中的 localhost 就等于宿主的 localhost 了.
在 docker 命令中使用 --network host 来为容器配置host网络
1、docker run的时候加上--network host
2、docker-compose中使用
docker-compose.yaml文件:
加上network_mode: host
host.docker.internal指向主机ip,如果是127.0.0.1就对了
严重警告:host模式主机网络驱动程序仅适用于Linux主机,并且不支持Docker for Mac,Docker for Windows或Docker EE for Windows Server。
如果不使用 --network=host 的话会出现什么问题呢?
curl localhost:3000 的时候会出现 502 Bad Gateway ,这种情况下 nginx.conf 中的 localhost 有问题。 由于 nginx 是运行在 docker 容器中的,这个localhost 是容器的 localhost,而不是宿主机的localhost。
Docker容器运行的时候有host、bridge、none三种网络可供配置,bridge还可以使用指定容器网络和自定义网络名称
–-network=bridge
默认就是 bridge,即桥接网络,以桥接模式连接到宿主机,创建一个独立网络
可以通过自定义bridge将多个容器互通
–-network=host
与宿主机共享网络,也就是在网络这块不会与宿主机隔离,而是共享宿主机的网络配置,并且 容器不会分配自己的ip地址
由于不需要端口映射,host网络的性能较高.
–-network=none
无网络,容器将无法联网。
–-network=overlay
用于swarm集群中容器的跨主机网络访问
[img]Docker网络
Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。
安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。
Docker 中的网络接口默认都是虚拟的接口。虚拟接口的优势之一是转发效率较高。 Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中。对于本地系统和容器内系统看来就像是一个正常的以纯培太网卡,只是它不需要真正同外部网络设备通信,速度要快很多。
Docker 容器网络就利用了这项技术。它在本地主机和容器内分别创建一个虚拟接口,并让它们彼此连通(这样的一对接口叫做 veth pair)。
创建网络参数
Docker 创建一个容器的时候,会执行如下操作:
完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。
可以在 docker run 的时候通过 --net 参数来指定容器的网络配置,有4个可选值:
当你安装Docker时,它会自动创建三个网络。你可以使用以下docker network ls命令列出这些网络:
Docker内置这三个网络,运行容器时,你可以使用该–network标志来指定容器应连接到哪些网络。
bridge网络代表docker0所有Docker安装中存在的网络。除非你使用该docker run --network=选项指定,否则Docker守护程序默认将容器连接到此网络。
我们在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:
Docker 容做卖唯器默认使用 bridge 模式的网络。其特点如下:
Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:
Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。
网络模式为 none,即不为 Docker 容器构造任何网络环境。一旦Docker 容器采用了none 网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本机网络。
自定义网络模式,docker提供了三种自定义网络驱动:
bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。
建议使用自定义网桥来控制容器之间的相互通讯,配裤还可以自动DNS解析容器名称到ip地址。Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或Macvlan网络,你可以创建一个网络插件或远程网络进行完善的自定义和控制。
你可以根据需要创建任意数量的网络,并且可以在任何给定的时间将容器连接到这些网络中的零个或多个网络。此外,您可以连接并断开网络中的容器,而无需重新启动容器,当容器连接到多个网络时,其外部连接通过第一个非内部网络以词法顺序提供。
接下来介绍Docker的内置网络驱动程序。
使用自定义网络启动容器
自定义网络好处:
参考:
如何创建docker network
使用docker network create命令来创建,只能创建docker内建的网络模式
使用docker plugin,创建自定义网络
使用docker命令创建网络
Docker中内置的网络模式包括如下几种:
bridge 我们基于该网络模式创建了mynet网络
host 本轮塌地网络模式
macvlan 这个模式貌似是最新加的
null 无网络
overlay 用于swarm集群中容器的跨主机网森谨络访问
docker create network命令包此桐基含以下参数:
Flag shorthand -h has been deprecated, please use --help
Usage: docker network create [OPTIONS] NETWORK
Create a network
Options:
--attachable Enable manual container attachment
--aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
-d, --driver string Driver to manage the Network (default "bridge")
--gateway stringSlice IPv4 or IPv6 Gateway for the master subnet
--help Print usage
--internal Restrict external access to the network
--ip-range stringSlice Allocate container ip from a sub-range
--ipam-driver string IP Address Management Driver (default "default")
--ipam-opt map Set IPAM driver specific options (default map[])
--ipv6 Enable IPv6 networking
--label list Set metadata on a network (default [])
-o, --opt map Set driver specific options (default map[])
--subnet stringSlice Subnet in CIDR format that represents a network segment
创建overlay模式的全局网络,我们可以看到新创建的mynet1的scope是swarm,即集群范围可见的。
172.18.0.1:root@sz-pg-oam-docker-test-001:/root]# docker network create -d overlay mynet1
x81fu4ohqot2ufbpoa2u8vyx3
172.18.0.1:root@sz-pg-oam-docker-test-001:/root]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ad3023f6d324 bridge bridge local
346c0fe30055 crane_default bridge local
4da289d8e48a docker_gwbridge bridge local
3d636dff00da host host local
tx49ev228p5l ingress overlay swarm
x81fu4ohqot2 mynet1 overlay swarm
cc14ee093707 none null local
172.18.0.1:root@sz-pg-oam-docker-test-001:/root]# docker network inspect mynet1
[
{
"Name": "mynet1",
"Id": "x81fu4ohqot2ufbpoa2u8vyx3",
"Created": "0001-01-01T00:00:00Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Internal": false,
"Attachable": false,
"Containers": null,
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4097"
},
"Labels": null
}
]
注意,overlay模式的网络只能在swarm的manager节点上创建,如果在work节点上创建overlay网络会报错:
172.18.0.1:root@sz-pg-oam-docker-test-002:/root]# docker network create -d overlay mynet1
Error response from daemon: Cannot create a multi-host network from a worker node. Please create the network from a manager node.
如果不使用-d指定driver将默认创建本地bridge网络。
自定义网络
创建自定义网络需要设置网络的driver和ipam。
关于docker--network和dockernetwork重启的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。