Docker 的网络与数据管理

Docker 网络实现原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

docker 网络模式

host

使用host模式容器使用宿主机的网络直接公开服务,这意味着如果你在容器运行一个web服务,那么它直接绑定主机的网络接口上,而不是通过docker进行任何网络转发

总结:与宿主机共享网络命名空间/网络协议栈。

container

使用这种模式允许容器共享另一个容器的网络命名空间,这意味着两个容器可以有相同的网络接口和IP地址,如果他们共享是同一个网络命名空间的话。

总结:多个容器之间共享一个networknamespace。

node

这是最简单的网络模式,此网络模式表示容器拥有自己的网络命名空间,但不会进行任何网络配置,这实际上给用户完全自主权来自配置及容器的网络。

总结:自闭空间。

birdge

这是docker默认网络模式,每个新创建的容器都将从该网络中分配一个IP地址,此网络模式允许所有docker容器(宿主机)之间相互通信。

总结:通过veth对连接容器与docker0网桥,网桥分配给容器IP,同时docker0作为“局域网”内容器网关,最后和宿主机网卡通信。

外加:自定义

docker允许用户创建自己定义的网络,用户可以定义网络范围,子网,路由等参数,这种类型的网络使得我们的用户可以更好的对容器网络进行控制和隔离。

docker容器状态

docker 主要有7个状态

1、created		已创建,还未运行的容器
2、running		正在运行中的容器
3、restartin	容器正在启动中
4、removing	    容器正在迁移中
5、paused		停止状态的容器
6、exited		已暂停状态的容器
7、dead			死亡 主要是操作系统出现异常或断电关机等有可能引发的状态

命令

随机映射端口		docker run -d --name test1 -P nginx
指定映射端口		docker run -d --name test2 -p 43000:80 nginx
查看docker网络列表		docker network ls
查看容器进程号				 docker inspect -f '{{.State.Pid}}' 容器id
查看容器的进程、网络、文件系统等命名空间编号			
ls -l /proc/进程/ns

根据容器id创建相同网络的容器
docker run -itd --name test2 --net=container:容器id centos:7 

创建自定义网络,先自定义网络,再使用指定IP运行docker
docker network create --subnet=172.18.0.0/16 --opt 
"com.docker.network.bridge.name"="docker1"  mynetwork
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 

资源控制

CPU 资源控制

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups(Control groups)实现了对资源的配额和度量。

cgroups有四大功能:

1、资源限制:可以对任务使用的资源总额进行限制。

2、优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级。

3、资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等。

4、任务控制:cgroup可以对任务执行挂起、恢复等操作。

设置CPU使用率上限

查看当前cpu使用率

cd /sys/fs/cgroup/cpu/docker/容器id/

cat cpu.cfs_quota_us 表示该cgroups限制占用的时间

cat cpu.cfs_period_us cpu分配的周期

设置50%的比例分配CPU使用时间上限

可以重新创建一个容器并设置限额

docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash

或者

echo 50000 > cpu.cfs_quota_us

cgroup资源限制

cgroup 控制的是内核资源--》 间接控制中cpu 的资源--》控制这 中的进程资源--》 docker容器的资源--》 docker容器内应用的资源

控制的主题包括cpu 、内存、I/O。

主要介绍的CPO资源的控制,而CPU资源控制的方式主要有:

1、cpu-shares 权重指的的是多个容器同一个cpu下,被分配到CPu资源的机会占比。

2、cpu-period周期指的是 CPU在给与当前管理,控制的容器分配资源时,CPU的分配周期 ,默认周期1S,此项配置可以运行时直接指定。

3、quest-cpus 指定容器,仅能使用指定CPU,比如 0、1、2、3, 假设使用0和2可以用这种方式指定cpu核心。

Docker 的数据管理

管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。
1.数据卷

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于 Linux 下对目录进行的 mount 操作。

2.数据卷容器

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

创建一个容器作为数据卷容器
docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
echo "this is web2" > /data1/abc.txt
echo "THIS IS WEB2" > /data2/ABC.txt

使用 --volumes-from 来挂载 web2 容器中的数据卷到新的容器
docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
cat /data1/abc.txt
cat /data2/ABC.txt

端口映射

在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务。端口映射机制将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务。

随机映射端口(从32768开始)
docker run -d --name test2 -p 43000:80 nginx		指定映射端口

容器互联

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息。

创建并运行源容器取名web1
docker run -itd -P --name web1 centos:7 /bin/bash	
	
创建并运行接收容器取名web2,使用--link选项指定连接容器以实现容器互联
docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash	    --link 容器名:连接的别名

进web2 容器, ping web1
docker exec -it web2 bash
ping web1

你可能感兴趣的:(docker,网络,eureka)