Docker网络管理机制实例解析+创建自己Docker网络

实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开发的容器添加至自己新建的网络,提高Docker网络安全和通信.

1.给自己的docker (Dcoker1.12GA)容器起个名称

给docker名称的好处是:
- 容易记
- 可以通过特殊命令,使得名称可以在容器和容器之间使用

1.1.查看docker已经存在的镜像

wxl@wxl-pc:~$ docker images

1.2.选择training/webapp这个镜像,通过–name命令设置名称

wxl@wxl-pc:~$ docker run -d -P --name wangxiaoleiweb training/webapp python app.py

最后一行可以看到wangxiaoleiweb已经命名成功

可以使用docker inspect通过刚刚设置的名称来查看wangxiaoleiweb

wxl@wxl-pc:~$ docker inspect wangxiaoleiweb

1.3.删除docker名称,docker的名称都是唯一的,即一但使用了就不能在另一个镜像使用该名称,可以删除后重新命名.(只删除名字,镜像不会被删除)

#停止运行中的镜像
wxl@wxl-pc:~$ docker stop wangxiaoleiweb
#删除自定义的名称
docker rm wangxiaoleiweb
web
wxl@wxl-pc:~$ docker rm web
web
wxl@wxl-pc:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              50dae1ee8677        2 weeks ago         196.7 MB
hello-world         latest              c54a2cc56cbb        4 weeks ago         1.848 kB
training/webapp     latest              6fae60ef3446        14 months ago       348.8 MB
training/sinatra    latest              49d952a36c58        2 years ago         447 MB

2.默认的容器的网络

2.1.Docker通过网络驱动(network driver),默认网络驱动分别是桥接(bridge)和覆盖(overlay)两种.

#查看Docker默认的三种网络
wxl@wxl-pc:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
7f6b9cbd3eec        bridge              bridge              local
0cb106f52e66        host                host                local
cfb50541161b        none                null                local

为一个容器桥接网络

wxl@wxl-pc:~$ docker run -itd --name=networktest ubuntu:14.04

2a433c9467d3d35474daa544dcac665ecc4b71b202b82d0bd59049f7d52e397f
wxl@wxl-pc:~$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "7f6b9cbd3eece7301d196363b5250c44fd0b275f3c3d38a952af2ad8b2fd38c2",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "2a433c9467d3d35474daa544dcac665ecc4b71b202b82d0bd59049f7d52e397f": {
                "Name": "networktest",
                "EndpointID": "d0b94ec934b390784faa5ad8946e9ba6031afe4467889e1f7fe0eda5d79deac1",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

可以看到通过检查网络可以看到容器的IP地址,名称等信息.

2.2.从网络中删除某个容器,可以通过该容器的网络名称,容器名称,id来作为删除的标示,但是通过网络名称是方便的,如networktest

wxl@wxl-pc:~$ docker network disconnect bridge networktest

再用docker network inspect bridge会发现已经没有networktest信息了

3.自定义容器的网络

容器的网络(network)是用来隔离容器和容器之间或者网络与网络之间的方法,所以,所以我们通过建立网络来隔离容器.其中,内置的bridge网络是无法删除的.

3.1.创建网络

Docker Engine 支持两种网络桥接网络(bridge network)和覆盖网络(overlay network),桥接的网络局限于单个主机运行的Docker Engine,而覆盖网络可以包含多个主机.

wxl@wxl-pc:~$ docker network create -d bridge my-bridge-network

3bfde1ba62a75e38236517f4f0731f48c281cec107e976039773be134968c453

其中,-d指使用Dockerbridge(桥接)方式的网络,如果没有加默认的也是桥接网络.
通过docker network ls来查看已经创建好的网络

3.2.将一个容器添加至新创建的网络中

#这里创建了一个db的容器(若本地没有该镜像会自动拉取)

wxl@wxl-pc:~$ docker run -d --network=my-bridge-network --name db training/postgres

通过inspect命令查看已经添加至网络的db容器

wxl@wxl-pc:~$ docker inspect --format='{{json .NetworkSettings.Networks}}'  db

{"my-bridge-network":{"IPAMConfig":null,"Links":null,"Aliases":["237e0f7060b6"],"NetworkID":"3bfde1ba62a75e38236517f4f0731f48c281cec107e976039773be134968c453","EndpointID":"33516faca38c0f76bd2c6ebb6e8c2574c62e242d5a0c10b77c49e14b2549f3e5","Gateway":"172.18.0.1","IPAddress":"172.18.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:12:00:02"}}

3.3.通过ping的方式验证网络连通性,将两个容器(db容器和web容器)从不同的网络,放置同一个网络.

3.3.1.把training/webapp容器命名为web,方便后续操作

wxl@wxl-pc:~$ docker run -d --name web training/webapp python app.py

8f12cfaaedda2b348bef437fa2eeed19ef69ad07cd98aa72e0c2113710413e6f

3.3.2.查看web容器的ip

wxl@wxl-pc:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web

172.17.0.2

3.3.3.进入db容器并且尝试ping一下web容器,发现是ping不通,ctrl+c终止ping,如下图

#进入db容器
wxl@wxl-pc:~$ docker exec -it db bash
#首次尝试ping web容器
root@237e0f7060b6:/# ping 172.17.0.2

PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
^C
--- 172.17.0.2 ping statistics ---
24 packets transmitted, 0 received, 100% packet loss, time 23183ms

root@237e0f7060b6:/# exit

3.3.4.现在,将web容器添加至db容器的网络(即my-bridge-network),然后在ping,即可ping通

wxl@wxl-pc:~$ docker network connect my-bridge-network web
#再次进入db容器
wxl@wxl-pc:~$ docker exec -it db bash
#ping web容器,发现已经可以ping通
root@237e0f7060b6:/# ping web
PING web (172.18.0.3) 56(84) bytes of data.
64 bytes from web.my-bridge-network (172.18.0.3): icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from web.my-bridge-network (172.18.0.3): icmp_seq=2 ttl=64 time=0.110 ms
64 bytes from web.my-bridge-network (172.18.0.3): icmp_seq=3 ttl=64 time=0.109 ms
^C
--- web ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.097/0.105/0.110/0.010 ms

可见,不同的容器在不同的网络是可以起到隔离作用的,所以,自定义一个网络可以保证容器和容器之间通信安全.

时间: 2024-08-01 18:55:20

Docker网络管理机制实例解析+创建自己Docker网络的相关文章

ThinkPHP的MVC开发机制实例解析_php实例

ThinkPHP是目前国内应用非常广泛的一款MVC开发框架.本文就以实例形式解析ThinkPHP的MVC开发机制.相信会给大家一定的启发作用.具体分析如下: 一.概述: MVC框架解析如下: M  Model层    模型:就是数据库操作类(通过数据库操作类去操作各个表)         V  View层     视图:指模版.       C  Control层  控制器:就是通过控制器来实现模版,模型之间的控制关系. 二.实例分析: 1.ACTION 控制器: 位置 D:\www\aoli\

设计模式实例解析-创建型模式(Singleton、Abstract Factory、Builder)

单件模式(Singleton) 所谓的单件模式,就是说在系统中,一个类只存在唯一的实例,同时提供一个唯一的访问方法. 在我们的开发中,经常会发生使用唯一对象的情况,例如Web开发中,要记录网站访问人数的对象:程序属性配置的对象:网络编程中,只能建立一个连接的对象等等,类似于这些应用场景,都可以应用单件模式来处理. 下面举个例子来说明单件模式的使用,例子的功能是程序的配置信息管理,需要提供一个对配置的添加及读取方法,同时,只允许创建一个配置管理类的实例,代码如下: class SingletonC

Java 异步回调机制实例解析

什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道"就一个回调-".此时千万个草泥马飞奔而过 哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉.不妨总结总结. 一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调是一种特殊的调用,至于三种方式也有点不同. 1.同步回调,即阻塞,单向. 2.回调,即双向(类似自行车的两个齿轮).

5大场景护航企业成长,实例解析阿里云适应性网络架构

企业成长的每个阶段,网络管理员都面临着不同的问题和挑战.公司初创时,等待设备送达度日如年.公司快速成长时,网络性能似乎永远跟不上业务需求,常常碰到"此网页无法打开,请稍后再试"的尴尬.当企业扩张跨越地域和国界时,各地客户体验参差不齐让人备受困扰.今天,我拿一个典型公司作为例子,根据这家公司不同阶段遇到的网络难题,给大家展示一下阿里云如何解决这些问题.X是一家互联网公司,公司的长期愿景是为全球网络游戏玩家提供身临其境的游戏体验. 场景1:公司初创,产品研发测试 客户故事:X公司成立伊始,

实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作

Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3.数据卷容器作为其他容器的数据卷.降低磁盘开销.4.数据的备份,恢复和迁移.5.Docker hub的常用操作. 1.0.数据卷(Data volumes) Data volumes是一个或者多个容器特别指定的目录,它区别于联合文件系统的(Union File System,或称UnionFS,通过

如何使用vagrant和docker在OSX下管理创建虚拟环境简明教程

 Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境.docker 是一个开源的应用容器引擎,开发者可以打包他们的应用到一个可移植的容器中,然后发布到 Linux 上,也可以实现虚拟化.     虚拟化: 其实就是因为云计算的催生的技术,目的是让运行在上面的应用程序觉得自己独占所有的资源.说白了就是资源管理/隔离和namspace的隔离. Hypervisor: 这是虚拟化的一种,也就是操作系统上面在运行一个或者多个操作系统,这个底层的操作系统系统就是hypervisor.它来

你真的了解Docker吗?——Docker插件机制详解

云栖TechDay活动第十八期中,阿里云容器服务团队的核心成员陈萌辉带来了题为<Docker插件机制详解>的分享,分享中,他结合阿里云容器服务实践介绍了Docker插件的基本原理.实现方法以及插件机制未来的演进. 幻灯片下载地址:https://yq.aliyun.com/attachment/download/?filename=bdefe06ba7a14d7604af5a63a4bcc4f3.pdf 以下为现场分享观点整理. 为什么需要Docker插件?   Docker之所以这么火并且有

如何交互式地创建一个Docker容器

如何交互式地创建一个Docker容器 大家好,今天我们来学习如何使用一个docker镜像交互式地创建一个Docker容器.当我们从镜像中启动一个Docker进程,Docker就会获取该镜像及其父镜像,并重复这个过程,直到到达基础镜像.然后联合文件系统(UFS)会在其顶层添加一个读写层.读写层被称之为容器,它包含了一些关于父镜像信息及一些其他的信息,如唯一ID,网络配置和资源限制等.容器是有状态的,其状态可以从 运行态 切换到 退出态.一个处于 运行态的容器包含了在CPU上面运行的进程树,于其它在

在Docker中使用Open vSwitch创建跨主机的容器网络

本文讲的是在Docker中使用Open vSwitch创建跨主机的容器网络,[编者的话]本文介绍了如何使用Open vSwitch为Docker 1.9.0及以后版本提供网络支持.操作前请先确认你已经按照INSTALL.md 编译,或者通过包管理器安装了Open vSwitch.关于如何安装Docker,请参考www.docker.com上提供的介绍. Docker从1.9.0版本之后提供了跨主机的网络支持.通过将Docker和Open vSwitch整合,则可以利用Open vSwitch v