Docker学习笔记(3)-Docker网络,Docker compose与其他相关工具
Docker网络
简介
Docker网络主要包括容器如何进行网络通信和传输,容器之间的互联等相关问题。在后面的语境中,Docker网络根据上下文通常表达一个实体概念,类似于网段,处于同一个Docker网络中的容器相当于处于同一个网段。
可以通过下面的相关命令来对Docker网络进行操作:
1 |
|
网络模式
在使用docker run
命令运行容器的时候,可以通过--network
来指定需要使用的网络模式,默认情况下该参数值为bridge。Docker
网络模式总体分为下面四种:
1 |
|
bridge模式
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通信。 在这种情况下主机是默认网关,容器通过主机进行外网的访问。
host模式
host模式下,容器直接使用宿主机的IP地址与外界进行通信,不再需要额外进行NAT转换。容器将 不会获得 一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。 容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。在这种情况下,指定端口映射将会失效。
none模式
none模式表示禁用网络功能,只有lo标识(localhost)
contianer模式
在container模式下,新建的容器和已经存在的一个容器共享网络IP配置。新建的容器不会创建自己的网卡,配置自己的IP,而是和指定的另一个容器进行共享。当然在除了网络的其他方面,例如文件系统,进程列表等,两个容器还是相互隔离的。
自定义网络
我们可以使用docker network create
来创建自定义网络,然后利用命令docker run --network network_name
在运行容器的使用指定使用自定义网络。自定义网络属于上面的bridge模式,但是自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通),相当于在自定义网络中提供了DNS服务。
Docker Compose
Docker-Compose是官方的容器开源项目,负责实现对Docker容器集群的快速编排。容器编排是指对运行容器化工作负载和服务所需的大部分运维工作进行自动化。 这包括软件团队管理容器生命周期所需完成的大量工作,包括置备、部署、扩展(扩展和缩减)、网络连接、负载均衡等。
Docker
Compose允许用户通过一个单独的docker-compose.yml
模板文件来将一组相关的容器关联为一个项目,之后可以很容易地使用一条指令来完成项目的构建。在过程中会涉及到两个概念,分别是服务(service)以及项目(project),其中service指的是一个个应用容器实例,而工程指的是由一组关联的应用容器组成的一个完整的业务单元。
在使用Docker
Compose的过程中,首先需要编写Dockerfile定义好各个service并构建出对应的镜像文件,之后使用docker-compose.yml
来定义完整的业务单元,安排好整体应用中的各个容器服务,最后执行docker-compose up
命令来启动并运行整个应用程序。
其他相关工具
该部分简单介绍了其他Docker相关工具,包括Docker轻量级可视化工具Portainer以及Docker容器监控方案。
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
Docker容器监控,一个常见的方案是CAdvisor监控收集+InfluxDB存储数据+Grafana展示图表。
CAdvisor是一个容器资源监控工具,可监控的Metric包括容器的内存、CPU、网络IO、磁盘IO等,同时提供了一个Web页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,并且仅针对单台物理机。但是CAdvisor提供了很多数据集成接口,支持与InfluxDB、Redis、Kafka、Elasticsearch等集成,通过增加相关配置将监控数据发送到这些数据库中。
InfluxDB是使用Go语言编写的一个开源分布式的时序、事件和指标数据库。该数据库基于时间序列,支持与时间有关的相关函数。
Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置,包括InfluxDB、MySQL、Elasticserach、OpenTSDB、Graphite等,同时提供丰富的插件以及模板功能,支持图表权限控制,alert报警等。