美文网首页
2018-06-29

2018-06-29

作者: AzxWy | 来源:发表于2018-06-29 19:10 被阅读0次

Docker Architecture

docker使用了C/S架构,docker client通过REST API与docker daemon通讯,docker server担当构建image、运行,分发container的职责。
二者可以在同一个系统当中,也可以使用docker client连接远端daemon进行管理

Docker Architecture

Containers and virtual machines

container 运行在linux上,共享一个linux内核
相反,虚拟机具有完整的操作系统,虚拟机提供的环境超出了一个应用所需

Container@2x.png
VM@2x.png

Docker network

Docker network 通过network drivers扩展

  • bridge: 默认的network driver,用于独立的container与外界通讯
  • host: 打破container与docker host的网络隔离,使container直接使用host的网络
  • overlay: 用于多个container之间的通讯,时docker swarm service间通讯的实现方式
  • maclan: 可以通过maclan为container分配MAC地址,使得container直接与物理网络相连,而不需要经过主机路由
  • none: 禁止container所有网络
  • Network plugins

bridge与overlay

  • bridge用于单个主机上多个container直接的通讯
  • overlay用于多个主机上多个container之间通讯

Bridge Networkk

1517801503362.png

在默认情况下,每一个容器在创建时都会创建一对虚拟网卡,两个虚拟网卡组成了数据的通道,其中一个会放在创建的容器中,会加入到名为 docker0 网桥中。我们可以使用如下的命令来查看当前网桥的接口:

$ brctl show

docker0 会为每一个容器分配一个新的 IP 地址并将 docker0 的 IP 地址设置为默认的网关。网桥 docker0 通过 iptables 中的配置与宿主机器上的网卡相连,所有符合条件的请求都会通过 iptables 转发到 docker0 并由网桥分发给对应的机器。

$ iptables -t nat -L

用户定义bridge和默认bridge区别

  • 用户定义提供DNS服务,container之间可以通过name或alias访问
  • container在运行时可以从用户定义的bridge离开
  • 默认bridge使用link可以共享环境变量,用户定义bridge可以通过以下方式共享变量
    • 共享数据卷
    • docker-compose中指定变量
    • docker secret

user-defined bridge使用

创建/删除

$ docker network create my-net
$ docker network rm my-net

创建时连接container

$ docker create --name my-nginx \
  --network my-net \
  --publish 8080:80 \
  nginx:latest

连接正在运行的container

$ docker network connect my-net my-nginx
#断开连接
$ docker network disconnect my-net my-nginx    

开启container外界请求转发

$ sysctl net.ipv4.conf.all.forwarding=1
$ sudo iptables -P FORWARD ACCEPT

overlay network

docker 实现原理架构

packetwalk.png
overlayarch.png

Docker 数据管理

默认情况下,在docker内创建的所有文件都存储在container的读写层中

  • 当container停止时数据也一起销毁,难以持久化
  • container的读写层与主机紧密耦合,数据难以转移

docker提供了两种数据持久化方式

  • volumes
  • bind mounts
  • tmpfs mount (linux)

volumes、bind mount、tmpfs mount区别

  • volumes存储在由docker管理的主机文件系统当中(/var/lib/docker/voumes/ on Linux),非docker进程无法修改该文件系统,volumes是docker数据持久化的最佳方式。volumes还可以通过drivers挂在cloud上
  • bind mount可以存储在主机系统的任何地方,非docker进程可以对这些文件进行修改
  • tmpfs mount 存储在主机的memory当中,docker swarm 通过这种方式将secret挂载到container上


    types-of-mounts.png

use volumes

-v--mount

  • -v: <volumes-name>:<container-path>:<options>
  • --mount: <key>:
    * type: bind,volume,tmpfs
    * source: volumes name
    * destination: container path
    * readonly
    * volume-opt

Create a volume

$ docker volume create my-vol
# list volumes
$ docker volume ls
# inspect a volume
$ docker volume inspect my-vol
# Remove a volume
$ docker volume rm my-vol

Start a container with a volume

$ docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \
  nginx:latest

Start a service with volumes

$ docker service create -d \
  --replicas=4 \
  --name devtest-service \
  --mount source=myvol2,target=/app \
  nginx:latest

相关文章

  • 易效能践行

    2018-06-29 木木爱吃瓜 2018-06-29 22:28 · 字数 388 · 阅读 1 · 日记本 高...

  • document.createDocumentFragment(

    2018-06-29 创建 常见 dom 操作 js常见的创建dom节点的方法有 createElement() ...

  • shuffle()

    2018-06-29 ###shuffle() 方法将序列的所有元素随机排序。 #需要导入 random 模块,然...

  • (读报时间)2018-06-29 .NET及相关开发资讯速递

    (读报时间)2018-06-29 .NET及相关开发资讯速递: 1.【开源】OSharpNS,轻量级.net co...

  • 日精进打卡(第357天)

    2018-06-29 姓名:李义 公司:........ 组别:259期利他二组 【知~学习】 背诵 六项精进大纲...

  • 2018-07-25

    洋葱数学入选福布斯中国最具创新力企业50强 创业邦2018-06-29 标签: 洋葱数学 日前,《福布斯中国》发布...

  • 我所理解的PRESS.one

    [PRESSone拓荒者]采编于 2018-06-29 以下为原作者正文。 距离 PRESS.one 去年7月12...

  • 成为开拓者

    2018-06-29 (稻盛哲学学习会)打卡第76天 姓名:祝新华 部门:业务部 组别:待定 【知~学习】 《京瓷...

  • adb 连接问题 daemon not running.star

    问题当你的电脑和安卓设备进行adb连接时,出现这面的错误,屏幕快照 2018-06-29 下午3.22.21.pn...

  • 给PRESS.one拓荒者的第一封信

    [PRESSone拓荒者]采编于 2018-06-29 以下为原作者正文。 首先非常感谢PRESS.one拓荒者...

网友评论

      本文标题:2018-06-29

      本文链接:https://www.haomeiwen.com/subject/lgfayftx.html