Dcoker网络
linux内核的六种名称空间:
UTS,User,Mount,IPC,Pid,Net
Docker的四种网络模型:
1.bridge模式
bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将并将一个主机上的Docker容器连接到一个虚拟网桥上。Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.0.1/16, 容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址。
2.host模式
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
3.none模式
在none模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
使用–net =none模式启动容器:
4.container模式
这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
使用–net =container模式启动容器:
docker网卡管理命令:
Usage: docker network COMMAND
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
将docker容器网络暴露出来的几种方式:
docker container run --network=bridge -p
-p选项的使用格式:
-p <containerPort>
将制定的容器端口应设置主机所有ip地址的一个动态端口
例:docker container run --name nginx1 --network brige -p 80 nginx:latest
-p <hostPort>:<containerPort>
将容器端口<containerPort>映射至指定的主机端口<hostPort>
例:
将容器的80端口映射到主机的所有ip地址的80端口上
docker container run --name nginx1 --network brige -p 80:80 nginx:latest
-p <ip>:<containerPort>
将指定的容器端口<containerPort>映射至主机指定<IP>的动态端口
例:
将容器的80端口映射到主机的192.168.3.191的动态端口上
docker container run --name nginx1 --network brige -p 192.168.3.191::80 nginx:latest
-p <ip>:<hostPort>:<containerPort>
将指定的容器端口<containerPort>映射至主机指定<ip>的端口<hostPort>
例:
将容器的80端口映射到主机的192.168.3.191的80端口上
docker container run --name nginx1 --network brige -p 192.168.3.191:80:80 nginx:latest
动态端口指随机端口,具体的映射结果可使用docker port命令查看
-P选项或--publish-all选项 将容器的所有计划要暴露端口全部映射至主机端口
计划要暴露的端口使用--expose选项指定
如果不想使用默认的docker0桥接扣,或者需要修改此桥接口的网络属性,可通过为docker daemon 命令使用-b、--bip、--fixed-cidr、--default-gateway、--dns以及--mtu等选项进行设定
docker container run --network container
可以通过直接共享宿主机的网络的方式进行暴露】
例:
docker container run --name xxx --network host -it --rm busybox