weave网络单主机容器间通信

weave网络单主机容器间通信

实验环境

已安装docker一台linux,并weave也安装启动完成,安装步骤参考上一篇文档

实验目的

单主机内两个使用weave网络的容器可以通信

实验步骤

进入weave网络范围

[root@localhost ~]# eval $(weave env)

Docker容器网络-weave

Weave网络介绍

Weave是 Weaveworks 开发的容器网络解决方案。weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来。对容器来说,weave 就像一个巨大的以太网交换机,所有容器都被接入这个交换机,容器可以直接通信,无需 NAT 和端口映射。除此之外,weave 的 DNS 模块使容器可以通过 hostname 访问。

使用环境

weave 不依赖分布式数据库(例如 etcd 和 consul)交换网络信息,每个主机上只需运行 weave 组件就能建立起跨主机容器网络。我们会在 host1 和 host2 上部署 weave 并实践 weave 的各项特性。

flannle网络中的web集群

flannle网络中的web集群

实验环境

物理机 服务 备注
192.168.1.12 docker(已安装)、etcd、flannel server1
192.168.1.13 docker(已安装)、etcd、flannel server2

flannel+docker-compose

flannel跨主机通信部署

flannel跨主机通信部署

既然是跨主机,至少需要两台docker主机

实验环境

ip 服务 备注
192.168.1.12 docker(已启动)、etcd、flannel server1
192.168.1.13 docker(已启动)、etcd、flannel server2

实验目的

让docker不同主机的容器通过flannel网络进行分配ip并完成通信

实验步骤

使用flannel要求关闭防火墙,关闭沙盒,开启路由转发

Docker跨主机容器-flannel介绍

flannel网络概述

flannel 是 CoreOS 开发的容器网络解决方案。flannel 为每个 host 分配一个 subnet(子网),容器从此 subnet 中分配 IP,这些 IP 可以在主机间路由,容器间无需 NAT 和 port mapping(端口映射) 就可以跨主机通信。

flannel的作用

因为flannel实现跨主机的子网通信是通过主机中的dr0网卡进行通信的,由flannel分配的子网都是从手动指定的一个大的子网中划分出来分配的。

Docker跨主机不同网络-overlay

Docker跨主机容器间不同网络间通信

实验环境

ip 服务 备注(别名)
192.168.1.12 Docker/consul server1
192.168.1.13 Docker server2

实验目的

server1:运行2个容器bbox1和bbox2

server2:运行2个容器bbox3和bbox4

net1(overlay网络):bbox1和bbox4使用通信

net2(overlay网络):bbox2和bbox3使用通信,并手动指定网段为10.10.10.0,且bbox2使用10.10.10.100/24地址,bbox3使用10.10.10.100/24地址

同时bbox1也可与net2网络的容器通信

Docker跨主机容器网络-overlay

Docker跨主机容器网络通信

前面已经有了 Docker 的几种网络方案:none、host、bridge 和 joined 容器,它们解决了单个 Docker主机内容器通信的问题。

本文将介绍docker的跨主机网络的一些基础概念以及简单的结构(overlay)

现在来想一个生产环境,在生产环境中,希望每一台docker主机都只去运行一个服务的集群即可。如

一台docker主机运行web集群

一台docker主机运行mysql集群

一台docke主机运行php集群

可是如果想要这些环境像我们所需要的那样,以LNMP的架构运行,务必每台主机间的容器之间是需要通信的。就用到了本文的跨主机容器通信的方案

Docker中Web集群迁移及共享数据

实验环境

ip 服务 备注
192.168.1.11 DockerA
192.168.1.12 DockerB
192.168.1.13 NFS&Docker Registry

实验目的

DockerA主机内创建apache集群三台容器,热数据htdocs目录持久化到本地。(要求页面显示结果为chaiyanjiang.com)

迁移DockerA主机中的apache集群到DockerB中,需要连同htdocs目录内的数据一并迁移(把DockerA主机内的所有数据打包到镜像层中,并上传到Registry中,在DockerB下载该镜像后直接做成集群)

DockerA主机新建三台集群容器,数据来自NFS服务器,内容为“2020ComeOnWH”

Docker共享存储---共享数据

Docker共享数据

上一篇所说的volume卷就是共享数据的关键,比如web集群,集群每一台节点的数据都要求是相同的,包括之前的一些服务时,也为web集群部署nfs后端来存放数据

bind mount共享数据

学过的bind mount可以用来实现共享数据,但是方法比较笨拙,只能是创建容器的时候指定挂载目录,这样就需要一台一台去进行创建指定

如下:

Docker共享存储---卷容器(volume)

Docker的存储资源

Docker为容器提供了两类存储资源:

1.由storage Driver管理的镜像层和容器层

在docker服务器中查看docker信息

[root@localhost ~]# docker info
# 找到以下这条信息,overlay就是在graph中来管理镜像和容器的
# 镜像分层中也说到过,容器的COW特性,对容器的增删改查不会涉及到镜像层中的内容
# 这些功能就是由Storage Driver完成的,也是docker默认使用的driver
 Storage Driver: overlay2

2.Data Volume

单主机多个bridge网络间通信

实验如图所示:

作业

实验目的:

将nginx的端口映射到宿主机,通过宿主机来访问到nginx,然后nginx的php设置将会寻找php容器所在,最终显示页面

Docker单主机容器间通信

Docker的原生网络

也就是docker程序中自带的网络类型

查看Docker中的原生网络

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
e1aa5d692686        bridge              bridge              local
082e568090f3        host                host                local
70d9c743f011        none                null                local

原生网络主要用于,容器和容器之间的网络通讯,以及容器与外部主机之间的通讯

Docker网络从覆盖范围分为两种:

  • 单主机的容器之间的通讯

Docker容器状态的形成过程

Docker容器状态的形成过程

下图中是docker运行的几种状态,带有颜色的圆形块,是都可以在docker ps中查看到的状态

容器的运行过程

Docker私有仓库镜像使用

Docker私有仓库镜像的使用

市面上的公共仓库

Docker的公共仓库

由Docker公司维护的Registry,用户也可以将自己的镜像保存到DockerHub上中免费的response中,因为在国内访问由很多的限制

登录方法

docker login -u 用户名 密码 https://

登录后下载方法

docker pull 用户名/images名:tag

Dockerfile构建LNMP镜像

Dockerfile构建LNMP镜像

要求,构建完成后,进入容器可以直接访问到index.php

编写Dockerfile,为了方便看,将LNMP分为来写

准备本地环境

先将以下包,nginx/mysql/php所需的tar包拖入物理机

nginx-1.11.1.tar.gz
cmake-3.15.1.tar.gz
mysql-5.6.33.tar.gz
php-5.3.28.tar.gz

编写index.php页面,用于最后验证





正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0