每天5分钟玩转Docker 学习总结(二)

第五章 Docker 网络

Docker 安装时会创建三个网络:bridge\host\none

5.1 none网络

  • 什么都没有的网络,挂在这个网络下的容器除了lo,没有任何网卡
  • 用途:生成随机密码

5.2 host网络

  • 连接到host网络的容器共享Docker host的网络栈,容器的网络配置与host完全一样
  • 使用 –network=host 指定使用host网络
host网络应用场景
  • host主机也是连接在host网络,可以得到良好的性能,牺牲灵活性,比如端口冲突(Docker host上已经使用的端口就不能使用了)
  • 让容器可以直接配置host网络,比如某些跨host的网络解决方法,如管理iptables

5.3 bridge网络

  • Docker安装时会创建一个名为docker0的Linux bridge
  • 不指定–network默认挂在docker0上
  • 绑定好后是一对veth pair
  • 容器创建时,docker会自动从172.17.0.0/16中分配一个IP

5.4 user-defined网络

除了none\host\bridge0三个自动创建的网络,用户也可以根据业务需要创建user-defined网络

Docker提供三种user-defined网络驱动

bridge、overlay、macvlan

bridge
  • 类似bridge0网络docker network create --driver bridge my-net
  • 指定网段:--subnet--gateway
  • 指定静态IP:--ip (只有使用了–subnet创建的网络才能指定静态IP)
  • 同一网络中的容器、网关都是可以通信的
  • 要使创建的bridge与bridge0通信,可以加路由器

5.5 容器间通信

容器间可以通过IP、Docker DNS Server、joined 容器 三种方式通信

1、IP通信
  • 两个容器要能通信,必须要有属于同一网络的网卡
  • 在创建时--network指定相应的网络
2、Docker DNS Server
  • docker daemon实现了一个内嵌的DNS server,使容器可以通过”容器名”通信。在启动时用--name指定即可
  • 只能在user-defined网络中使用docker DNS。默认的bridge网络无法使用DNS
3、joined容器
  • join可以使两个容器共享一个网络栈,共享网卡和配置信息
  • joined容器之间可以通过127.0.0.1直接通信
  • 适用以下场景:
    • 不同容器中的程序希望通过loopback高效地通信,比如Web Server与App Server
    • 希望监控其他容器的网络流量,比如运行在独立容器中的网络监控程序

5.6 将容器与外部世界连接

容器访问外部世界
  • 容器可以访问外部网络,实际是因为:网桥docker0收到容器的外出包,把它将包的源地址替换成host的地址发送出去,即做了一次网络地址转换(NAT)
外部世界访问容器
  • 端口映射-p
  • 可将容器对外提供服务的端口映射到host的某个端口,外网通该端口访问容器
  • docker run -d -p 80 httpdhttpd容器的80端口被映射到host 32773上,可以通过 <host ip>:<32773> 访问容器的Web服务
  • docker run -d -p 80:32773将80端口映射到host的32773端口
    • docker-proxy监听host的32773端口
    • 当curl访问0.0.0.0:32773时,docker-proxy转发给容器 0.0.0.0:80
    • httpd容器相应请求并返回结果

第六章 Docker 存储

Docker为容器提供两种村存放数据的资源

  • 由storage driver 管理的镜像层和容器层
  • Data Volume

6.1 storage driver

  • 对于某些容器可以直接将数据放在由storage driver维护的层中,如无状态的应用

6.2 Data Volume

Data Volume本质是Docker Host文件系统中的目录或文件,能够直接被moune到容器的文件系统中。Data Volume具有以下特点:

  • Data Volume是目录或文件,而非没有格式化的磁盘(块设备)
  • 容器可以读写volume中的数据
  • volume数据可以被永久地保存,即使使用它的容器已经销毁

如何设置volume的容量?

volume实际是docker host文件系统的一部分,目前没有方法设置volume的容量

Docker提供两种类型的volume:bind mount 和 docker managed

bind mount
  • bind mount 是将host上已存在的目录或文件mount到容器
    • docker run -v <host path>:<container path> name
  • bind mount 时还可以指定数据的读写权限,默认可读可写
  • bind mount 缺点:限制了容器的可移植性,只能在当前host下
docker managed volume
  • 不需要指定mount源,只需指明mount point即可
  • docker managed volume创建过程
    • 容器启动时,告诉docker需要一个volume存放数据,mount到容器的目录/abc下
    • docker在/var/lib/docker/volumes中生成一个随机目录作为mount源
    • 如果/abc已经在容器中存在,则将数据复制到moumt源
    • 将volume mount到 /abc
bing mount 与 docker managed volume的不同点
  • bind mount支持单个文件,volume只支持目录
  • bind mount支持权限修改,volume不支持
  • bind mount移植性弱,volume移植性强,无须指定host目录

6.3 数据共享

容器与host共享数据
  • bind mount 直接将要共享的目录mount到容器
  • docker cp 实现容器和host之间数据的复制
容器之间共享数据

将共享数据放在bind mount中,然后mount到多个容器

6.4 volume container

  • 首先创建一个 volume container,它不需要处于运行状态,容器mount了两个volumes
  • 其他容器可以通过--volumes-from使用vc_data 这个volume container
    • docker run --name web1 -d -p 80 --volume-from vc_data httpd
  • volume container 特点:
    • 与bind mount比,不必为每一个容器指定host path,所有path都在volume container 中定义好,容器只需与volume container关联,实现了容器与host的解耦
    • 使用volume container的容器,其mount point是一致的,有利于配置的规范和标准

6.5 data-packed volume container

  • 可以将数据打包到镜像中,然后通过 docker managed volume共享
  • 通过Dockerfile构建镜像
    • FROM busybox:latest
    • ADD htdocs /usr/local/apach2/htdocs
    • VOLUME /usr/local/apache2/htdocs
  • docker build 新镜像,然后创建container

6.6 Data Volume生命周期管理

  • docker 不会销毁bind mount,只能由host删除
  • docker rm -v 参数,会将容器使用到的volume一并删除,前提是没有其他容器mount该volume

6.7 小结

  • docker为容器提供了两种存储资源:数据层和 Data Volume
  • 数据层包括镜像层和容器层,由storage driver管理
  • Data Volume有两种类型:bind mount和docker managed volume
  • bind mount 可以实现容器与host之间,容器与容器之间共享数据
  • volume container 是一种具有更好移植性的容器间数据共享方案
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值