命令记不住

登陆

Docker 的网络服务

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                local

1.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 dockername

1.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 dockername

4.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 docker

2)创建overlay网络
全局网络,任意一节点创建网络即可

[root@docker01 ~]# docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol1

3)启动容器测试

[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)查看集群节点


1


4)外网访问
端口映射

[root@docker01 ~]# docker run -it --network ol1 -p 3022:22 --name x86cloud03  centos6.9_ssh:v2 /bin/bash

5)verlay的网络结构


2


推荐阅读