2018-06-29

2018-06-29  本文已影响0人  AzxWy

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与overlay

Bridge Networkk

1517801503362.png

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

$ brctl show

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

$ iptables -t nat -L

用户定义bridge和默认bridge区别

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的读写层中

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

volumes、bind mount、tmpfs mount区别

use volumes

-v--mount

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
上一篇下一篇

猜你喜欢

热点阅读