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

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

给docker名称的好处是:

- 容易记

- 可以通过特殊命令,使得名称可以在容器和容器之间使用

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

  1. wxl@wxl-pc:~$ docker images

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

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

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

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

  1. wxl@wxl-pc:~$ docker inspect wangxiaoleiweb

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

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

2.默认的容器的网络

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

  1. #查看Docker默认的三种网络
  2. wxl@wxl-pc:~$ docker network ls
  3. NETWORK ID NAME DRIVER SCOPE
  4. 7f6b9cbd3eec bridge bridge local
  5. 0cb106f52e66 host host local
  6. cfb50541161b none null local

为一个容器桥接网络

  1. wxl@wxl-pc:~$ docker run -itd --name=networktest ubuntu:14.04
  2. 2a433c9467d3d35474daa544dcac665ecc4b71b202b82d0bd59049f7d52e397f
  1. wxl@wxl-pc:~$ docker network inspect bridge
  2. [
  3. {
  4. "Name": "bridge",
  5. "Id": "7f6b9cbd3eece7301d196363b5250c44fd0b275f3c3d38a952af2ad8b2fd38c2",
  6. "Scope": "local",
  7. "Driver": "bridge",
  8. "EnableIPv6": false,
  9. "IPAM": {
  10. "Driver": "default",
  11. "Options": null,
  12. "Config": [
  13. {
  14. "Subnet": "172.17.0.0/16",
  15. "Gateway": "172.17.0.1"
  16. }
  17. ]
  18. },
  19. "Internal": false,
  20. "Containers": {
  21. "2a433c9467d3d35474daa544dcac665ecc4b71b202b82d0bd59049f7d52e397f": {
  22. "Name": "networktest",
  23. "EndpointID": "d0b94ec934b390784faa5ad8946e9ba6031afe4467889e1f7fe0eda5d79deac1",
  24. "MacAddress": "02:42:ac:11:00:02",
  25. "IPv4Address": "172.17.0.2/16",
  26. "IPv6Address": ""
  27. }
  28. },
  29. "Options": {
  30. "com.docker.network.bridge.default_bridge": "true",
  31. "com.docker.network.bridge.enable_icc": "true",
  32. "com.docker.network.bridge.enable_ip_masquerade": "true",
  33. "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
  34. "com.docker.network.bridge.name": "docker0",
  35. "com.docker.network.driver.mtu": "1500"
  36. },
  37. "Labels": {}
  38. }
  39. ]

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

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

  1. 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,而覆盖网络可以包含多个主机.

  1. wxl@wxl-pc:~$ docker network create -d bridge my-bridge-network
  2. 3bfde1ba62a75e38236517f4f0731f48c281cec107e976039773be134968c453

其中,-d指使用Dockerbridge(桥接)方式的网络,如果没有加默认的也是桥接网络.

通过docker network ls来查看已经创建好的网络

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

  1. #这里创建了一个db的容器(若本地没有该镜像会自动拉取)
  2. wxl@wxl-pc:~$ docker run -d --network=my-bridge-network --name db training/postgres

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

  1. wxl@wxl-pc:~$ docker inspect --format='{{json .NetworkSettings.Networks}}' db
  2. {"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,方便后续操作

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

3.3.2.查看web容器的ip

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

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

  1. #进入db容器
  2. wxl@wxl-pc:~$ docker exec -it db bash
  3. #首次尝试ping web容器
  4. root@237e0f7060b6:/# ping 172.17.0.2
  5. PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
  6. ^C
  7. --- 172.17.0.2 ping statistics ---
  8. 24 packets transmitted, 0 received, 100% packet loss, time 23183ms
  9. root@237e0f7060b6:/# exit

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

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

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

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

  1. Docker镜像构建原理解析(不装docker也能构建镜像)

    在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有im ...

  2. Java反射机制实例解析

    1.获取想操作的访问类的java.lang.Class类的对象     2.调用Class对象的方法返回访问类的方法和属性信息     3.使用反射API来操作      每个类被加载后,系统会为该类 ...

  3. 如何修改Docker已运行实例的端口映射

    如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规 ...

  4. Docker系统六:Docker网络管理

    Docker网络 I. Docer的通信方式 默认情况下,Docker使用网桥(brige)+ NAT的通信模型. Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/1 ...

  5. Docker部署tomcat+nginx+mysql,创建一个tomcat集群

    Docker的部署可以选择虚拟机或者云服务器,我自己选择的是本机安装centos7虚拟机: 1.虚拟机安装登录成功后开始部署docker: 首先了解docker是一个开源应用容器引擎,基于Go语言遵循 ...

  6. Docker++:从 0 到 1 学习Docker(笔记)

    本篇文章有点长 ... 知识点如下:下 ↓ ↓ ↓ ~ 初识 Docker  ~ Docker 命令 ~ Docker 容器的数据卷 ~ Docker 应用部署 ~ Dockerfile ~ Dock ...

  7. Docker & k8s 系列一:快速上手docker

    Docker & k8s 系列一:快速上手docker 本篇文章将会讲解:docker是什么?docker的安装,创建一个docker镜像,运行我们创建的docker镜像,发布自己的docke ...

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

    Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...

  9. docker 实践十:docker 网络管理

    本篇是关于 docker 网络管理的内容,同时也包含了 docker 网络的高级应用. 注:环境为 CentOS7,docker 19.03. docker 网络基础 docker 网络模型 在 do ...

随机推荐

  1. iOS 音频/视频 学习目录

    参考 iOS原生API  音/视频录制 编辑 https://www.cnblogs.com/kenshincui/p/4186022.html#summary iOS视频编解码常用库比较 http: ...

  2. JQuery的get、post、ajax方法

    1.jQuery $.get() 方法 $.get() 方法通过 HTTP GET 请求从服务器上请求数据.  jQuery.get( url, [data], [callback] ):   参数: ...

  3. js高级程序设计 笔记 --- 表单

    一,基础知识 在html中,表单是form元素,而在js中,表单对应的是HTMLFormElement类型,继承自HTMLElement,其独特的属性和方法有(常见): action:接收请求的URL ...

  4. eAccelerator 配置参数详解

    eAccelerator配置参数如下: [eaccelerator]extension=eaccelerator.soeaccelerator.shm_size="64"eacce ...

  5. PIE SDK 距离分类和最大似然分类

       1.算法功能简介 监督分类,也叫训练场地法.训练分类法,是遥感图像分类的一种,用被确认类别的样本像元去识别其他未知类别像元的过程.监督分类算法有平行算法.平行六面体法.最小距离法.最大似然法.马 ...

  6. css一些常用技巧代码

      图片等比例自动缩放 img{ width: auto; height: auto; max-width: 100%; max-height: 100%; } 多行省略  最后line-clamp设 ...

  7. Duilib总体框架

    从GoogleCode上下载的duilib工程中附带的一副总体设计图(如下所示),可以先整体了解一下,有个初步的认识,对后续进一步深入了解学习会很有帮助. 通过设计图有了一个初步认识后,接下来开始进一 ...

  8. PHP面向对象的基本原则

    对象内部是高内聚的 ——对象只负责一项特定的功能(职能可大可小) ——所有对象相关的内容都封装到对象内部 高内聚就是该有的都有,用的时候不会缺胳膊少腿! 对象对外是低耦合的 ——外部世界可以看到对象的 ...

  9. c++ 网络编程(七) LINUX下 socket编程 基于套接字的标准I/O函数使用 与 fopen,feof,fgets,fputs函数用法

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614820.html 一.标准I/O 1,什么是标准I/O?其实是指C语言里的文件操作函数,如 ...

  10. 【c++】流状态的查询和控制

    源自 c++primer 4th, 248页 代码 #include <iostream> #include <limits> #include <stdexcept&g ...