在 overlay 中运行容器 - 每天5分钟玩转 Docker 容器技术(51)

上一节我们创建了 overlay 网络 ov_net1,今天将运行一个 busybox 容器并连接到 ov_net1:

查看容器的网络配置:

bbox1 有两个网络接口 eth0 和 eth1。eth0 IP 为 10.0.0.2,连接的是 overlay 网络 ov_net1。eth1 IP 172.17.0.2,容器的默认路由是走 eth1,eth1 是哪儿来的呢?

其实,docker 会创建一个 bridge 网络 “docker_gwbridge”,为所有连接到 overlay 网络的容器提供访问外网的能力。

从 docker network inspect docker_gwbridge 输出可确认 docker_gwbridge 的 IP 地址范围是 172.17.0.0/16,当前连接的容器就是 bbox1(172.17.0.2)。

docker network inspect docker_gwbridge

[

......

"IPAM": {

"Driver": "default",

"Options": null,

"Config": [

{

"Subnet": "172.17.0.0/16",

"Gateway": "172.17.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Containers": {

"100dd1207eb8412a81c980dcd191d00eb4377a7a175a806a26038e8c12259766": {

"Name": "gateway_100dd1207eb8",

"EndpointID": "5077a2bfef80c695661f555412c3679b1a309cbba8a2f1a3247d6b414d35b819",

"MacAddress": "02:42:ac:11:00:02",

"IPv4Address": "172.17.0.2/16",

"IPv6Address": ""

}

},

......

而且此网络的网关就是网桥 docker_gwbridge 的 IP 172.17.0.1。

这样容器 bbox1 就可以通过 docker_gwbridge 访问外网。

如果外网要访问容器,可通过主机端口映射,比如:

docker run -p 80:80 -d --net ov_net1 --name web1 httpd

验证完外网的连通性,下一节验证 overlay 网络跨主机通信。

时间: 2024-08-08 09:27:14

在 overlay 中运行容器 - 每天5分钟玩转 Docker 容器技术(51)的相关文章

准备 overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49)

为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络.VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性.有关 VxLAN 更详细的内容可参考 CloudMan 在<每天5分钟玩转 OpenStack>中的相关章节. Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network.Endp

在 Docker 中使用 flannel - 每天5分钟玩转 Docker 容器技术(60)

上一节我们安装和配置了 flannel,本节在 Docker 中使用 flannel. 配置 Docker 连接 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service,设置 --bip 和 --mtu. 这两个参数的值必须与 /run/flannel/subnet.env 中 FLANNEL_SUBNET 和FLANNEL_MTU 一致. 重启 Docker daemon. systemctl daemon-reloa

运行第一个 Service - 每天5分钟玩转 Docker 容器技术(96)

上一节我们创建好了 Swarm 集群, 现在部署一个运行 httpd 镜像的 service,执行如下命令: docker service create --name web_server httpd 部署 service 的命令形式与运行容器的 docker run 很相似,--name 为 service 命名,httpd 为镜像的名字. 通过 docker service ls 可以查看当前 swarm 中的 service. REPLICAS 显示当前副本信息,0/1 的意思是 web_

运行自己的 DaemonSet - 每天5分钟玩转 Docker 容器技术(131)

本节以 Prometheus Node Exporter 为例演示如何运行自己的 DaemonSet. Prometheus 是流行的系统监控方案,Node Exporter 是 Prometheus 的 agent,以 Daemon 的形式运行在每个被监控节点上. 如果是直接在 Docker 中运行 Node Exporter 容器,命令为: docker run -d \  -v "/proc:/host/proc" \  -v "/sys:/host/sys"

用 k8s 运行一次性任务 - 每天5分钟玩转 Docker 容器技术(132)

容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序,完成后容器就退出. Kubernetes 的 Deployment.ReplicaSet 和 DaemonSet 都用于管理服务类容器:对于工作类容器,我们用 Job. 先看一个简单的 Job 配置文件 myjob.yml: ① batch/v1 是当前 Job 的 apiVersion. ② 指明当前资源

在 Scale Up 中使用 Health Check - 每天5分钟玩转 Docker 容器技术(

对于多副本应用,当执行 Scale Up 操作时,新副本会作为 backend 被添加到 Service 的负责均衡中,与已有副本一起处理客户的请求.考虑到应用启动通常都需要一个准备阶段,比如加载缓存数据,连接数据库等,从容器启动到正真能够提供服务是需要一段时间的.我们可以通过 Readiness 探测判断容器是否就绪,避免将请求发送到还没有 ready 的 backend. 下面是示例应用的配置文件. 重点关注 readinessProbe 部分.这里我们使用了不同于 exec 的另一种探测方

神奇的 routing mesh - 每天5分钟玩转 Docker 容器技术(100)

接上一节案例,当我们访问任何节点的 8080 端口时,swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本. 这就是 routing mesh 的作用. 所以,无论访问哪个节点,即使该节点上没有运行 service 的副本,最终都能访问到 service. 另外,我们还可以配置一个外部 load balancer,将请求路由到 swarm service.比如配置 HAProxy,将请求分发到各个节点的 8080 端口. ingress 网络 当我

万能日志数据收集器 Fluentd - 每天5分钟玩转 Docker 容器技术(91)

前面的 ELK 中我们是用 Filebeat 收集 Docker 容器的日志,利用的是 Docker 默认的 logging driver json-file,本节我们将使用 fluentd 来收集容器的日志. Fluentd 是一个开源的数据收集器,它目前有超过 500 种的 plugin,可以连接各种数据源和数据输出组件.在接下来的实践中,Fluentd 会负责收集容器日志,然后发送给 Elasticsearch.日志处理流程如下: 这里我们用 Filebeat 将 Fluentd 收集到的

部署 Graylog 日志系统 - 每天5分钟玩转 Docker 容器技术(92)

Graylog 是与 ELK 可以相提并论的一款集中式日志管理方案,支持数据收集.检索.可视化 Dashboard.本节将实践用 Graylog 来管理 Docker 日志. Graylog 架构 Graylog 架构如下图所示: Graylog 负责接收来自各种设备和应用的日志,并为用户提供 Web 访问接口. Elasticsearch 用于索引和保存 Graylog 接收到的日志. MongoDB 负责保存 Graylog 自身的配置信息. 与 ELK 一样,Graylog 的部署方案很灵