1 . Docker默认网络
Docker安装后,会自动创建3个网络,可以用
docker network ls 查看
Docker默认才用的网络是:"bridge" 桥接网络
Docker安装成功后,回出现docker0的网络设备,本质是一个虚拟网桥
brctl show
注意:brctl show 需要安装 yum install bridge-utils -y
2 . dcoker0的作用
给容器分配IP地址(与docker0同网段)
给容器分配Mac地址
是每个容器的默认网关
同一个宿主机的各个容器之间通信基础(都接入docker0网桥)
宿主机和容器直接通信的基础
3 . docker0的地址划分
docker0本身的IP:172.17.0.1
docker0的子网掩码:255.255.0.0
docker0分配的IP范围:172.17.0.2-172.17.255.254,共计65534个IP
4 . docker0如何组织网络
a.运行某个容器
docker search alpine
docker pull alpine
docker run -itd --name ap01 alpine
ip addr
brctl show
b.查看容器网络接口
docker exec -it ap01 ip addr
c.查看容器IP
docker exec -it ap01 hostname -i | docker inspect ap01
veth是虚拟机以太网,全称是VirtualEthernet
veth通过"veth pair"技术在veth设备一端写入网络包,其对端的veth设备可以读取到对应的网络包(可以想象是一根虚拟网线將两个veth设备连接起来)
--容器启动
--docker创建一对虚拟接口
--一端放到本地主机,如veth7530,然后桥接到默认的docker0上
--另一端放到容器中,并修改名字为eth0
--docker0 分配一个IP给容器eth0,并配置默认路由到桥接王康veth7530
5.端口映射实现访问容器
容器启动的时候,如果不指定对应参数,在容器外部是无法通过网络访问容器内的网络应用和服务的。
可以用-P或者-p 参数来指定映射端口,挡使用-P标记时,Docker会随机映射一个49000-49900的端口至容器内部开放的网络端口:
docker run -d -P training/webapp python app.py
docker ps -l
docker logs -f nostalgic_morse # 查看应用信息
6.映射所有接口地址
hostPort:containerPort 將本地的5000映射到容器的5000端口
docker run -d -p 5000:5000 training/webapp python app.py
此时默认会绑定本地所有接口上的所有地址。多次使用-p可以绑定多个端口
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
7.映射到指定地址的指定端口
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
8.映射到指定地址的任意端口
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
还可以使用udp标记udp端口
docker run -d -p 127.0.0.1::5000/udp training/webapp python app.py
9.查看映射端口配置
docker prot
10.容器互联
使用--link参数可以让容器之间安全的进行交互
创建一个数据库容器
docker run -d --name db training/postgres
删除之前的web容器
docker rm -rf web
创建新的web容器并將它连接到db容器
docker run -d -P --name web --link db:db training/webapp python app.py
--link 参数格式为 --link name:alias ,其中name是要链接的容器的名字,alias是这个链接的别名
docker ps
这样就可以在两个容器直接创建了一个安全隧道,而不用映射他们的端口到宿主机上。从而避免暴露数据库端口到外部网络。
可以使用evn命令来查看web容器的环境变量
docker run --rm --name web2 --link db:db training/webapp env
1 1. 网络连接
默认情况下docker容器之间都是通过IP互相连接的
基于安全考虑可以通过/etc/docker/daemon.json在末尾配置:"icc": false,可以禁止容器直接的互联(充气docker才可剩下)
12.自定义网络
为何要自定义网络,容器的隔离,提高安全性;DNS解析和服务发现;容器直接负载均衡。。。
a.如何创建自定义网络
docker network create [--dirver 驱动类型] [ --subnet=172.168.0.0/16] 自定义网络名
--driver 代表驱动类型,默认为bridge
--subnet 代表网段设置,默认docker0地址上递增(172.17.0.1-->172.18.0.1)
--通过docker network ls 查看自定义网络
--通过 docker network inspect 查看使用本网络的详情
b.如何使用自定义网络
容器启动时:docker run --network 自定义网络名
容器启动后:docker network connect 网络名 容器名