Docker 使用指南 (三)—— 网络配置

本次实验环境:腾讯云服务器 CentOS 6.7 x86_64

Docker 配置容器的步骤是:

1.创建一对虚拟接口 2.在主Docker主机内部给它一个唯一的名称,比如veth65f9,绑定它到docker0或者Docker使用的任何网桥上 3.让其他的接口翻墙进入新的容器(已经提供了lo接口),在容器的独立和唯一网络接口命名空间内,重新命名它为更漂亮的名字eth0,名称不要和其他的物理接口冲突 4.在网桥的网络地址访问内给容器的eth0一个新的IP地址,设置它的缺省路由为Docker主机在网桥上拥有的IP地址。

这些步骤结束后,容器将立即拥有一个eth0(虚拟)网卡,并会发现它自己可以和其他的容器以及互联网通讯。 你可以使用 –net= 这个选项来执行 docker run 启动一个容器,这个选项有一下可选参数。

–net=bridge— 默认选项,用网桥的方式来连接docker容器。 –net=host— docker跳过配置容器的独立网络栈。 –net=container:NAME_or_ID— 告诉docker让这个新建的容器使用已有容器的网络配置。 –net=none— 告诉docker为新建的容器建立一个网络栈,但不对这个网络栈进行任何配置,所以只能访问本地网络,没有外网。

一.桥接模式

这是 docker 默认的网络模式,Docker 后台程序会创建 docker0,一个虚拟的以太网桥,用于自动转发与之连接的任意网络接口间的数据包。在bridge模式下,连在同一网桥上的容器可以相互通信。

[root@sta2 docker]# docker run -it -P --name mynginx nginx #为容器做端口映射

使用桥接模式时,docker会创建一个docker0 的网桥,并将这个网络设备加入到docker0网桥中,可以通过brctl show命令查看。

[root@sta2 ~]#  brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.3e2d35d38bae   no      vethab6aea2

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。

容器中的网络配置:

查看映射端口配置:

[root@sta2 docker]# docker ps -l

或者使用以下方法:

[root@sta2 docker]# docker port mynginx 443/tcp -> 0.0.0.0:32774 80/tcp -> 0.0.0.0:32775

当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口,nginx 映射的端口固定为32774 和 32775。

查看访问日志: [root@sta2 docker]# docker logs -f mynginx

使用 -p(小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器,-p 标记可以多次使用来绑定多个端口。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort 。

可以使用 hostPort:containerPort 映射所有接口地址:

# docker run -d -p 5000:5000 --name mydocker nginx

此时默认会绑定本地所有接口上的所有地址。 可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,映射到指定地址的指定端口

# docker run -d -p 127.0.0.1:5000:5000 --name mydocker nginx

使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。映射到指定地址的任意端口:

# docker run -d -p 127.0.0.1::5000 --name mydocker nginx docker 做端口映射时会生成 iptables 规则,端口映射前的 iptables 规则:

端口映射后的 iptables 规则:

二.host 模式

此模式使用主机的网络

# docker run -it --name feiyu-host --net=host busybox sh

三.other container 模式

这种模式下与其他容器共享一个网络

# docker run -it --name feiyu-con --net=container:feiyu busybox sh

四.none 模式

这种模式只能访问本地网络,没有外网。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

spring-boot-starter-swagger迎新伙伴支持,加速更新进度(1.3.0.RELEASE)

从该starter创建至今收到了不少使用反馈,同时也有不错的童鞋申请加入一起维护。本篇先欢迎小火童鞋的加入及贡献,接下来具体说说本次的更新内容。 本次更新主要新...

3275
来自专栏程序之美

第四节 微服务OTRS SpringCould使用

1.1. 启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上...

813
来自专栏程序之美

第十一节 资源服务器api-server集成zuul网关

933
来自专栏SDNLAB

容器有很多优势,但它们是否安全?

容器被誉为是将应用程序部署到服务器上的非常有效的手段。容器(例如基于Docker开源标准的容器)比虚拟机消耗更少的资源,并且容器的设计更容易,且实例化和提供更快...

794
来自专栏云计算教程系列

现代化Kubernetes的应用程序

现代无状态应用程序的构建和设计可在Docker等软件容器中运行,并由Kubernetes等容器集群管理。它们使用Cloud Native和Twelve Fact...

930
来自专栏青玉伏案

JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎

上篇博客我们聊了《JavaEE开发之SpringBoot工程的创建、运行与配置》,从上篇博客的内容我们不难看出SpringBoot的便捷。本篇博客我们继续在上篇...

1995
来自专栏CSDN技术头条

Kubernetes推1.2版本,可管理1000节点,运行3万Pods

赶在Google云端产品用户大会之前,Kubernetes也释出了1.2新版。超过680位开源开发者参与。新版最大特色是扩充能力大幅提高了400%,单个集群可管...

1828
来自专栏云计算

Docker 业务流程的概述以及用处

[本文由Yaron Parasol编写]

1996
来自专栏史上最简单的Spring Cloud教程

史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)

上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服...

2148
来自专栏Rainbond开源「容器云平台」

Docker 网络构造:Docker如何使用Linux iptables和Interfaces

1142

扫码关注云+社区