赞
踩
目录
docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主机(端口映射),即docker run 创建容器的时候,通过-p或者-P参数来启用。访问容器的时候,就通过【宿主机IP】:【容器端口】访问容器。
Host:容器不会虚拟出自己的网卡,配置主机的IP等,而是使用宿主机的IP和端口
Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口的范围。
None:该模式关闭了容器的网络功能。
Briidge:默认为该模式,桥接,此模式会为每一个容器分配,设置IP等,并将容器连接到一个docker0的虚拟网桥,通过docker0 网桥以及iptables nat表配置与宿主机通信
但是如果启动容器的时候使用host 模式,那么这个容器将不会获得一个独立的Network Namespace ,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口.此时容器不再拥有隔离的、独立的网络栈,不拥有所有端口资源。
- #创建容器web 1,指定网络模式为 host
- #因为是host模式,所有宿主机和容器共享ip和端口
- docker run -d --name web1 --net=host nginx
-
- #访问宿主机的ip和80端口,则可以访问到web3的nginx服务
- firefox http://192.168.131.10:80
- docker run -itd --name test1 centos:7 /bin/bash
- #基于镜像centos:7创建一个名为test1的容器
-
- docker inspect -f '{{.State.Pid}}' test1
- #查看容器的pid号
-
- ls -l /proc/pid号/ns
- #查看该容器的命名空间编号
-
- docker run -itd --name test2 --net=container:test1 centos:7
- #创建test2容器,使用container模式,和test1共享network namespace
-
- dcoker inspect -f '{{.State.Pid}}' test2
- #查看test2容器的pid
-
- ls -l /proc/pid号/ns
- #查看该容器的命令空间编号

特点
安全,完全隔离
bridge模式是docker 的默认网络模式。不同–net参数,就是bridge模式
相当于Vmware中的nat模式。容器使用独立network namespace,并连接到docker0 虚拟网卡,通过dcoker0网桥以及iptables nat表配置与宿主机通信 , 此模式会为每一个容器分配 network namespace,设置ip等,并将一个主机上的docker容器连接到一个虚拟网桥上。
特点:
- docker run -itd --name test3 centos:7 /bin/bash
- #创建时,不需要指定网络模式。默认即可
-
- docker inspect test3 |grep -i 'networkmode'
- #过滤出网络模式
overlay网路模式是一种叠加式的网络模式。
因为在我们使用bridge模式的时候,是无法支持指定IP运行docker的,
- docker run -itd --name test4 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
- #启动一个容器,指定为bridge模式,并且指定该容器的ip为172.17.0.10.
报错:来自守护进程的错误响应:仅在用户定义的网络上支持用户指定的IP地址。
bridge无法手动指定容器的ip,只能依靠docker0来分配
因为不能自定义创建容器的ip地址,全是docker0所安排的,既然这样,那我们就自己创建一个docker0出来,但是名字不能重复,ip 也不能。创建出来的默认也是bridge模式。想自定义其它网络的也可以。
特点
- docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
- #创建指定的网桥的ip地址和名称,以及显示的网络模式名称
-
- docker1为执行ifconfig -a 命令时,显示的网卡名,如果不使用 --opt 参数指定此名称,那你在使用ifconfig -a 命令查看网络信息时,看到的是类似 br-110add5ad5fsef 这样的名字,这显然不好记。
- mynetwork 为执行docker network list 命令时,显示的bridge网络模式名称。
- docker network ls
- #查看所有网卡和他的id
-
- docker network rm 【网卡ID】
- #删除某个指定的网卡
- docker run -itd --name test5 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
-
- #创建启动容器,网络模式指向myneywork(可以不加=),并给予指定ip地址。
两个容器如果端口一致的情况下,暴露出去会产生地址冲突,所以需要在docker0上做一个端口映射,通过ens33暴露出去端口不同就可以了
- -p 自定义端口 ( 宿主机端口:容器内端口 )
-
- -P 随机端口 (-P 49153起始 49153到65535)
- #自定义端口
- docker run -itd -p 8081:80 nginx:latest /bin/bash
- #需要在容器中开启nginx
- docker exec -it ba270ba03e6d /bin/bash -c nginx
- #在网页测试
- http://192.168.131.10:8081/
-
-
- # 随机端口
- docker run -itd -P nginx:latest /bin/bash
docker cp /opt/1.txt 容器ID:/opt/1.txt
docker cp 容器ID:/opt/1.txt ./
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。