docker深入学习三
docker学习三:network
docker支持容器之间的网络通信,docker的网络通信方式有以下五种:
bridge | docker 默认的网络驱动,如果不指定网络驱动,docker就会创建一个bridge | bridge适用于同一docker主机上的容器通信 |
overlay | overlay支持不同daemon下的容器之间和集群服务之间的相互通信 | overlay适用于不同主机的容器之间的通信,或者集群服务中的多个应用程序协调工作 |
host | host消除了独立容器与主机之间的网络隔离,container直接使用主机的网络 | host适用于需要隔离容器除网络以外的其他部分的情况 |
macvlan | macvlan允许用户为容器分配MAC地址,daemon可以将流量通过容器MAC地址之间路由到容器而不需要经过docker host的网络栈 | macvlan适用于从虚拟机配置移植或者需要让容器表现为一台包含mac地址的物理机的情况 |
none | none禁止容器的所有网络,其一般和用户自定义网络驱动一起使用,集群服务不支持none |
bridge
docker bridge与一般的网桥功能类似,能够让同一网桥下的容器相互通信。
docker提供默认bridge,若不指定容器的驱动,则自动将容器关联到默认bridge中。 官方推荐用户自定义bridge而不是使用默认bridge
自定义bridge和默认bridge的区别
自定义bridge | 默认bridge | |
---|---|---|
隔离性和连接性 | 位于同一bridge的容器之间暴露自身所有的端口,容器端口默认对外界关闭,需要使用-p 或--publish 开启 |
需要手动打开端口,同时需要通过docker外的方式控制外界对端口的访问 |
容器之前的DNS服务 | 支持自动DNS解析,可以通过容器别名访问容器 | 容器之间只能通过ip地址访问或者为通信两端的容器分别使用--link 选项 |
热插拔 | 支持在运行过程中断开或连接自定义bridge | 容器与默认网桥断开时,需要关闭容器并使用新配置重建容器 |
全局配置 | 每个自定义bridge可以使用docker命令单独配置 | 对默认bridge的配置会影响到所有使用默认bridge的容器,且配置默认bridge需要使用docker外的命令 |
共享环境变量 | 自定义bridge无法直接共享环境变量,但可以通过 挂载卷或者目录 使用compos声明共享变量 使用集群服务代替独立容器,通过配置共享变量 |
使用--link flag共享环境变量 |
配置自定义bridge
创建和删除bridge的命令如下:
docker network create my-net
docker network rm my-net
创建bridge时可以配置bridge的子网范围、网关和其他选项,具体的配置参数可以使用docker network --help
或者查看官方文档
连接bridge
可以在创建容器的同时连接bridge,如:
$ docker create --name my-nginx \
--network my-net \
--publish 8080:80 \
nginx:latest
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a716400c6714 nginx:latest "nginx -g 'daemon of…" 7 minutes ago Created my-nginx
上面创建了一个容器my-nginx,同时将容器连接到my-net 网桥并将8080端口暴露出来供外界访问。
连接已存在的容器和bridge时可以使用以下命令
$ docker network connect my-net my-nginx
取消连接可以使用以下命令
$ docker network disconnect my-net my-nginx
overlay
overlay在多个docker主机上面创建一个分布式网络,该网络位于各个主机的具体网络之上,允许容器连接该网络进行通信。
当创建一个集群或者将docker主机加入到集群时,docker主机会创建两个网络:
ingress
:是一个overlay网络,用于处理和集群控制有关的命令和数据流量,如果创建集群时没有指定自定义overlay网络,集群默认连接到ingress
docker_gwbridge
:一个 bridge网络,用于连接集群中各个daemon守护进程
创建overlay
创建overlay的命令与bridge基本一致,但创建overlay的命令必须在位于集群中的主机执行,使用命令docker swarm init
或 docker swarm join
将主机加入到集群中
$ docker network create -d overlay my-overlay
host
使用host网络相当于容器和主机共享一个网络,docker不会为容器分配ip地址,访问容器端口的方式改为直接访问主机对应的端口,-p
、-P
等端口相关的指令会被忽略。
host网络只在linux下工作,不提供对mac和Windows的支持
macvlan
某些应用程序,尤其是后台应用程序或监视网络流量的应用程序,希望直接连接到物理网络。在这种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。在这种情况下,您需要在Docker主机上指定一个物理接口,用于macvlan,以及macvlan的子网和网关。您甚至可以使用不同的物理网络接口隔离您的macvlan网络。但需要记住以下事项:
- 由于IP地址耗尽或“VLAN传播”,很容易无意中损坏您的网络,在这种情况下,网络中存在大量不合适的MAC地址。
- 您的网络设备需要能够处理“混杂模式”,其中一个物理接口可以分配多个MAC地址。
- 如果您的应用程序可以使用bridge(在单个Docker主机上)或overlay(跨多个Docker主机进行通信),那么从长远来看,这些解决方案可能会更好。
none:关闭容器的网络
使用--network none
可以关闭容器内的网络栈,在容器内只剩下回环地址。
$ docker run --rm -dit \
--network none \
--name no-net-alpine \
alpine:latest \
ash
查看容器内部网络,里面只含有回环地址
$ docker exec no-net-alpine ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
docker深入学习三的更多相关文章
- Docker容器学习梳理 - 应用程序容器环境部署
关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...
- Docker容器学习梳理 - 日常操作总结
使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...
- Docker 入门 第三部分: 服务
目录 Docker 入门 第三部分: 服务 先决条件 介绍 你的第一个 docker-compose.yml 文件 docker-compose.yml 运行你新建的负载均衡应用 扩展应用程序 卸载应 ...
- Docker决战到底(三) Rancher2.x的安装与使用 - 简书
原文:Docker决战到底(三) Rancher2.x的安装与使用 - 简书 image.png 当越来越多的容器化应用被部署,一个可以管理编排这些容器的工具此时就显得尤为重要了.目前容器编排领域 ...
- docker深入学习
docker深入学习 一.容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+D ...
- 服务器搭建远程docker深度学习环境
服务器搭建远程docker深度学习环境 本文大部分内容参考知乎文章 Docker+PyCharm快速搭建机器学习开发环境 搭建过程中出现ssh连接问题可以查看最后的注意事项 Docker Docker ...
- 3.Docker容器学习之新手基础使用
原文地址: http://blog.weiyigeek.top/2019/5/2-docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9F%BA%E7%A1%80%E4%BD%B ...
- 在Windows环境中开始Docker的学习和体验
研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
随机推荐
- rep stos dword ptr es:[edi]
本文链接:https://blog.csdn.net/ypist/article/details/8467163今天读代码时,忽然跳出如下一条指令==>>汇编代码: rep stos dw ...
- 回文数 js 解法
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
- 洛谷P2877 [USACO07NOV]防晒霜Sunscreen
题目 此题有多种贪心方法. 首先简化题意: 有几个在数轴上的区间,和几个在数轴上确定的位置的点,问用这些数目的点,最多能满足多少个区间里有点. 注意:此题跟区间选点问题不一样,每个点只能满足一个区间, ...
- Linux 上配置 AG
SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...
- Eclipse 高亮显示(pydev 编辑 python)
因为是使用pydev编辑的python,所以需要修改(pydev)的属性. Window->Preferences->General->Editors->Text Editor ...
- (四)Cisco dhcp snooping实例2-多交换机环境(DHCP服务器和DHCP客户端位于不同VLAN)
试验拓扑 环境:dhcp server和客户端处于不同网段的情况 dhcp server的配置 no ip routing ip dhcp pool vlan27 network 172.28.27. ...
- Cloudera-Manager(一) —— 基本概念及使用
概念 Cloudera Manager(简称CM)是Cloudera公司开发的一款大数据集群安装部署利器,这款利器具有集群自动化安装.中心化管理.集群监控.报警等功能,极大的提高集群管理的效率. AP ...
- POP IM 产品分析报告
一. 体验环境 产品名称:POP IM 软件版本:v2.4.0 手机系统:一加5T Android 9 体验时间:2019.10.22-2019.10.31 二. 产品简介 1. 产品定位 ...
- 微信小程序开发——修改小程序原生checkbox、radio默认样式
复选框: 闲话少说,这里直接介绍如何修改小程序提供的复选框的样式,如原生的是这样的: 需要的是这样的: 示例代码: /*复选框外框样式*/ checkbox .wx-checkbox-input { ...
- [译]使用BeautifulSoup和Python从网页中提取文本
如果您要花时间浏览网页,您可能遇到的一项任务就是从HTML中删除可见的文本内容. 如果您使用的是Python,我们可以使用BeautifulSoup来完成此任务. 设置提取 首先,我们需要获取一些HT ...