探索本地Docker桥接网络

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 本文讲的是探索本地Docker桥接网络,【编者的话】本文主要介绍了Docker的基础网络知识,作者通过容器与MongoDB实例的连接的小实验探索了Docker的网路知识以及其中的一些问题。
本文讲的是探索本地Docker桥接网络 【编者的话】本文主要介绍了Docker的基础网络知识,作者通过容器与MongoDB实例的连接的小实验探索了Docker的网路知识以及其中的一些问题。

我正在写 《Docker in Action》 (译者注:此书的样章可以在 这里查看 )第五章,内容有关Docker的容器连接与网络配置。最近一直在关注Docker的其它几个部分,我也重新熟悉了容器连接并深入研究了网络。

本文不会赘述我们已经熟悉的 网络桥接 。但是我猜很多使用Docker的开发者仍然不熟悉这部分内容,接下来我将为你展示容器启动的时候如何创建网络。下面我将会做一个实验,从几个容器中操作MongoDB。

启动目标容器

在这个实验中我们的目标是MongoDB数据库。你可以安装并使用以下命令启动MongoDB容器。
docker run --name some-mongo -d mongo:latest

启动另一个容器

这个容器基于Ubuntu镜像构建,运行了一个Shell环境。你可以检查你的本地网络并从这个容器连接到Mongo实例。
docker run -it --rm ubuntu:latest /bin/bash
root@XXX:/#

在交互模式下启动镜像,这样就可以安装你所需要的工具或者做其它事情而不会扰乱你的主机系统的状态。

获取您的命令行工具

你需要的工具包括 Mongo CLI nmap (译者注:nmap是网络探测工具和安全/端口扫描器)。
root@XXX:/#apt-get -y install nmap
root@XXX:/#apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
root@XXX:/#echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
root@XXX:/#apt-get update
root@XXX:/#apt-get install -y mongodb-org-shell

既然你正在以root身份运行的容器,你不用担心标准的 sudo 命令前缀。一旦这些命令运行完成,你就可以准备开启实验。

扫描网络

找到你的容器的IP地址,这样你就可以猜出你的目标可能在哪。
root@XXX:/#MY_IP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`

寻找在同一子网的监听端口为27017子网中的主机。执行此操作使用 nmap 进行子网的27017端口的扫描:
root@XXX:/#nmap -sS -p 27017 $MY_IP/24

在我的测试环境中的网络端口扫描的结果如下:
Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-09 15:52 UTC
Nmap scan report for 172.17.0.33
Host is up (0.000030s latency).
PORT STATE SERVICE
27017/tcp closed unknown
MAC Address: 02:42:AC:11:00:21 (Unknown)
Nmap scan report for 172.17.0.34
Host is up (0.000021s latency).
PORT STATE SERVICE
27017/tcp closed unknown
MAC Address: 02:42:AC:11:00:22 (Unknown)
Nmap scan report for 172.17.0.96
Host is up (-0.079s latency).
PORT STATE SERVICE
27017/tcp open unknown
MAC Address: 02:42:AC:11:00:60 (Unknown)
Nmap scan report for 172.17.0.131
Host is up (-0.084s latency).
PORT STATE SERVICE
27017/tcp closed unknown
MAC Address: 02:42:AC:11:00:83 (Unknown)
Nmap scan report for XXX (172.17.0.132)
Host is up (0.000055s latency).
PORT STATE SERVICE
27017/tcp closed unknown
Nmap done: 256 IP addresses (5 hosts up) scanned in 4.10 seconds

从以上的输出中你可以看到,我的测试环境中运行的5个容器(包括一个正在运行命令的)。五个其中之一的端口27017是开放的。开放此端口的IP地址是运行你的MongoDB实例容器的IP地址。这是有趣的并且某些情况下可能会是一个惊喜,一会儿我就来聊聊这些。首先,让我们先做完实验。

访问数据库

使用先前安装的mongo CLI,你应该能够访问在其它容器中运行的MongoDB实例。在你得意忘形之前,你要知道这并不是Docker的或者Linux内核的漏洞,服务的端口是开放的,所以你肯定能正常访问。

当你配合IP地址运行以下命令,你可以看到输出:
root@XXX:/#mongo --host 172.17.0.96 # replace the IP address
MongoDB shell version: 2.6.6
connecting to: 172.17.0.96:27017/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
>_

就是这样。你可以在不同的容器内连接到MongoDB实例。获取对数据库的访问就是这么容易。惊讶吧?不应该。你正在运行一个没有身份验证要求的MongoDB实例。不要以为防火墙或网络拓扑会保护你的安全性差的服务。

Docker抽象化以及他们如何通信

此前在Docker的历险中,不知道为什么,我印象里网络是围绕着容器而构建。确实是这样。它们有分离接口的防火墙。不过我最初没有想到这些,即使是路由没有具体的链接。我认为,这是被Docker容器的链接增强了。

与其他人一样,当我学习如何访问其它容器的时候,首先使用的就是容器的连接。当你想连接另外一个已经存在的容器时,你可以在容器启动时通过参数指定(译者注:--link参数)。当你使用连接时,Docker会将IP和端口信息相关的环境变量放到新创建的容器。此外,其它的容器IP地址将会添加到 /etc/hosts 文件并对应容器的名称。(译者注:使用连接容器不需要公开端口,父容器可以直接访问子容器的公开端口,容器的端口不需要对宿主机公开,同时在容器中,会看到自动创建的一些环境变量,运行env命令试试。)

当我学习连接时,我停止了寻找其它的工具......至少一段时间。连接相当的方便,但他们只是提供了方便。他们告知你的新容器其他一些特定的容器的IP和端口信息。就是这样。桥接网络也没有什么花哨。

你可以访问其它容器的外部接口,就像他们是一个网络上的其它计算机。这应该是一件好事。我们知道该怎么做。

PS:别忘了停止并删除本实验中创建的容器。
docker kill some-mongo
docker rm -v some-mongo


原文链接:Exploring Local Docker Bridge Networks (翻译:田浩浩 审校:李颖杰)

===========================
译者介绍
田浩浩 悉尼大学USYD 硕士研究生,目前在珠海从事Android应用开发工作。业余时间专注Docker的学习与研究,希望通过 DockerOne 把最新最优秀的译文贡献给大家,与读者一起畅游Docker的海洋。

原文发布时间为:2015-01-13
本文作者:田浩浩 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:探索本地Docker桥接网络
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
13天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
117 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
26天前
|
安全 Docker 容器
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
36 6
|
29天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
86 7
|
1月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
45 5
|
2月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
46 5
|
2月前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
46 5
|
2月前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
41 4
|
1月前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
1月前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
1月前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。

热门文章

最新文章