Docker 网络和存储管理
Docker 网络和存储管理
Docker 网络
网络是虚拟化技术中最复杂的部分,也是Docker 应用中的一个重要环节。Docker中的网络主要解决容器与容器,容器与外部网络,外部网络与容器之间互相通信的问题。
Docker 通信方式
在默认情况下,Docker 使用网桥(二层设备)+NAT的通信模型。如下图所示:
Docker启动时会默认自动创建网桥设备Docker0 ,实际上是一个Linux的bridge,可以理解为一个软件交换机它会在挂载到它的网口之间进行转发,同时,Docker随机分配一个本地未占用的私有网段中的一个地址给docker0接口,比如典型的172.17.42.1
,掩码是255.255.0.0,此后启动的容器内的网口也会自动分配一个同一个网段的地址。
当Docker启动容器时,会创建一对veth虚拟网络设备(当数据包发送到一个接口时,另外一个借口也可以收到相同的数据包),这对接口一端在容器内,即eth0,另一端在本地被挂载到docker0网桥,名称以veth开头。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker就创建了主机和所有容器之间一个虚拟共享网络。
为了解决容器与外部网络之间的通信,Docker引入了NAT.
网络设置
网络设置参数
1 | -b/--bridge: 指定Docker 使用的网桥设备 |
外部访问容器
容器中可以运行一些网络应用,,要让外部也可以访问这些应用,可以通过-P或者-p参数来指定端口映射。使用-P标记时,Docker会随机映射一个49000-49900的端口到内部容器开放的网络端口。
-p可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器,支持的格式有IP:hostport:containerPort
可以使用docker port
来查看当前映射的端口配置,也可以查看到绑定的地址。
Docker 数据管理
Docker 容器一旦删除,容器本身对应的rootfs文件系统就会被删除,容器中的所有数据也将随之删除。但有时候,想要数据不随容器删除而删除,还有时候,希望同一台Host容器之间可以共享数据。
为此,Docker提供了数据卷,数据卷除了可以持久化数据,还可以用于容器之间共享数据。
数据卷是一个可以供一个或者多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷会默认一直存在,即使容器被删除。
创建并查看一个数据卷
1 | docker volume create my-vol #创建一个数据卷 |
启动一个挂载数据卷的容器
在用docker run命令的时候,使用 --mount
标记来将数据卷挂载到容器里,在一个docker run中可以挂载多个数据卷。
下面创建一个名为web的容易,并加载一个数据卷到容器的、webapp目录。
1 | docker run -d -P --name web --mount source=my-vol,target=/webapp |
Author: corn1ng
Link: https://corn1ng.github.io/2018/04/11/docker/Docker 网络和存储管理/
License: 知识共享署名-非商业性使用 4.0 国际许可协议