Docker----网络部分

项目概要:

Docker网络通信部分

项目目的:

一:使用带有httpd应用的镜像创建一个容器,使用外网进行访问网站验证。

二:Docker 四种网络模式介绍

项目内容:

创建容器的时候可以使用带有-p或-P来指定分配端口号或随机分配空闲端口

-P(大写P)使用时需要指定--expose选项或dockerfile中用expose指令容器要暴露的端口,指定需要对外提供服务的端口

一:使用docker run -d -Pcentos:httpd创建容器

此时我们再次查看容器信息,我们来看端口的映射,所以我们访问容器的http的时候,是从端口映射的那个端口访问的。输入宿主机的32769端口,就会映射到容器的80端口。

访问宿主机的32769 就会访问容器应用的80端口

我们也可以使用-p(小写p)来指定映射的端口

Dockerrun -d -p 192.168.182.132:110:22 -p 192.168.182.132:120:80 .centos:httpd

用120端口访问容器应用

访问网站前提:开启路由转发:vim /etc/sysctl.conf 添加:net.ipv4.ip_forward=1

wq保存退出   sysctl -p激活。。。。配置防火墙策略 firewall-cmd --add-port=80/tcp

 

 

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

注意:

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

-p 标记可以多次使用来绑定多个端口

映射所有接口地址:

使用 hostPort:containerPort 格式,将本地的10111端口映射到容器的 22 端口,本地的801端口映射到容器的80端口可以执行

二:Docker 四种网络模式

docker run 创建 Docker 容器时,可以用 --net 选项指定容器的网络模式,Docker 有以下 4 种网络模式:

  • host 模式,使用 --net=host 指定。
  • container 模式,使用 --net=container:NAMEorID 指定。
  • none 模式,使用 --net=none 指定。
  • bridge 模式,使用 --net=bridge 指定,默认设置。

Host模式:与宿主机公用网络配置

Container模式:先创建一个容器,然后--net=container:第一个容器名 创建出第二个容器。第二个容器共用第一个容器网络配置

Bridge模式:通过宿主机上的网桥与容器连接,进行网络通信

None模式:通过--net=none 创建出来的容器不会有任何网络配置,通过管理员自己手动配置。配置如下:

下面通过配置一个以 --net=none 启动的容器,使他达到跟平常一样具有访问网络的权限。来介绍docker 是如何连接到容器中的。

启动一个运行 /bin/bash的容器,并指定 --net=none

再开启一个新的终端,查找这个容器的进程 id ,然后创建它的命名空间,后面的 ip netns 会用到

检查桥接网卡的 ip 和子网掩码

创建一对” peer“接口 A 和 B ,绑定 A 到网桥,并启用它

将 B 放到容器的网络命名空间,命名为 eth0, 配置一个空闲的 ip

自此,你又可以像平常一样使用网络了

当你退出容器后, docker 清空容器,容器的 eth0 随网络命名空间一起被摧毁, A  接口也被自动从docker0取消注册。不用其他命令,所有东西都被清理掉了!

注意 ip netns exec 命令,它可以让我们像 root 一样配置网络命名空间。但在容器内部无法使用,因为统一的安全策略, docker 限制容器进程配置自己的网络。使用 ip netns exec  可以让我们不用设置--privileged=true 就可以完成一些可能带来危险的操作。

时间: 2024-10-07 13:37:51

Docker----网络部分的相关文章

Docker 网络部分执行流分析(libnetwork源码解读)

Libnetwork作为Docker网络部分的依赖库,在Docker1.9中正式脱离实验阶段,进入主分支正式投入生产使用阶段.有了新的Networking我们可以创建虚拟网络,然后将container加入到虚拟网络中,以获得最适合所部署应用的网络拓扑结构. 1 组件的标准化 为了标准化网络驱动的开发步骤和支持多种网络驱动,Docker公司在Libnetwork中实现了CNM(Container Network Model).CNM主要建立在如下三个组件上. 沙盒(Sandbox):一个沙盒包含了

一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72)

前面各小节我们先后学习了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主机网络方案.目前这个领域是百家争鸣,而且还有新的方案不断涌现. 本节将从不同维度比较各种网络方案,大家在选择的时候可以参考.CloudMan 的建议是:没有最好的,只有最适合的,明确自己的需求,通过 PoC 选型. Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 在

[转载] namespace技术

原文: http://www.infoq.com/cn/articles/docker-kernel-knowledge-namespace-resource-isolation namespace技术和cgroup技术是现阶段实现轻量级虚拟化的基石, 本文详细解释了namespace技术的基本原理, 对于理解namespace技术非常有帮助 Docker背后的内核知识——Namespace资源隔离 作者 孙健波 发布于 2015年3月12日 | 讨论 分享到:微博微信FacebookTwitt

Dockerfile 常用指令 - 每天5分钟玩转 Docker 容器技术(16)

是时候系统学习 Dockerfile 了. 下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档. FROM指定 base 镜像. MAINTAINER设置镜像的作者,可以是任意字符串. COPY将文件从 build context 复制到镜像.COPY 支持两种形式: COPY src dest COPY ["src", "dest"] 注意:src 只能指定 build context 中的文件或目录. ADD与 COPY 类似,从 b

Docker 使用总结

从贴出Docker 资料汇总那篇水帖, 到现在已经完整的做过一个用Docker部署的小型website集群并且已经上线运行了. 对docker的使用也有了些许体会(不过现在对Docker的理解还停留在一个轻度使用者的角度去理解).这个项目从负载均衡 .反向代理.及app server全都是跑在Docker容器上.为什么使用Docker? 也许是时候好好想想这个问题了.最开始用Docker只是为了快速部署,以及docker能对不同服务进行很好的隔离,还有更多的优秀特性并不了解.也许使用Docker

Docker run执行流详解(以volume,network和libcontainer为线索)

通常我们都习惯了使用Docker run来执行一个Docker容器,那么在我们执行Docker run之后,Docker到底都做了什么工作呢?本文通过追踪Docker run(Docker 1.9版本)的执行流程,借由对volume,network和libcontainer的使用和配置的介绍,对Docker run的原理进行了详细解读. 首先,用户通过Docker client输入docker run来创建被运行一个容器.Docker client主要的工作是通过解析用户所提供的一系列参数后,分

【原创】docker源码分析(5)---daemon

本文QQ空间链接为:http://user.qzone.qq.com/29185807/blog/1462498607 本文csdn博客链接为:http://blog.csdn.net/screscent/article/details/51328946 daemon是docker中最主要的部分,其中封装了所有的东西. 下面我们直接看代码吧 1.初始化流程 main函数 docker\docker\docker.go main函数中进入mainDaemon 在mainDaemon中,初始化 Ne

Docker源码分析(八):Docker Container网络(下)

1.Docker Client配置容器网络模式 Docker目前支持4种网络模式,分别是bridge.host.container.none,Docker开发者可以根据自己的需求来确定最适合自己应用场景的网络模式. 从Docker Container网络创建流程图中可以看到,创建流程第一个涉及的Docker模块即为Docker Client.当然,这也十分好理解,毕竟Docker Container网络环境的创建需要由用户发起,用户根据自身对容器的需求,选择网络模式,并将其通过Docker Cl

Docker三剑客之Swarm介绍

DockOne技术分享(二十): 我用swarm在多台物理机调度管理容器,用ovs实现跨主机的容器互联问题 [编者的话]Swarm项目是Docker公司发布三剑客中的一员,用来提供容器集群服务,目的是更好的帮助用户管理多个Docker Engine,方便用户使用,像使用Docker Engine一样使用容器集群服务.这次分享内容从Swarm项目现状.Swarm社区现状和Swarm未来的一些规划三方面介绍Swarm,目的是能让大家对Swarm有个完整的认识,并且希望更多的人采用到Swarm项目中来

Docker 容器整合 Spring Boot 应用

在本文中,我们将重点介绍如何对 Spring Boot 应用程序进行 Docker 容器化以在独立的环境(即容器)中运行它. 此外,我们还会展示如何创建容器的集成,它们彼此依赖并在虚拟专用网络中彼此链接.我们还能看到如何通过单个命令进行统一管理. 那么我们先来创建一个运行在 Alpine Linux 的基于 Java 的轻量级基础映像. 基础镜像构建 我们将使用 Docker 独有的编译文件格式: Dockerfile. Dockerfile 是一个面向行的批处理文件,包含建立一个镜像的命令.将