大量的互联网应用服务包括多个服务组件,这往往需要多个容器之间通过网络通信进行相互配合。

Docker目前提供了映射容器端口到宿主主机容器互联机制来为容器提供网络服务。

端口映射实现访问容器:

在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。

从外部访问容器应用:

当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P标记时,Docker会随机映射49000~49900中的端口至容器内部开放的网络端口。

小写-p则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有:

  • ip:hostPort:containerPort
  • ip::containerPort
  • hostPort:containerPort

映射所有接口地址:

使用hostPort:containerPort格式将本地5000端口映射到容器5000端口(之前创建私有仓库的例子):

 docker run –d –p 5000:5000 registry

这时默认会绑定本地所有接口上的所有地址。可以多次使用-p参数从而映射多个端口。

映射到指定地址的指定端口:

可以使用ip:hostPort:containerPort格式指定映射使用一个特定地址,比如locakhost地址127.0.0.1。

 docker run –d –p 127.0.0.1:5000:5000 registry

映射到指定地址的任意端口:

可以使用ip::containerPort格式帮顶localhost的任意端口到容器的5000端口,本地主机会自动分配一个端口:

 docker run –d –p 127.0.0.1::5000 registry

可以使用udp标记来指定udp端口:

 docker run –d –p 127.0.0.1:5000:5000/udp registry

查看端口映射配置:

可以使用docker port命令来查看当前映射的端口配置,也可以查看绑定的地址:

 docker port registry

5000/tcp -> 0.0.0.0:5000
docker port registry 5000
0.0.0.0:5000

容器有自己的内部网络和IP地址(使用docker inspect + ID可以获取所有变量值)。

容器互联实现容器间通信:

容器的连接(linking)系统是除了端口映射外另一种可以与容器中应用进行交互的方式。他会在源和接收容器之间创建一个隧道,接受容器可以看到源容器指定的信息。

容器互联:

使用–link参数可以让容器之间安全的进行交互。

比如创建一个数据库容器:

 docker run —name dbserver mysql

让后创建一个容器,并将这个容器连接到dbserver容器:

 docker run –d —name likeweb —link dbserver:dbserver ubuntu

因为要连接的容器并没有启动,所以建立完容器之后会报错,这里只是演示–link,请忽略。

–link参数的格式为–link name:alias,其中name是要链接的容器的名称,alias是这个连接的别名。

可以用docker ps 命令查看连接情况。

这样Docker两个容器之间创建了一个安全隧道而不需要开放外部端口,避免了数据库端口到外部网络上。

Docker通过两种方式为容器公开连接信息:

  • 环境变量
  • 更新/etc/hosts文件

可以使用env命令来查看容器的环境变量。

Docker目前采用了Linux系统自带的网络系统来实现对网络服务的支持,这既可以利用现有成熟的技术提供稳定的支持,又可以实现快速的高性能转发。

转自:梦续代码

Docker网络基础的更多相关文章

  1. Docker网络基础:快速指南

    Docker网络基础:快速指南 原文连接:http://blogxinxiucan.sh1.newtouch.com/2017/07/30/Docker网络基础:快速指南/ 了解有关扩展网络功能的默认 ...

  2. Docker 网络基础介绍

    [编者按]本文作者为 Mesosphere 开发大使 Michael Hausenblas,主要介绍配置 Docker 单主机网络的基本知识.文章系国内 ITOM 管理平台 OneAPM 编译呈现. ...

  3. docker网络基础配置

    常用两种方式: 1)映射容器端口到宿主机 2)容器互联机制 --------------------------------------------- 端口映射实现访问容器的用法: docker ru ...

  4. Linux虚拟网络:Docker网络知识之基础篇

    我们在工作中应用了docker容器化技术,服务的部署.维护和扩展都方便了很多.然而,近期在私有化部署过程中,由于不同服务器环境的复杂多变,常常遇到网络方面的问题,现象为容器服务运行正常,但宿主机.容器 ...

  5. Docker基础内容之网络基础

    网络命名空间基本原理 单机版多容器实例网络交互原理 在宿主机上面打开两张网卡eth0与eth1,打通两张网卡的链路 在test1上面启动一个veth网卡,创建一个namespace:并桥接到eth0上 ...

  6. Docker容器基础入门认知-网络篇

    这篇文章中,会从 docker 中的单机中的 netns 到 veth,再到单机多个容器之间的 bridge 网络交互,最后到跨主机容器之间的 nat 和 vxlan 通信过程,让大家对 docker ...

  7. Docker网络模式

    [编者的话] 本文是<Docker网络及服务发现>一书的一个章节,介绍了搭建Docker单主机网络的基础内容.关于Docker网络的更多内容,包括多主机的网络,请参考该书的其他章节. @C ...

  8. docker网络解析

    Docker概念和默认网络 什么是Docker网络呢?总的来说,网络中的容器们可以相互通信,网络外的又访问不了这些容器.具体来说,在一个网络中,它是一个容器的集合,在这个概念里面的一个容器,它会通过容 ...

  9. Docker 网络之进阶篇

    笔者在<Docker 基础 : 网络配置>一文中简单介绍了容器网络的基本用法,当时网络的基本使用方式还处于 --link 阶段.时过境迁,随着 docker 的快速发展,其网络架构也在不断 ...

随机推荐

  1. (译)V8引擎介绍

    V8是什么? V8是谷歌在德国研发中心开发的一个JavaScript引擎.开源并且用C++实现.可以用于运行于客户端和服务端的Javascript程序. V8设计的初衷是为了提高浏览器上JavaScr ...

  2. people 0919

    package liu0919; public class People { private double height;// 身高 private String name;// 名字 private ...

  3. csv格式

    Name,Password nmae:xiaofan,password:1234567890 每个逗号就是一列

  4. empty与isset的一点使用体会

    刚在做表单提交的时候,我想检验一下数据是否存在,并用var_dump函数看一下数据.首先看使用isset()的代码 //登录函数 function login(){ if(!isset($_POST) ...

  5. PHP正则表达式及实例

    PHP正则表达式及实例 博客分类: Php / Pear / Mysql / Node.js 正则表达式PHPWordPressFPApache  关联: 正则表达式 去除连续空白 + 获取url + ...

  6. C++类型转化分析(1)

    仔细想想地位卑贱的类型转换功能(cast),其在程序设计中的地位就象goto语句一样令人鄙视.但是它还不是无法令人忍受,因为当在某些紧要的关头,类型转换还是必需的,这时它是一个必需品. 不过C风格的类 ...

  7. NFS文件系统

    一.nfs服务端CentOS6安装nfs-utils和rpcbind两个软件包yum install nfs-utils rpcbind编辑/etc/exports加入:/nfsdir 192.168 ...

  8. 实时查看linux网卡流量

    将下列脚本保存为可执行脚本文件,比如叫traff.sh. 1.本脚本可自定义欲查看接口,精确到小数,并可根据流量大小灵活显示单位. 2.此脚本的采集间隔为1秒. 3.此脚本不需要额外再安装软件,可在急 ...

  9. LAMP环境搭建教程(原创)

    学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.MySQL.PHP环境. 一. ...

  10. php经典笔试题

    五.基础及程序题(建议使用你擅长的语言:C/C++.PHP.Java) 5.写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组.(提示:不能使用系统已有函数,另外请仔细回忆以前学 ...