Docker网络设置
一。网络的模式
查看网络:docker network ls
1.bridge模式:容器没有一个共有ip,只有宿主机可以直接访问,外部主机是不可见的,容器通过宿主机的NAT规则可以访问外网(--network=bridge),bridge的主机通过容器的docker0口和外主机eth0的ip进行连接,先将ip映射到docker的ip,在通过eth0的ip进行访问外网
2.host模式:可以让容器共享宿主机的网络栈,这样的好处是外部主机于容器直接通信,但是有的容器的网络缺少隔离性(--network=host)
3.none模式:没有ip
拓展:有源生网络为什么还要使用自定义网络?
源生的桥接网络中没有DNS插件,不能做解析,自定义网络,在创建后具有DNS解析ping其他容器名,因为源生桥接下ip在断开连接后,会发生变化进行变换,使用ping容器名更加稳定
自定义网络的创建方法:(同一台主机上,两个容器使用一样的自定义网络)
docker network create mynet1 -d bridge:自定义网络,为桥接
docker run -it --name test1 --network mynet1 busybox
docker run -it --name test2 --network mynet1 busybox
再用test1去ping test2即可ping通
二。相同主机,不同容器,不同网卡之间的通信
1.主机1建立两个自定义网络(从而让两个自定义网卡的ip处于不同网卡)
2.同一个创建两个容器(拥有不同的自定义网络)
docker run -it --rm --name test1 --network mynet1 busybox
docker run -it --rm --name test2 --network mynet2 busybox
3.将第一块网卡给test2,让test2拥有两块网卡
docker network connect mynet1 test2
4.test1容器ping test2容器
三。不同主机之间的容器互通
1.添加两块网卡
2.打开混杂模式:(两台主机间均开通混杂模式)
ip link set ens224 promisc on
ip link set up ens224
3.创建自定义网络:(两台主机配置一样的步骤)
docker network create -d macvlan --subnet 4.4.4.0/24 --gateway 4.4.4.4 -o parent=ens224 mynet1(设定模式为macvlan,网段,弯管以及指定的配置和名称)
删除网络:docker network rm 网络名
4.不同主机上创建相同容器
docker run -it --rm --name test1 --network mynet1 --ip 4.4.4.1 busybox
docker run -it --rm --name test1 --network mynet1 --ip 4.4.4.2 busybox
5.进行测试:
四。利用容器部署phpmyadmin管理mysql
1.进行解压缩phymyadmin和mysql
docker load -i phpmyadmin-latest.tar.gz
docker load -i mysql-5.7.tar.gz
2.创建php容器
docker run -d --name mysqladmin --network mynet1
-e PMA_ARBITRARY=1(在web页面可以手动输入数据库地址和端口)
-p 80:80 phpmyadmin:latest
3.创建mysql容器
docker run -d --name mysql
-e MYSQL_ROOT_PASSWD='lee'(设置密码)
--network container:mysqladmin(设置网络于容器mysqladmin的网络相同)
mysql:5.7
五。容器内外网之间的访问
容器访问外网:通过iptables的nat模式即可访问外网
外网访问容器网:可以通过iptables的nat进行访问内网,还可以通过docker-proxy进行访问