
Docker的网络服务
1.Docker网络类型
- None:不为容器配置任何网络功能,--net=none
- Container:与另一个运行中的容器共享Network Namespace,--net=container:containerID(K8S)
- Host:与宿主机共享Network Namespace,--net=host
- Bridge:Docker设计的NAT网络模型
1.1 查看容器网络类型
[root@docker01 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 07ade9737d70 bridge bridge local 55eab7903358 host host local 68a34406b800 macvlan_1 macvlan local 34fe57fbacf1 none null local1.2 none
[root@docker01 ~]# docker run -d --network none centos6.9_ssh:v2 a8a23715af6edab6cd4071c8e0eeb0a4fb59323838013738a371c8485064efab [root@docker01 ~]# docker container inspect a8a23715af6e "Networks": { "none": {1.3 Container
[root@docker01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a280b3594c51 registry "/entrypoint.sh /etc…" 19 hours ago Up 19 hours 0.0.0.0:5000->5000/tcp loving_khorana [root@docker01 ~]# docker run -it --network container:a280b3594c51 centos:6.9 [root@a280b3594c51 /]# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0 [root@docker01 ~]# docker container inspect dockername1.4 host
[root@docker01 ~]# docker run -it --network host centos:6.9 [root@docker01 /]# ifconfig docker0 Link encap:Ethernet HWaddr 02:42:D1:A0:01:7B inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0 eth0 Link encap:Ethernet HWaddr 00:0C:29:07:00:58 inet addr:10.0.0.91 Bcast:10.0.0.255 Mask:255.255.255.0 [root@docker01 ~]# docker container inspect dockername4.bridge(默认类型)
2. Docker跨主机容器之间的通信macvlan
2.1 默认一个物理网卡,只有一个物理地址,虚拟多个mac地址,为每个mac地址配上ip
##创建macvlan网络 [root@docker01 ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1 [root@docker02 ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1 ##设置eth0的网卡为混杂模式 ip link set eth1 promisc on ##创建使用macvlan网络的容器 [root@docker01 ~]# docker run -it --network macvlan_1 --ip=10.0.0.3 centos6.9_ssh:v2 /bin/sh //必须指定ip地址2.2 特点:Ping不同自己所在的宿主机
3. Dcoker跨主机通信之overlay
overlay 网络实验 http://www.cnblogs.com/CloudMan6/p/7270551.html
1)准备工作
docker03上开启consul数据库:docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap -h //指定主机名hostname
- consul:kv类型的存储数据库(key:value)
- key:value
- mysql:二维表
2) docker01、02上:
指定sock,指定consul监听端口8500,指定自己监听端口2376[root@docker01 ~]# vim /etc/docker/daemon.json { "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"], "cluster-store": "consul://10.0.0.13:8500", "cluster-advertise": "10.0.0.12:2376" }3)重启docker服务报错,排查原因为 -H fd://和"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"]重复
[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com BindsTo=containerd.service After=network-online.target firewalld.service Wants=network-online.target Requires=docker.socket [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd -H fd:// // ExecStart=/usr/bin/dockerd -H fd:// -H指定参数和/etc/docker/daemon.json中的hosts参数重复,删除-H之后的指向 //冲突配置 /etc/docker/daemon.json "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"] ##重启服务 [root@docker01 ~]# systemctl daemon-reload [root@docker01 ~]# systemctl restart docker2)创建overlay网络
全局网络,任意一节点创建网络即可[root@docker01 ~]# docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol13)启动容器测试
[root@docker01 ~]# docker run -it --network ol1 --name x86cloud01 centos6.9_ssh:v2 /bin/bash [root@docker01 ~]# docker run -it --network ol1 --name x86cloud02 centos6.9_ssh:v2 /bin/bash直接ping主机名测试,存在类似DNS的服务。
4)查看集群节点
4)外网访问
端口映射[root@docker01 ~]# docker run -it --network ol1 -p 3022:22 --name x86cloud03 centos6.9_ssh:v2 /bin/bash5)verlay的网络结构

