前言

Docker系列文章:

此篇是Docker系列的第八篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油!

  1. 为什么要学习Docker
  2. Docker基本概念
  3. Docker镜像基本原理
  4. Docker容器数据卷
  5. Dockerfile
  6. Docker单机网络上
  7. Docker单机网络下

基本命令


img

--net网络模式验证


img

bridge模式已在在网络初探的小节已经验证过了,这里就不再进行验证,接下来我们主要验证的是剩下的三总模式;

none

  1. 后台方式启动一个版本为最新的centos名字为centosworktest03网络模式为none的容器;

    docker run -d -it --name centosworktest03 --net none centos:latest
  2. 交互模式进入容器内部;

    docker ps
    docker exec -it 9a97610ae54a /bin/bash
  3. 验证网络模型,当你使用yum install net-tools 安装命令的时候他会提示下载失败;

  4. 我们使用自带的ip addr来查看网路,我们会发现只有一个网络回环地址,使用none模式整个容器的网络是与其他网络隔离的;

host

  1. 后台方式启动一个版本为最新的centos名字为centosworktest04网络模式为host的容器;

    docker run -d -it --name centosworktest04 --net host centos:latest
  2. 交互模式进入容器内部;

    docker ps
    docker exec -it 2958410a53c5 /bin/bash
  3. ip addr查看网络模式,会发现与宿主机的网络模型是一致的;

container

  1. 后台方式启动一个版本为最新的centos名字为centosworktest05网络模式为container的容器采用centosworktest的网络模式;

    docker run -d -it --name centosworktest05 --net container:centosworktest centos:latest
  2. 交互模式进入容器内部;

    docker exec -it 0a8ea7a39e1a /bin/bash
  3. ip addr查看网络模式,会发现与容器centosworktest的网络模式是一致的;

--link

容器在启动的IP地址是动态分配的,如何做到本地服务的发现?也就是说容器的IP变了,如何还能够调用到对应的服务,link可以通过名称调用来解决这个问题,但是不推荐使用link来解决该问题,这里的介绍只是来了解一下这个知识点的优缺点。

使用

简单介绍一下我们的案例,这里我们使用的容器名称为centosworktest03的容器,该容器的网络膜模型为none,只能在网络内部通信,我们使用--link启动一个centoslinktest的容器,来测试link的作用。这里我们因为centosworktest03容器一直在启动着,我们就直接启动centoslinktest做实验了。

  1. 后台方式启动一个版本为最新的centos名字为centoslinktest容器链接到centosworktest03这个容器;

    docker run -d -it --name centoslinktest --link centosworktest02:centosworktest02 centos:latest
  2. 检查容器centoslinktest与容器centosworktest02网络是否通畅;

    docker exec -it centoslinktest ping centosworktest02
  3. 检查容器centosworktest02与容器centoslinktest的网络是否通畅;

    docker exec -it centosworktest02 ping centoslinktest
  4. 查看centoslinktest的hosts文件,会发现在配置文件中存在了centosworktest02配置;

缺点
  1. link的网络是单向的,也不具备传递的特性;
  2. link的配置是静态的,当容器的IP发生改变的话,配置的链接就失效了;

自定义网络

  1. 创建一个networktest的网络,使用--subnet指定容器分配网段,使用--gateway指定网关;

    docker network create --driver bridge --subnet  192.168.1.0/24 --gateway 192.168.1.1 networktest
  2. 查看网络列表;

    docker network ls
  3. 查看具体配置docker network inspect networktest;

实战
  1. 后台方式分别启动名字叫customernetwork1和customernetwork2,网络模式为networktest的容器;

    docker run -d -it --name customernetwork1 --net networktest  centos:latest
    docker run -d -it --name customernetwork2 --net networktest  centos:latest
  2. 测试customernetwork1和customernetwork2网络的连通性,发现网络之间是联通的;

  3. 测试customernetwork1与docker0网络中容器的连通性,发现两个网络是不通的,因为属于不同的网段;

    docker exec -it e34051b19cfe ping 172.17.0.2
优点

自定义bridge网络与默认bridge网络docker0的优点如下:

  1. 自定义bridge具有更好的隔离性和容器间的互操作性,连接到同一个自定义bridge网络的容器会自动将所有端口相互暴露,并且无法连接到容器外的网络,使得容器化的应用能轻松地相互通信,并且与外部环境产生了良好的隔离性。

  2. 自定义bridge提供容器间通过名称自动发现的机制,也就是DNS解析,默认bridge网络上的容器只能通过IP地址互相访问,除非使用link命令,在用户定义桥接网络上,容器可以通过容器名称或别名来解析。

  3. 自定义bridge网络使用docker network create创建和配置。如果不同的应用程序组具有不同的网络要求,则可以在创建时分别配置每个用户定义的 bridge网络,增加了灵活性和可控性。

不同网段的容器如何通信

img
  1. 将容器centosworktest加入到自定义网络networktest中;

    docker network connect networktest centosworktest
  2. 测试centosworktest与customernetwork1的连通性,发现两个网络就是通畅的了;

结束

欢迎大家点点关注,点点赞!

Docker单机网络实战的更多相关文章

  1. docker单机网络类型

    docker单机网络类型概述 Docker 安装时会自动在 host 上创建三种网络  分别为 bridge    host   none .   可用 docker network ls 命令查看 ...

  2. Docker单机网络下

    前言 Docker系列文章: 此篇是Docker系列的第七篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 ...

  3. Docker单机网络上

    前言 Docker系列文章: 此篇是Docker系列的第六篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 ...

  4. Docker 单机网络

    Docker Network相关命令 root@ubuntu:~# docker network --help Usage: docker network COMMAND Manage network ...

  5. 理解Docker单机容器网络

    在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通 ...

  6. [docker]docker自带的overlay网络实战

    overlay网络实战 n3启动consul docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -b ...

  7. Docker小白到实战之Docker网络简单了解一下

    前言 现在对于Docker容器的隔离性都有所了解了,但对容器IP地址的分配.容器间的访问等还是有点小疑问,如果容器的IP由于新启动导致变动,那又怎么才能保证原有业务不会被影响,这就和网络有挂钩了,接下 ...

  8. 云计算Docker全面项目实战(Maven+Jenkins、日志管理ELK、WordPress博客镜像)

    2013年,云计算领域从此多了一个名词“Docker”.以轻量著称,更好的去解决应用打包和部署.之前我们一直在构建Iaas,但通过Iaas去实现统一功  能还是相当复杂得,并且维护复杂.将特殊性封装到 ...

  9. docker - kubernetes 网络(转)+ 架构图

    1.host网络 连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样.可以通过--network=host指定使用 host 网络.docker ...

随机推荐

  1. 多边形游戏——区间dp

    题目描述 多边形(Polygon)游戏是单人玩的游戏,开始的时候给定一个由N个顶点构成的多边形(图1所示的例子中,N=4),每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘 ...

  2. Ucore lab1实验报告

    练习一 Makefile 1.1 OS镜像文件ucore.img 是如何一步步生成的? + cc kern/init/init.c + cc kern/libs/readline.c + cc ker ...

  3. 用Taro写一个微信小程序(三)—— 配置dva

    一.关于dva dva 首先是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻 ...

  4. NX二次开发-获取面的外围边和孔槽边

    函数: UF_MODL_ask_face_loops()  获取面的所有封闭边组合(多组edge) UF_MODL_ask_loop_list_count() 获取loop的数量(面上孔.槽的数量+1 ...

  5. python学习笔记04-了解操作符与条件分支

    先来了解一下条件操作符: 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真. 如a=3,b=3则(a == b) 为 true. != 检查两个操作数的值是否相等,如果值不相等 ...

  6. SpringCloud-OAuth2(二):实战篇

    如果不了解Oauth2 是什么.工作流程的可以看我上一篇文章: SpringCloud-OAuth2(一):基础篇 这篇讲的内容是:Oauth2在SpringBoot/SpringCloud中的实战. ...

  7. 代码生成器:IDEA 强大的 Live Templates

    前言 Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等.对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能. ...

  8. [非专业翻译] 高性能对象映射框架 - Mapster

    [非专业翻译] 高性能对象映射框架 - Mapster 系列介绍 [非专业翻译] 是对没有中文文档进行翻译的系列博客,文章由机翻和译者自己理解构成,和原文相比有所有不通,但意思基本一致. 因个人能力有 ...

  9. Activity侧滑返回的实现原理

    简介 使用侧滑Activity返回很常见,例如微信就用到了.那么它是怎么实现的呢.本文带你剖析一下实现原理.我在github上找了一个star有2.6k的开源,我们分析他是怎么实现的 //star 2 ...

  10. Kubernetes ConfigMap详解,多种方式创建、多种方式使用

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 配置是程序绕不开的话题,在Kubernetes中使用ConfigMap来配置,它本质其实就是键值对.本文讲解如何 ...