一、docker网络
1、docker网络
默认启动的时候,会创建三个网络
docker network ls
2、docker network inspect bridge
查看网络 网络的详细信息,包括网络的名称、驱动程序、子网、网关、连接的容器等
3、docker network create demo
创建网络报错
解决
4、docker network rm demo
删除网络
二、网络类型
bridge 模式(默认)docker run --network bridge xxx
host 模式:docker run --network host xxx
none 模式 docker run --network none xxx
1、bridge模式
docker容器在默认情况下,一般会分配一个独立的network-namespace,也就是网络类型中的Bridge模式.
在使用Bridge时就涉及到了一个问题,既然它有独立的namesapce,这就需要一种技术使容器内的端口可以在主机上访问到,这种技术就是端口映射,docker可以指定你想把容器内的某一个端口可以在容器所在主机上的某一个端口它俩之间做一个映射,当你在访问主机上的端口时,其实就是访问容器里面的端口.
- Docker 中的 “bridge” 网络模式是默认的网络模式,它为容器提供了一种通过 Docker daemon 创建的本地网络。当你在 Docker 中创建一个容器时,如果没有显式指定其他网络模式,它将默认使用 “bridge” 网络模式。
- 在 “bridge” 网络模式下,Docker daemon 会在主机上创建一个名为 “docker0” 的虚拟网络接口(bridge)。Docker daemon 会为每个容器分配一个唯一的 IP 地址,并通过 NAT(Network Address Translation,网络地址转换)将其连接到主机网络
- docker run 的时候,没有指定 network 的话默认使用的网桥模式就是 bridge ,使用的就是 docker0 。在宿主机使用 ifconfig 命令就可以看到 docker0 和自己 create 的 network 的 eth0,eth1,eth2……代表网卡一,网卡二,网卡三……,lo 代表127.0.0.1,即 localhost ,inet addr 用来表示网卡的 IP 地址。
- 网桥 docker0 创建一对对等虚拟设备接口一个叫 veth,另一个叫 eth0 ,成对匹配。
- 整个宿主机的网桥模式都是 docker0,类似一个交换机有一堆接口,每个接口叫 veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫 veth pair)。
- 每个容器实例内部也有一块网卡,每个接口叫 eth0 。
- docker0 上面的每个 veth 匹配某个容器实例内部的 eth0 ,两两配对,一一匹配。
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8 默认bridge模式
2、host模式
还有一种类型是Host模式,如果在启动容器的时候指定使用Host模式,那么这个容器将不会获得一个独立的network namespace,而是和主机共同使用一个,这个时候容器将不会虚拟出自己的网卡,配置出自己的ip.而是使用宿主机上的ip和端口.也就是说在docker上使用网络和在主机上使用网络是一样的.
docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
docker run
: 运行一个容器。-d
: 在后台运行容器。--network host
: 将容器连接到主机网络,这意味着容器将共享主机的网络命名空间,即与主机使用相同的网络接口和 IP 地址。--name tomcat83
: 为容器指定一个名为tomcat83
的容器名称。billygoo/tomcat8-jdk8
: 使用镜像billygoo/tomcat8-jdk8
来创建容器。- 使用 “host” 网络模式会直接将容器连接到主机网络,这有一些优点,例如容器可以直接使用主机的网络服务,不需要进行端口映射
3、none模式
还有一种网络类型是None.也就是没有网络,这种情况docker将不会和外界的任何东西进行通讯.
docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8
docker run
: 运行一个容器。-d
: 在后台运行容器。-p 8084:8080
: 将容器的 8080 端口映射到主机的 8084 端口,这样可以通过主机的 8084 端口访问容器的 Tomcat 服务。--network none
: 将容器连接到不使用任何网络的模式。这意味着容器没有网络连接,也无法访问主机网络或外部网络。--name tomcat84
: 为容器指定一个名为tomcat84
的容器名称。billygoo/tomcat8-jdk8
: 使用镜像billygoo/tomcat8-jdk8
来创建容器。- 容器连接到了 “none” 网络模式,容器将无法通过网络进行访问。在这种情况下,你可以在主机上通过访问
http://localhost:8084
或http://<主机IP地址>:8084
来访问容器中的 Tomcat 服务。需要注意的是,由于容器不与任何网络连接,因此只能通过主机上映射的端口进行访问
三、自定义网络
1、docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker network create
: 创建一个新的 Docker 网络。--driver bridge
: 指定网络驱动为 “bridge”,即使用桥接网络模式。--subnet 192.168.0.0/16
: 设置网络子网为 “192.168.0.0/16”,即该网络下可以有 65534 个 IP 地址。--gateway 192.168.0.1
: 设置网络的网关地址为 “192.168.0.1”,通常是给网络内部的容器分配默认网关地址。
2、docker network inspect mynet
3、docker run -d -P --name centos-net-01 --net mynet -it 5d0da3dc9764 /bin/bash
使用自定义网络创建容器